Amazon 簡單的工作流服務 - Amazon Simple Workflow Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon 簡單的工作流服務

本章提供使用 Amazon SWF 開發工作流程時非常有用的其他資源和參考資訊。

Amazon SWF 超時類型

為確保工作流程執行正確執行,Amazon SWF 可讓您設定不同類型的逾時。有些逾時會指定工作流程總共可以執行多久。有些逾時則指定活動任務要多久才能指派給工作者,以及從排程開始要多久才可以完成。Amazon SWF API 中的所有逾時時間都會以秒為單位指定。Amazon SWF 也支援該字串NONE做為逾時值,表示沒有逾時。

對於與決策任務和活動任務相關的逾時,Amazon SWF 會在工作流程執行歷程記錄中新增事件。事件的屬性提供有關發生的逾時類型,以及哪些決策任務或活動任務受到影響的資訊。Amazon SWF 也會排程決策任務。當決策程序接收到新的決策任務時,它會看到歷史記錄中的超時事件,並通過調用操作採取適當的RespondDecisionTaskCompleted操作。

任務從排程起到結束的這段時間,視為開啟。因此,任務在工作者處理它時會回報為開啟。當工作者回報任務為完成取消失敗時,任務即結束。Amazon SWF 也可能因為逾時而關閉任務。

工作流程和決策任務的逾時

下圖示範工作流程和決策逾時與工作流程生命週期的關係:

工作流程的生命週期,有逾時

有兩種逾時類型與工作流程和決策任務相關:

  • 工作流程開始至關閉 (timeoutType: START_TO_CLOSE) — 此逾時指定完成工作流程執行所需的時間上限。它在工作流程註冊期間設為預設值,但可在工作流程開始後用不同的值覆寫。如果超過此逾時,Amazon SWF 會關閉工作流程執行,並將類型WorkflowExecutionTimedOut為的事件新增至工作流程執行歷程記錄。除 timeoutType 之外,事件屬性還會指定對此工作流程執行生效的 childPolicy。子政策指定如果父工作流程執行逾時或終止,子工作流程執行的處理方式。例如,如果 childPolicy 設為 TERMINATE,則子工作流程執行會予以終止。一旦工作流程執行逾時,除可見度呼叫外,您無法對它採取任何動作。

  • 決策任務開始至關閉 (timeoutType: START_TO_CLOSE) — 此逾時指定對應決策程式完成決策任務所需的時間上限。它是在工作流程型註冊期間設定。如果超過此逾時,任務會在工作流程執行歷程記錄中標示為逾時,而 Amazon SWF 會在工作流程歷程記錄中新增類型DecisionTaskTimedOut事件。這些事件屬性會包含當此決策任務排程 (scheduledEventId) 及啟動時 (startedEventId) 所對應的事件 ID。除了新增事件之外,Amazon SWF 還會排程新的決策任務,以提醒決策程式此決策任務逾時。此逾時發生後,使用 RespondDecisionTaskCompleted 完成逾時決策任務的嘗試會失敗。

活動任務的逾時

下圖示範逾時與活動任務生命週期的關係:

任務的生命週期,有逾時

有四種逾時類型與活動任務相關:

  • 活動任務開始至關閉 (timeoutType: START_TO_CLOSE) — 此逾時指定活動 Worker 收到任務後處理任務所需的時間上限。嘗試使用RespondActivityTaskCanceledRespondActivityTaskCompleted和關閉逾時的活動工作RespondActivityTaskFailed將會失敗。

  • 活動工作活動訊號 (timeoutType: HEARTBEAT) — 此逾時指定工RecordActivityTaskHeartbeat作在透過動作提供進度之前,可執行的時間上限。

  • 啟動的活動任務排程 (timeoutType: SCHEDULE_TO_START) — 此逾時指定如果沒有工作者可用來執行任務,Amazon SWF 會在逾時活動任務之前等待多久。一旦逾時,過期的任務就會不指派給其他工作者。

  • 要關閉的活動任務排程 (timeoutType: SCHEDULE_TO_CLOSE) — 此逾時指定任務從排定到完成的時間可能需要多長時間。最佳作法是,此值不應大於工作逾時和作業 schedule-to-start 逾時的總和。 start-to-close

注意

每種逾時類型都有預設值,一般設為 NONE (無限)。但是任何活動執行的時間上限都限制在一年。

您是在活動類型註冊期間設定這些預設值,但在排程活動任務時還可使用新值加以覆寫。當其中一項逾時發生時,Amazon SWF 會在工作流程歷程記錄中新ActivityTaskTimedOut增類型事件。此事件的 timeoutType 值屬性會指定這些逾時中的哪一個會發生。這些逾時每一個的 timeoutType 值都會出現在括號中。這些事件屬性也會包含當活動任務排程 (scheduledEventId) 及啟動時 (startedEventId) 所對應的事件 ID。除了新增事件之外,Amazon SWF 還會排程新的決策任務,以警示決策程式發生逾時。

Amazon 簡單工作流程服務端點

中提供了目前 Amazon SWF 區域和端點的清單 Amazon Web Services 一般參考,以及其他服務的端點。

