异步消息收发和事件传递 - 在 AWS 上实施微服务

异步消息收发和事件传递

事件传递是用于在微服务之间实现通信的另一种模式。服务通过队列交换消息进行通信。这种通信方式的一个主要优势是,不需要服务发现,而且服务是松散耦合的。

同步系统是紧密耦合的,这意味着同步下游依赖关系中的问题会直接影响上游调用者。上游调用者的重试操作可以快速扩散和放大问题。

根据协议等特定要求,AWS 提供不同的服务来帮助实施此模式。一种可能的实施方法是结合使用 Amazon Simple Queue Service (Amazon SQS) 队列或 Amazon Simple Notification Service (Amazon SNS)。

这两种服务紧密协作:Amazon SNS 使应用程序能够通过推送机制向多个订阅者发送消息。通过结合使用 Amazon SNS 和 Amazon SQS,一条消息可以传递给多个使用者。下图演示了 Amazon SNS 和 Amazon SQS 的集成。

AWS 上的消息总线模式

当您针对 SNS 主题订阅 Amazon SQS 队列时,您可以将消息发布到该主题,同时 Amazon SNS 将消息发送到订阅的 Amazon SQS 队列。该消息包含发布到该主题的标题和消息,以及 JSON 格式的元数据信息。

Amazon EventBridge 是构建事件驱动型架构的另一个选项,该架构具有大规模跨越内部应用程序、第三方 SaaS 应用程序和 AWS 服务的事件源。EventBridge 是一项完全托管式事件总线服务,它接收来自不同来源的事件,根据路由规则识别目标,然后向该目标(包括 AWS Lambda、Amazon SNS 和 Amazon Kinesis Streams 等)提供近乎实时的数据。入站事件也可以在传送之前通过输入转换器进行自定义。

为了显著加快开发事件驱动型应用程序的速度,EventBridge 架构注册表收集和组织架构,包括 AWS 服务生成的所有事件的架构。客户还可以定义自定义架构或使用推断架构选项来自动发现架构。然而,总的来说,所有这些功能的一个潜在权衡是 EventBridge 传输的延迟值相对较高。此外,EventBridge 的原定设置吞吐量和配额可能需要根据使用场景,通过支持请求来要求增加。

另一种实施策略基于 Amazon MQ,可在现有软件使用开放标准 API 和协议(包括 JMS、NMS、AMQP、STOMP、MQTT 和 WebSocket)进行消息收发时使用。Amazon SQS 公开了一个自定义 API,这意味着,如果您想要迁移某个现有应用程序(例如,将其从本地部署环境迁移到 AWS),则需要更改代码。使用 Amazon MQ,在许多情况下都不需要这样做。

Amazon MQ 负责管理和维护 ActiveMQ,这是一个常见的开源消息代理。自动预置底层基础设施,以实现高可用性和消息持久性,从而支持应用程序的可靠性。