

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 编排
<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_cn/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_cn/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 A DAGs irflow 是用 Python 编写的。
+ 使用 Step Functions 时，若无工作流在运行，不会产生任何费用。使用 Amazon MWAA，即使没有 DAGs 运行，您也会产生费用。