选择事件驱动的体系结构和消息传递解决方案

已完成

近年来,大多数复杂的系统都作为一组单独的服务实现,而非单一的单体应用程序。 此方法有助于让系统具备可管理性、可伸缩性和多功能性。 借助云原生微服务,该方法达到了可在云主机上良好运行的高级阶段。 但是,微服务必须相互通信,才能生成对用户请求的响应。 通过使用消息队列或事件总线,可以使这些通信更加可靠。

在全球自行车零售商的场景中,面向客户的网站是通过微服务构建的云原生应用程序。 它使用 Google Pub/Sub、Google Eventarc 和 Google Cloud Functions 来保证服务的可靠性。 你正在评估是否将系统迁移到 Azure,并且想要了解等效的消息处理服务。

在本单元中,你将了解 Azure 和 Google Cloud 中的消息队列系统和事件驱动的体系结构。

显示 Microsoft Azure 和 Google Cloud 提供的服务类型的示意图,其中突出显示了事件消息传递。

事件驱动的体系结构和消息传递体系结构分别是什么?

在分布式系统中,组件通常是分离的服务,它们必须进行协作才能生成对用户请求的响应。

例如,开发人员可能会创建一个 Web 前端服务,向客户提供自行车产品目录。 当用户将自行车添加到购物车时,前端可能会向购物车服务发送一条消息,内附要添加的产品 ID 和编号。 用户完成购买后,购物车服务可能会提醒库存管理服务减去库存数量并请求安排发货。 完成后的系统需要更多服务,且这些服务之间需要进行更多通信。

可以选择直接调用其他服务,但在需求高时或服务面临暂时中断时,这种方法可能会变得难以管理。 消息传递服务和事件中心可顺利应对这类困难。 消息传递服务和事件中心可维护消息队列或事件流。

这两种方法相似,但着重点不同。 事件驱动的体系结构:

  • 推动事件的生成、检测、使用和反应。 事件是组件中发生的状态变化或重要情况。
  • 包括发布事件及其特征的事件生成者。
  • 让事件使用者侦听和响应事件。
  • 使用事件存储来管理事件流。
  • 支持实时数据处理和即时响应。

消息传递体系结构:

  • 侧重于组件与消息之间的通信。 消息可以是服务之间传输的数据的任何部分。
  • 包括发送消息及其内容的消息生成者。
  • 具有接收和处理消息的消息使用者。
  • 使用消息代理维护消息队列,供使用者提取消息。
  • 支持在分离组件(如微服务)之间进行可靠通信。

比较事件驱动的体系结构服务

Google Cloud 事件驱动的服务包括 Pub/Sub,它用于事件引入和交付。 Eventarc 是一项服务,用于将事件从各种源路由到 Cloud Run、Cloud Function 或 Workflows。 让我们将这些服务与 Azure 等效服务进行比较:

用途 Azure Google Cloud 注释
事件路由 Azure 事件网格 Eventarc 事件网格是一项完全托管的事件路由服务,它使用发布和订阅模型进行近实时处理。 借助它,可通过将事件从任何源路由到任何目标来生成基于事件的体系结构。 事件网格提供与 Azure 服务更深度集成的体验。
事件响应 Azure Functions Cloud Functions Azure Functions 是一项无服务器计算服务,可用于按需运行代码,其运行由来自各种源的事件触发。 借助 Google Cloud Functions,也可运行无服务器按需代码。
事件处理 Azure 事件中心 适用于 Apache Kafka 的 Pub/Sub 或托管服务 事件中心是一个大数据流式处理平台,也是一项事件引入服务,每秒可处理数百万个事件。 事件中心提供与 Apache Kafka 具有兼容性和奇偶校验的 API。

比较消息服务

可以使用 Google Cloud Pub/Sub 服务来托管事件驱动的体系结构和消息传递体系结构。 Azure 不采用此方法。 若要在 Azure 中生成消息传递,请使用以下服务而不是事件网格:

用途 Azure 服务 注释
消息队列 Azure 队列存储 Azure 队列存储是一项简单的队列服务,用于应用程序组件之间的大容量消息传递。
消息代理 Azure 服务总线 Azure 服务总线是一种包含消息队列和发布/订阅主题的企业消息代理。

了解详细信息