本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
協調
在此方法中,單一協調器負責呼叫每個微服務、判斷是否依序或平行發出呼叫、沿途操作個別服務回應,以及編譯最終結果。協調器可以混合同步和非同步調用。
AWS Step Functions
當您的程序中有邏輯分支,而且您需要單一位置來封裝該邏輯時,協調是不錯的選擇。當您想要實作非同步宣告檢查模式時,這也很有用。例如,Step Functions 中的標準工作流程可以暫停工作流程,並等待來自其他服務的回呼。使用協調器也可改善程序的監控和可觀測性。
範例:Step Functions
您可以使用 Step Functions 來協調多個 Lambda 函數和其他函數 AWS 服務,以建置用於微服務整合的複雜工作流程。此選項對於涉及數個微服務的長期執行、多步驟程序特別有用。
在以下情況下,您應該考慮使用 Step Functions:
-
您的微服務整合涉及複雜的多步驟程序。
-
您需要維持長時間執行操作的狀態。
-
您想要在工作流程層級實作錯誤處理和重試邏輯。
-
您需要同時協調同步和非同步操作。
Step Functions 提供用於設計複雜工作流程的視覺化編輯器,可簡化建立和管理狀態機器的程序。它提供內建的錯誤處理機制,包括重試邏輯和錯誤狀態管理,可增強應用程式的可靠性和耐用性。標準工作流程支援長達一年的長時間執行程序,這適用於跨越較長期間的工作流程。此選項會將協同運作邏輯與應用程式程式碼分開,因此可大幅降低程式碼複雜性。這表示開發人員可以專注於核心商業邏輯,而 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 表示可能如下所示:
如需使用 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也會產生成本。