

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

# 沟通机制
<a name="communication-mechanisms"></a>

 在微服务模式中，应用程序的各个组件必须通过网络进行通信。实现此目的的常用方法包括基于 REST、基于 GraphQL、基于 GRPC 和异步消息传递。

## 基于休息的沟通
<a name="rest-based-communication"></a>

 该 HTTP/S 协议广泛用于微服务之间的同步通信，通常通过 RESTful APIs它运行。API Gateway 提供了一种简化的方法来构建 API，该API充当后端服务的集中接入点，处理流量管理、授权、监控和版本控制等任务。

## 基于 GraphQL 的通信
<a name="graphql-based-communication"></a>

 同样，GraphQL 是一种广泛使用的同步通信方法，它使用与 REST 相同的协议，但限制了对单个端点的暴露。借助 AWS AppSync，您可以创建和发布直接与 AWS 服务和数据存储交互的 GraphQL 应用程序，或者为业务逻辑整合 Lambda 函数。

## 基于 GRPC 的通信
<a name="grpc-based-communication"></a>

 gRPC 是一种同步、轻量、高性能、开源 RPC 通信协议。gRPC 通过使用 HTTP/2 并启用更多功能（例如压缩和流优先级）对其底层协议进行了改进。它使用二进制编码的 Protobuf 接口定义语言 (IDL)，因此利用了 HTTP/2 二进制框架。

## 异步消息和事件传递
<a name="asynchronous-messaging-and-event-passing"></a>

异步消息允许服务通过队列发送和接收消息进行通信。这使服务能够保持松散耦合并促进服务发现。

消息可以定义为以下三种类型：
+  **消息队列：**消息队列充当缓冲区，用于分离消息的发送者（生产者）和接收者（使用者）。生产者将消息排入队列，而消费者则将消息出队并进行处理。这种模式对于异步通信、负载均衡和处理突发流量很有用。
+  **发布-订阅：**在发布-订阅模式中，一条消息发布到一个主题，多个感兴趣的订阅者会收到该消息。这种模式允许异步向多个使用者广播事件或消息。
+  **事件驱动的消息传递：**事件驱动的消息传递涉及捕获系统中发生的事件并做出反应。事件发布到消息代理，感兴趣的服务会订阅特定的事件类型。这种模式支持松散耦合，并允许服务在没有直接依赖关系的情况下对事件做出反应。

 为了实现每种消息类型， AWS 提供了各种托管服务，例如亚马逊 SQS、亚马逊 SNS、亚马逊 MQ 和 EventBridge亚马逊 MSK。这些服务具有针对特定需求量身定制的独特功能：
+  **亚马逊简单队列服务 (Amazon SQS) 和亚马逊简单通知服务 (Amazon SNS) Simple Notification：如图 8 所示，这两种服务相辅相成，亚马逊 SQS 提供了存储消息的空间，Amazon SNS 允许向多个订阅者传送**消息。当需要将同一封邮件传送到多个目的地时，它们会生效。  
![显示消息总线模式开启的示意图 AWS](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/microservices-on-aws/images/message-bus-pattern.png)
+  **Amazon EventBridge：**一种无服务器服务，它使用事件将应用程序组件连接在一起，使您可以更轻松地构建可扩展的事件驱动应用程序。使用它可以将来自本土应用程序、 AWS 服务和第三方软件等来源的事件路由到组织中的消费者应用程序。 EventBridge 提供了一种简单而一致的方法来提取、筛选、转换和交付事件，因此您可以快速构建新应用程序。 EventBridge 事件总线非常适合在事件驱动的服务之间 many-to-many路由事件。
+  **Amazon MQ：**如果您的现有消息系统使用 JMS、AMQP 或类似协议等标准协议，那么这是一个不错的选择。此托管服务可在不中断操作的情况下替换您的系统。
+  **Amazon MSK（托管 Kafka）：**一种用于存储和读取消息的消息系统，适用于必须多次处理消息的情况。它还支持实时消息流。
+  **Amazon Kinesis：**实时处理和分析流数据。这允许开发实时应用程序，并提供与 AWS 生态系统的无缝集成。

 请记住，最适合您的服务取决于您的特定需求，因此了解每项服务提供的服务以及它们如何与您的要求保持一致非常重要。

## 编排和状态管理
<a name="orchestration-and-state-management"></a>

 微服务编排是指一种集中式方法，在这种方法中，一个名为协调器的中央组件负责管理和协调微服务之间的交互。跨多个微服务协调工作流程可能具有挑战性。不鼓励将编排代码直接嵌入到服务中，因为它会引入更紧密的耦合并阻碍替换单个服务。

 Step Functions 提供了一个工作流引擎，用于管理服务编排的复杂性，例如错误处理和序列化。这使您无需添加协调代码即可快速扩展和更改应用程序。Step Functions 是 AWS 无服务器平台的一部分，支持 Lambda 函数、亚马逊 EC2、亚马逊 EKS、亚马逊 ECS SageMaker AWS Glue、人工智能等。

![由调用的微服务工作流程示意图 AWS Step Functions](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/microservices-on-aws/images/microservices-workflow-with-steps.png)


[适用于 Apache Airflow 的亚马逊托管工作流程](https://aws.amazon.com/managed-workflows-for-apache-airflow/)（亚马逊 MWAA）是 Step Functions 的替代方案。 如果您优先考虑开源和便携性，则应使用 Amazon MWAA。Airflow拥有一个庞大而活跃的开源社区，该社区定期提供新功能和集成。