Amazon SWF 網域及所有相關工作流程和活動必須存在於同一個區域內,才能彼此通訊。此外,一個區域中註冊的任何網域、工作流程和活動,不會存在於其他區域中。例如,如果您在 us-east-1 和 us-west- 2 中建立名為「MySampleDomain」的網域,它們會以個別的網域形式存在:與您的網域相關聯的任何工作流程、工作清單、活動或資料都不會跨區域共用。

如果您在工作流程中使用其他 AWS 資源 (例如 Amazon EC2 執行個體),這些資源也必須與 Amazon SWF 資源位於相同的區域中。唯一的例外是跨區域的服務,例如 Amazon S3 和 IAM。您可以從存在於任何支援區域中的工作流程存取這些服務。

Amazon 簡易工作流程服務的其他文件

除了本《開發人員指南》之外,下列文件也十分有幫助。

Amazon 簡單工作流服務 API 參考

Amazon 簡易工作流程服務 API 參考提供有關 Amazon SWF HTTP API 的詳細資訊,包括動作、請求和回應結構以及錯誤代碼。

AWS Flow Framework 文件

AWS Flow Framework是一種程式設計架構,可簡化使用 Amazon SWF 來管理其工作流程和活動的分散式非同步應用程式的實作程序,因此您可以專注於實作工作流程邏輯。

每種設計都 AWS Flow Framework 是以慣用設計的語言運作,因此您可以自然地使用自己選擇的語言來實作工作流程,並享有 Amazon SWF 的所有優點。

有一個適用於 Java 的 AWS 流程框架。Java 開發人員指南提供有關如何取得、設定和使用 AWS Flow Framework for Java 的相關資訊。AWS Flow Framework

AWS SDK 文件集

AWS 軟體開發套件 (SDK) 可讓您以多種不同的程式設計語言存取 Amazon SWF。這些開發套件會緊密遵循 HTTP API,但也為某些 Amazon SWF 功能提供特定語言的程式設計界面。您可以瀏覽下列連結來深入了解每個開發套件的相關資訊。

注意

此處僅列出在撰寫本文時支援 Amazon SWF 的開發套件。如需可用 AWS 開發套件的完整清單,請造訪 Amazon Web Services 工具頁面。

Java

提 AWS SDK for Java 供 AWS 基礎架構服務的 Java API。

若要檢視現已提供的文件,請參閱AWS SDK for Java 文件頁面。您也可以透過以下連結直接前往 SDK 參考資料中的 Amazon SWF 區段:

JavaScript

AWS SDK for JavaScript 允許開發人員構建庫或應用程序,使用簡單的和 easy-to-use API 可在瀏覽器或 AWS 服務器上的 Node.js 應用程序內部使用服務。

若要檢視現已提供的文件,請參閱AWS SDK for JavaScript 文件頁面。您也可以透過以下連結直接前往 SDK 參考資料中的 Amazon SWF 區段:

.NET

AWS SDK for .NET 是單一、可下載的套件,其中包含 Visual Studio 專案範本、 AWS .NET 程式庫、C# 程式碼範例和文件。這 AWS SDK for .NET 使得 Windows 開發人員可以更輕鬆地為 Amazon SWF 和其他服務構建 .NET 應用程序。

若要檢視現已提供的文件,請參閱AWS SDK for .NET 文件頁面。您也可以透過以下連結直接前往 SDK 參考資料中的 Amazon SWF 區段:

PHP

該 AWS SDK for PHP 提供了一個 PHP 編程接口 Amazon SWF。

若要檢視現已提供的文件,請參閱AWS SDK for PHP 文件頁面。您也可以透過以下連結直接前往 SDK 參考資料中的 Amazon SWF 區段:

Python

該 AWS SDK for Python (Boto) 提供了一個 Python 編程接口 Amazon SWF。

要查看可用的文檔,請參閱 bodo:Amazon Web Services 的 Python 界面頁面。您也可以透過以下連結直接前往文件中的 Amazon SWF 區段:

Ruby

該 AWS SDK for Ruby 提供了一個紅寶石編程接口 Amazon SWF。

若要檢視現已提供的文件,請參閱AWS SDK for Ruby 文件頁面。您也可以透過以下連結直接前往 SDK 參考資料中的 Amazon SWF 區段:

AWS CLI 文件

AWS Command Line Interface (AWS CLI) 是管理 AWS 服務的統一工具。只要下載和設定一個工具,您就可以從命令列控制多個 AWS 服務,並透過指令碼將它們自動化。

如需有關的詳細資訊 AWS CLI,請參閱AWS Command Line Interface頁面。

如需 Amazon SWF 可用命令的概觀,請參閱AWS CLI 命令參考中的 swf

Amazon 簡單工作流程服務的 Web 資源

您可以使用許多 Web 資源進一步了解 Amazon SWF,或取得有關使用服務和開發工作流程的協助。

Amazon SWF 論壇

Amazon SWF 論壇為您提供了一個與 Amazon SWF 開發人員和 Amazon SWF 開發團隊成員進行交流的地方,以提出問題並獲得答案。

您可以訪問論壇:論壇:Amazon 簡單工作流服務

