AWS Flow Framework基本概念:分散式執行 - AWS Flow Framework 對於爪哇

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

AWS Flow Framework基本概念:分散式執行

一個執行個體基本上是執行的虛擬執行線程,可遍及在多部遠端電腦上執行的活動和協調作業邏輯。「卓越 Amazon SWF」和AWS Flow Framework函數作為操作系統,通過以下方式管理虛擬 CPU 上的工作流實例:

  • 維護各執行個體的執行狀態。

  • 在執行個體間切換。

  • 在關閉執行個體的當下繼續執行執行個體。

重新執行工作流程

因為活動可以長期執行,所以不會只封鎖工作流程到完成。相反地,AWS Flow Framework管理工作流程執行,方法是使用重播機制,依賴 Amazon SWF 維護的工作流程歷史記錄分段執行工作流程。

每個部分都會以「每項活動只執行一次」的方式重新執行工作流程邏輯,確保活動和同步方法不執行,直到它們的 Promise 物件就緒。

工作流程啟動者在啟動工作流程執行時起始第一個重新執行的部分。框架會呼叫工作流程進入點方法以及:

  1. 執行所有不依賴活動完成的工作流程任務,包括呼叫所有活動用戶端方法。

  2. 向 Amazon SWF 提供一份活動任務清單來排程執行。在第一個部分,此清單只包含不依賴 Promise 且可立即執行的活動。

  3. 通知 Amazon SWF 此部分已完成。

Amazon SWF 會將活動任務存放到工作流程歷史記錄,並將它們放在活動任務清單中來排程執行。活動工作者輪詢任務清單並執行任務。

當活動工作者完成某項任務時,它會將結果傳回 Amazon SWF,記錄在工作流程執行歷史記錄中,並排程新的工作流任務,方法是將工作流工作人員放在工作流任務列表中。工作流程工作者輪詢任務清單,在它接到任務時執行下一段的重新執行部分,如下所示:

  1. 框架會再次執行工作流程進入點方法以及:

    • 執行所有不依賴活動完成的工作流程任務,包括呼叫所有活動用戶端方法。但是框架會檢查執行歷史記錄,卻不排程重複的活動任務。

    • 檢查歷史記錄查看哪些活動任務已完成,執行依賴這些活動的任何非同步工作流程方法。

  2. 當所有可執行的工作流程任務皆完成後,框架會向回報 Amazon SWF:

    • 它為 Amazon SWF 提供了一個列表,其中列出了其輸入Promise<T>自最後一部分開始就緒,可排程執行。

    • 如果此部分未產生任何額外活動任務,但仍有未完成的活動,則框架會通知 Amazon SWF 此部分已完成。然後,它會等待另一項活動完成,初始化下一個重新執行的部分。

    • 如果此部分未產生任何額外活動任務,而所有活動皆已完成,則框架會通知 Amazon SWF 工作流程執行已完成。

如需重新執行行為的範例,請參閱「AWS Flow Framework執行 Java 重新執行行為」。

重新執行和非同步的工作流程方法

非同步工作流程方法的使用通常很像活動,因為方法會延遲執行直到所有輸入 Promise<T> 物件皆就緒。但是,重新執行機制處理非同步方法和處理活動不一樣。

  • 重新執行不保證非同步方法只會執行一次。它會延遲執行非同步方法,直到其輸入 Promise 物件皆就緒,但它接著會針對所有後續部分執行該方法。

  • 當非同步方法完成時,不會開始新的部分。

AWS Flow Framework執行 Java 重新執行行為」中有提供重新執行非同步工作流程的範例。

重新執行與工作流程實作

大多數情況下,您不需要考慮重新執行機制的細節。它基本上是發生在幕後。不過,重新執行有兩項重要的實作針對您的工作流程實作。

  • 不要使用工作流程方法來執行長期執行的任務,因為重新執行會多次重複該任務。即使是非同步的工作流程方法一般都會執行一次以上。請改用活動處理長期執行的任務,重新執行只會執行一次活動。

  • 您的工作流程邏輯必須是完全確定的,每一個部分都必須採用相同的控制流程路徑。例如,控制流程路徑不應該相依於目前的時間。如需重新執行和確定性要求的詳細說明,請參閱「不確定性」。