

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

# AWS Flow Framework 基本概念：可靠的執行
<a name="awsflow-basics-reliable-execution"></a>

非同步分散式應用程式必須處理傳統應用程式不會發生的可靠性問題，包括：
+ 如何在非同步分散式元件間「提供可靠的通訊」**，例如在遠端系統長期執行的元件。
+ 如果元件失敗或中斷連線，如何「確保結果不遺失」**，特別是長期執行的應用程式。
+ 如何「處理失敗的分散式元件」**。

應用程式可以依賴 AWS Flow Framework 和 Amazon SWF 來管理這些問題。我們將探索 Amazon SWF 如何提供機制，以確保您的工作流程以可靠且可預測的方式運作，即使它們長時間執行，也取決於以運算和人類互動執行的非同步任務。

## 提供可靠的通訊
<a name="awsflow-basics-reliable-execution-communication"></a>

AWS Flow Framework 使用 Amazon SWF 將任務分派給分散式活動工作者，並將結果傳回給工作流程工作者，藉此在工作流程工作者與其活動工作者之間提供可靠的通訊。Amazon SWF 使用以下方法來確保工作者與其活動之間的可靠通訊：
+ Amazon SWF 長期存放排程的活動和工作流程任務，並保證它們最多會執行一次。
+ Amazon SWF 保證活動任務會成功完成並傳回有效的結果，或者會通知工作流程工作者任務失敗。
+ Amazon SWF 會永久儲存每個已完成活動的結果，或者，對於失敗的活動，它會儲存相關的錯誤資訊。

 AWS Flow Framework 然後， 會使用 Amazon SWF 的活動結果來決定如何繼續工作流程的執行。

## 確保結果不遺失
<a name="awsflow-basics-reliable-execution-history"></a>

### 維護工作流程歷史記錄
<a name="maintaining-workflow-history"></a>

在一 PB 資料上執行資料採礦操作的活動可能需要「數小時」**才能完成，而指揮人力工作者執行複雜任務的活動可能需要「數天」**甚至「數週」**才能完成！

為了因應這類情況， AWS Flow Framework 工作流程和活動可能需要很長的時間才能完成：工作流程執行*上限為一年*。可靠地執行長期執行的程序需要可持續長期存放工作流程執行歷史記錄的機制。

根據維護每個工作流程執行個體執行歷史記錄的 Amazon SWF， 會 AWS Flow Framework 處理此問題。工作流程的歷史記錄提供完整且權威的工作流程進度記錄，包括所有已排程和完成的工作流程和活動任務，及已完成或失敗之活動傳回的資訊。

AWS Flow Framework 應用程式通常不需要直接與工作流程歷史記錄互動，但可以在必要時進行存取。基於大部分的目的，應用程式讓框架在背後與工作流程歷史記錄互動即可。如需工作流程歷史記錄的完整討論，請參閱《*Amazon Simple Workflow Service 開發人員指南》中的工作流程*[歷史記錄](https://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-basic.html#swf-dev-about-workflow-history)。

### 無狀態的執行
<a name="stateless-execution"></a>

執行歷史記錄允許工作流程工作者為「無狀態」**。如果您有多個工作流程或活動工作者的執行個體，則任何工作者皆可執行任何任務。工作者會收到從 Amazon SWF 執行任務所需的所有狀態資訊。

此方法可讓工作流程更可靠。例如，如果活動工作者失敗，您不必重新啟動工作流程。無論何時發生錯誤，只要重新啟動工作者，它就會開始輪詢任務清單並處理清單上的任何任務。您可以使用兩個或以上的工作流程和活動工作者 (可能在不同的系統上)，讓整體的工作流程可容錯。然後，如果其中一個工作者失敗，其他工作者會繼續處理排程的任務，而不中斷工作流程進度。

## 處理失敗的分散式元件
<a name="awsflow-basics-reliable-execution-errors"></a>

活動通常因暫時的原因 (如短暫的中斷連線) 而失敗，所以處理失敗活動的常用策略是重試活動。應用程式不需實作複雜的訊息傳遞策略，可依賴 AWS Flow Framework來處理重試程序。它可在工作流程中提供數種機制來重試失敗的活動，以及提供內建的例外狀況處理機制來搭配非同步分散式任務執行運作。