Amazon SWF 常見問

Amazon SWF 常見問答集提供有關 Amazon SWF 的常見問題解答,包括常見使用案例概觀、Amazon SWF 與其他服務之間的差異等。

您可以在此處存取常見問題集:Amazon SWF 常見問題集

Amazon SWF 視頻

Amazon Web Services 渠道上 YouTube提供了所有的亞馬遜網絡服務的視頻培訓, 包括 Amazon SWF. 有關亞馬遜 SWF 相關視頻的完整列表,請使用以下查詢:Amazon Web Services 中的簡單工作流程

Ruby 流程的移轉選項

Ruby 不再處 AWS Flow Framework 於積極開發狀態。雖然現有的程式碼會無限期地繼續運作,但不會有新功能或版本。本主題將介紹繼續使用 Amazon SWF 的用法和移轉選項,以及如何遷移至 Step Functions 的相關資訊。

選項 描述

繼續使用 Ruby Flow Framework

目前,Ruby Flow Framework 會繼續運作。如果您不採取任何動作,您的程式碼會依現狀繼續運作。計劃在不久 AWS Flow Framework 的 future 從 Ruby 遷移。

遷移至 Java Flow Framework

Java Flow Framework 會繼續積極開發,並繼續收到新功能和更新。

遷移至 Step Functions

Step Functions 可讓您使用由狀態機器控制的視覺化工作流程,來協調分散式應用程式的元件。

直接使用 SWF API,而不使用 Flow Framework 您可以繼續在 Ruby 中工作,並直接使用 SWF API 而不是 Ruby Flow Framework。

Ruby 或 Java Flow Framework 提供的優點是可讓您專注於工作流程邏輯。框架會處理大部分的通訊和協調詳細資訊,並將一些複雜性抽象化。您可以移轉至 Java 流程架構,繼續擁有相同層級的抽象概念,或直接與 Amazon SWF 開發套件進行互動。

繼續使用 Ruby Flow Framework

在短期內, AWS Flow Framework 對於 Ruby 將繼續像現在一樣運作。如果您有以 Ruby 撰寫的工作流程,這些工作流程將會繼續運作。 AWS Flow Framework AWS Flow Framework 如果沒有更新、支援或安全性修正,最好有一個堅定的計劃,在不久的 future 從 Ruby 遷移。

遷移至 Java Flow Framework

對 AWS Flow Framework 於 Java 將保持積極開發。從概念上講, AWS Flow Framework for Java 類似 AWS Flow Framework 於 for Ruby:您仍然可以專注於工作流程邏輯,並且框架將有助於管理決策程序邏輯,並使 Amazon SWF 的其他方面更易於管理。

遷移至 Step Functions

AWS Step Functions 提供類似於 Amazon SWF 的服務,但工作流程邏輯由狀態機器控制。Step Functions 可讓您使用視覺化工作流程來協調分散式應用程式和微服務的元件。您可以從個別元件建立應用程式,這些元件會各自執行不同的功能或任務,讓您快速擴展及變更應用程式。Step Functions 提供了一種可靠的方法來協調組件並逐步執行應用程序的功能。圖形化主控台可讓您將應用程式的元件視覺化成一連串的步驟。它會自動觸發和追蹤每個步驟,並在發生錯誤時重試,因此您的應用程式每次都能按預期順序執行。Step Functions 記錄每個步驟的狀態,因此當事情出錯時,您可以快速診斷和調試問題。

在 Step Functions 中,您可以使用使用使用 Amazon 州語言定義的宣告式 JSON 撰寫的狀態機器來管理任務的協調。通過使用狀態機,您不必編寫和維護決策程序來控制應用程序邏輯。Step Functions 提供直覺式、生產力且敏捷的方法,使用視覺化工作流程協調應用程式元件。您應該考慮使 AWS Step Functions 用所有新的應用程式,而 Step Functions 為您目前在 for Ruby 中實作的工作流程提供了一個絕佳的 AWS Flow Framework 平台。

為了協助您將任務遷移到 Step Functions,同時繼續利用您的 Ruby 語言技能,Step Functions 提供了一個示例 Ruby 活動工作者。此範例使用實作活動 Worker 的最佳作法,並可作為範本來將任務邏輯移轉至 Step Functions。如需詳細資訊,請參閱開發人AWS Step Functions 員指南中的 Ruby 中的範例活動工作主題。

注意

對於許多客戶而言,從 Ruby 遷移到 Step Functions 是最佳選擇。 AWS Flow Framework 但是,如果您要求該訊號介入您的程序,或者您需要啟動將結果傳回給父系的子程序,請考慮直接使用 Amazon SWF API,或移轉至 AWS Flow Framework for Java。

如需詳細資訊 AWS Step Functions,請參閱:

直接使用 Amazon SWF API

雖然紅寶石可以管理 Amazon SWF 的一些複雜性,但您也可以直接使用 Amazon SWF API。 AWS Flow Framework 直接使用 API 可讓您建立能夠完全控制任務實作與協調的工作流程,而無需擔心基本的複雜性,例如追蹤其進度及維護其狀態。