本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Flow Framework基本概念:可靠的執行
非同步分散式應用程式必須處理傳統應用程式不會發生的可靠性問題,包括:
-
如何在非同步分散式元件間「提供可靠的通訊」,例如在遠端系統長期執行的元件。
-
如果元件失敗或中斷連線,如何「確保結果不遺失」,特別是長期執行的應用程式。
-
如何「處理失敗的分散式元件」。
應用程式可依賴AWS Flow Framework和 Amazon SWF 來管理這些問題。我們會探討 Amazon SWF 如何提供機制來確保您的工作流程以可靠且可預測的方式運作,即使它們長期執行,並依賴以運算方式及人為互動執行的非同步任務。
提供可靠的通訊
AWS Flow Framework使用 Amazon SWF 將任務分派給分散式活動工作者,並將結果傳回給工作流程工作者,來提供工作流程工作者及其活動工作者間的可靠通訊。Amazon SWF 使用以下方法確保工作人員與其活動之間的可靠通信:
-
Amazon SWF 長期存放排程活動和工作流程任務,並保證最多執行它們一次。
-
Amazon SWF 保證活動任務會順利完成並傳回有效的結果,或會通知工作流程工作者任務失敗。
-
Amazon SWF 長期存放每個已完成的活動結果,或為失敗的活動存放相關的錯誤資訊。
所以此AWS Flow Framework然後,使用 Amazon SWF 的活動結果決定如何繼續工作流程執行。
確保結果不遺失
維護工作流程歷史記錄
在一 PB 資料上執行資料採礦操作的活動可能需要「數小時」才能完成,而指揮人力工作者執行複雜任務的活動可能需要「數天」甚至「數週」才能完成!
為因應這類案例,AWS Flow Framework 工作流程和活動所需的完成時間不定:工作流程執行所需的時間「上限為一年」。可靠地執行長期執行的程序需要可持續長期存放工作流程執行歷史記錄的機制。
所以此AWS Flow Framework依賴 Amazon SWF 來處理此問題,它維護每個工作流程執行個體的執行中歷史記錄。工作流程的歷史記錄提供完整且權威的工作流程進度記錄,包括所有已排程和完成的工作流程和活動任務,及已完成或失敗之活動傳回的資訊。
AWS Flow Framework 應用程式通常不需要直接與工作流程歷史記錄互動,但若有需要其可存取該記錄。基於大部分的目的,應用程式讓框架在背後與工作流程歷史記錄互動即可。如需工作流程歷史記錄的完整討論,請參工作流程歷史記錄中的Amazon Simple Workflow Service 開發者指南。
無狀態的執行
執行歷史記錄允許工作流程工作者為「無狀態」。如果您有多個工作流程或活動工作者的執行個體,則任何工作者皆可執行任何任務。Amazon SWF 會收到執行任務所需的所有狀態資訊。
此方法可讓工作流程更可靠。例如,如果活動工作者失敗,您不必重新啟動工作流程。無論何時發生錯誤,只要重新啟動工作者,它就會開始輪詢任務清單並處理清單上的任何任務。您可以使用兩個或以上的工作流程和活動工作者 (可能在不同的系統上),讓整體的工作流程可容錯。然後,如果其中一個工作者失敗,其他工作者會繼續處理排程的任務,而不中斷工作流程進度。
處理失敗的分散式元件
活動通常因暫時的原因 (如短暫的中斷連線) 而失敗,所以處理失敗活動的常用策略是重試活動。應用程式不需實作複雜的訊息傳遞策略,可依賴 AWS Flow Framework 來處理重試程序。它可在工作流程中提供數種機制來重試失敗的活動,以及提供內建的例外狀況處理機制來搭配非同步分散式任務執行運作。