

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

# 協調
<a name="orchestration"></a>

在此方法中，單一協調器負責呼叫每個微服務、判斷是否依序或平行發出呼叫、沿途操作個別服務回應，以及編譯最終結果。協調器可以混合同步和非同步調用。

[AWS Step Functions](https://aws.amazon.com/step-functions/) 和 [Amazon Managed Workflows for Apache Airflow (Amazon MWAA)](https://aws.amazon.com/managed-workflows-for-apache-airflow/) 是工作流程協調器的絕佳選擇。

當您的程序中有邏輯分支，而且您需要單一位置來封裝該邏輯時，協調是不錯的選擇。當您想要實作非同步宣告檢查模式時，這也很有用。例如，Step Functions 中的標準工作流程可以暫停工作流程，並等待來自其他服務的回呼。使用協調器也可改善程序的監控和可觀測性。

## 範例：Step Functions
<a name="step-functions"></a>

您可以使用 Step Functions 來協調多個 Lambda 函數和其他函數 AWS 服務，以建置用於微服務整合的複雜工作流程。此選項對於涉及數個微服務的長期執行、多步驟程序特別有用。

在以下情況下，您應該考慮使用 Step Functions：
+ 您的微服務整合涉及複雜的多步驟程序。
+ 您需要維持長時間執行操作的狀態。
+ 您想要在工作流程層級實作錯誤處理和重試邏輯。
+ 您需要同時協調同步和非同步操作。

Step Functions 提供用於設計複雜工作流程的視覺化編輯器，可簡化建立和管理狀態機器的程序。它提供內建的錯誤處理機制，包括重試邏輯和錯誤狀態管理，可增強應用程式的可靠性和耐用性。標準工作流程支援長達一年的長時間執行程序，這適用於跨越較長期間的工作流程。此選項會將協同運作邏輯與應用程式程式碼分開，因此可大幅降低程式碼複雜性。這表示開發人員可以專注於核心商業邏輯，而 Step Functions 會處理分散式元件的流程控制和協調。

例如，考慮金融服務應用程式中的貸款核准程序，如下圖所示。程序會在提交貸款申請時開始。

![使用 AWS Step Functions 建置用於微服務整合的複雜工作流程。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/modernization-integrating-microservices/images/step-functions.png)


在上圖所示的狀態機器中，Step Functions 會協調下列步驟：
+ 驗證應用程式資料 (Lambda 函數）
+ 檢查點數分數 （呼叫外部 API 的 Lambda 函數）
+ 評估風險 (Lambda 函數）
+ 如果為高風險，請路由至手動檢閱 （人工核准任務）
+ 如果核准，請啟動貸款支出 (Lambda 函數）
+ 傳送通知給申請人 (Amazon SNS)

您可以使用此方法可靠地管理複雜、可能長時間執行的程序，具有內建錯誤處理和包含自動化和手動步驟的功能。

考量：
+ 仔細設計您的狀態機器，以處理所有可能的情況。
+ 盡可能平行執行步驟。
+ 使用 Step Functions 中的內建錯誤處理和重試機制來處理永久和暫時故障。
+ 考慮根據您的使用案例使用[標準或快速工作流程](https://docs.aws.amazon.com/step-functions/latest/dg/choosing-workflow-type.html)。對於短期或大量工作流程，快速工作流程可能較適合。
+ [監控執行指標](https://docs.aws.amazon.com/step-functions/latest/dg/monitoring-logging.html)以最佳化您的工作流程。
+ 使用巢狀工作流程在多個狀態機器中封裝和重複使用功能。
+ 對於複雜的工作流程，請考慮使用 [Amazon Bedrock 代理](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)程式作為 Step Functions 的替代方案。

如需詳細資訊，請參閱 [Step Functions 文件](https://docs.aws.amazon.com/step-functions/latest/dg/)。

## 範例：Amazon MWAA
<a name="mwaa"></a>

如果您的組織已經使用 Apache Airflow，Amazon MWAA 是工作流程協調器的自然選擇。在 Apache Airflow 中，您可以使用 Python 依指示建立工作流程無環圖 (DAGs)。Step Functions 區段中說明的狀態機器的 DAG 表示可能如下所示：

![使用 Amazon MWAA 和 DAGs 建置複雜的工作流程以進行微服務整合。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/modernization-integrating-microservices/images/mwaa.png)


如需使用 DAGs的詳細資訊，請參閱 [Amazon MWAA 文件](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)。

## Step Functions 和 Amazon MWAA 之間的主要差異
<a name="differences"></a>
+ Step Functions 是全受管無伺服器服務，因此不需要預先佈建基礎設施，也不需要排程維護時段。Amazon MWAA 必須提前部署，而且您可以選擇叢集中的節點大小和數量。
+ 在 Step Functions 中，您可以透過各種方式撰寫狀態機器，包括 Workflow Studio、直接做為 JSON 或使用 AWS Cloud Development Kit (AWS CDK)。Apache Airflow DAGs是以 Python 撰寫。
+ 使用 Step Functions，當沒有執行中的工作流程時，您無須付費。使用 Amazon MWAA，即使沒有執行 DAGs也會產生成本。