发布/订阅模式 - AWS 规范性指导

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

发布/订阅模式

当一个平台增长时,在未创建相互依存性的情况下,不同微服务可能难以交互。发布/订阅(Pub/scub)模式在多个 AWS 服务(如 Amazon SQS、Lambda 或 Amazon Simple Storage Service (Amazon S3))之间提供异步通信,而不会产生相互依存关系。在这种模式下,微服务将事件作为消息发布于订阅用户可以侦听的信道中。例如,一家工厂可以使用发布/订阅模式使设备能够将问题或故障发布到某信道,然后订阅用户随后可以显示并记录这些设备问题。

若为以下情况,您应该考虑使用这种模式:

  • 您有一个事件驱动型架构。

  • 您可以启用松耦合架构。

  • 在响应返回调用系统之前,您无需完成事务的所有操作部分(某些操作可以为异步)。

  • 您需要扩展到超出传统数据中心能力以外的容量。这种级别的可扩展性主要归功于并行操作、消息缓存、基于树的路由以及发布/订阅模型中内置的其他功能。

    使用这种模式有几个劣势。例如,尽管某些服务(例如,Amazon Simple Notification Service (Amazon SNS))可以向某些订阅用户子集提供一次性传送,但发布/订阅模式通常无法保证向所有订阅用户类型发送消息。另一个缺点是,发行者可能假设订阅用户正在侦听某信道,而实际上他们没有侦听。

用例

在此用例中,SNS 主题用于向保险系统中的多个依赖微服务发布事件。客户按月付款后,必须在 “客户” 或 “销售” 等子系统中更新信息,并且必须向客户发送一封包含付款确认的电子邮件。这种模式可以通过使用 Amazon SNS 或 Amazon EventBridge 来实现。

EventBridge 筛选多个订阅用户之间的事件。EventBridge 实现过程提供以下两个选项:

  • 发送三个具有不同事件类型的事件。远距离目标根据事件规则拾捡这些事件。

  • 发送一条消息,其中三个事件规则侦听相同的事件类型。在调用特定目标之前,会过滤掉不必要的数据。

Amazon SNS 实施

下图显示了如何使用 Amazon SNS 来实现发布/订阅模式。用户付款后,“付款” Lambda 函数会向 “付款” SNS 主题发送 SNS 消息。此 SNS 主题有三个订阅用户,他们会收到消息的副本并对其进行处理。

适用于发布/订阅模式的 Amazon SNS 实施

Amazon EventBridge 实施

在下图中,EventBridge 用于构建发布/订阅模式的一个版本,其中订阅用户是使用事件规则定义的。用户付款后,“付款” Lambda 函数使用基于自定义架构的默认事件总线发送消息至 EventBridge,该自定义架构具有指向不同目标的三个不同规则。每个微服务都处理消息并执行要求的动作。

适用于发布/订阅模式的 Amazon EventBridge 实施