協調 - AWS 方案指引

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

協調

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

AWS Step FunctionsAmazon Managed Workflows for Apache Airflow (Amazon MWAA) 是工作流程協調器的絕佳選擇。

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

範例:Step Functions

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

在以下情況下,您應該考慮使用 Step Functions:

  • 您的微服務整合涉及複雜的多步驟程序。

  • 您需要維持長時間執行操作的狀態。

  • 您想要在工作流程層級實作錯誤處理和重試邏輯。

  • 您需要同時協調同步和非同步操作。

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

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

使用 AWS Step Functions 建置用於微服務整合的複雜工作流程。

在上圖所示的狀態機器中,Step Functions 會協調下列步驟:

  • 驗證應用程式資料 (Lambda 函數)

  • 檢查點數分數 (呼叫外部 API 的 Lambda 函數)

  • 評估風險 (Lambda 函數)

  • 如果為高風險,請路由至手動檢閱 (人工核准任務)

  • 如果核准,請啟動貸款支出 (Lambda 函數)

  • 傳送通知給申請人 (Amazon SNS)

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

考量:

  • 仔細設計您的狀態機器,以處理所有可能的情況。

  • 盡可能平行執行步驟。

  • 使用 Step Functions 中的內建錯誤處理和重試機制來處理永久和暫時故障。

  • 考慮根據您的使用案例使用標準或快速工作流程。對於短期或大量工作流程,快速工作流程可能較適合。

  • 監控執行指標以最佳化您的工作流程。

  • 使用巢狀工作流程在多個狀態機器中封裝和重複使用功能。

  • 對於複雜的工作流程,請考慮使用 Amazon Bedrock 代理程式作為 Step Functions 的替代方案。

如需詳細資訊,請參閱 Step Functions 文件

範例:Amazon MWAA

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

使用 Amazon MWAA 和 DAGs 建置複雜的工作流程以進行微服務整合。

如需使用 DAGs的詳細資訊,請參閱 Amazon MWAA 文件

Step Functions 和 Amazon MWAA 之間的主要差異

  • Step Functions 是全受管無伺服器服務,因此不需要預先佈建基礎設施,也不需要排程維護時段。Amazon MWAA 必須提前部署,而且您可以選擇叢集中的節點大小和數量。

  • 在 Step Functions 中,您可以透過各種方式撰寫狀態機器,包括 Workflow Studio、直接做為 JSON 或使用 AWS Cloud Development Kit (AWS CDK)。Apache Airflow DAGs是以 Python 撰寫。

  • 使用 Step Functions,當沒有執行中的工作流程時,您無須付費。使用 Amazon MWAA,即使沒有執行 DAGs也會產生成本。