什么是 Pub/Sub?

Pub/Sub 是一种异步消息传递服务,可将产生事件的服务与处理事件的服务分离开。

您可以将 Pub/Sub 用作消息传递的中间件,或是用在流式分析流水线上提取和传送事件。

Pub/Sub 能够长时间存储消息,并能够大规模实时传送消息,而且可用性高,性能稳定。Pub/Sub 服务器可在全球所有 Google Cloud 区域运行。

要立即开始使用,不妨试试从快速入门:使用 Cloud Console开始。如需了解更全面的介绍,请参阅构建一个正常运行的 Pub/Sub 系统

核心概念

  • 主题:发布者向其发送消息的已命名资源。
  • 订阅:代表从单个特定主题传送到订阅应用的消息流的已命名资源。 如需详细了解订阅和消息传送语义,请参阅订阅者指南
  • 消息:发布者向主题发送并最终传送给订阅者的数据和(可选)特性的组合。
  • 消息特性:发布者可以为消息定义的键值对。例如,可以将键 iana.org/language_tag 和值 en 添加到消息中,将消息标记为可供英语订阅者阅读。

发布者-订阅者关系

发布者应用创建主题并将消息发送到主题。订阅者应用创建对主题的订阅以便从其接收消息。 通信可以是一对多(扇出)、多对一(扇入)和多对多,如下图所示。

发布者 A 和 B 向同一订阅者传送消息,而发布者 C 向多个订阅者传送消息。

Pub/Sub 消息流

下图概括介绍了 Pub/Sub 系统的组件以及消息如何在各组件之间传送:

Pub/Sub 系统中的主要组件包括消息、主题和订阅。
  1. 发布者应用在 Pub/Sub 服务中创建主题,并向该主题发送消息。消息包含载荷和描述载荷内容的可选特性
  2. 该服务确保系统为订阅保留已发布的消息。已发布的消息会一直保留,直到有通过该订阅使用消息的任何订阅者确认为止。
  3. Pub/Sub 将消息逐个从主题转发到其所有订阅。
  4. 订阅者通过以下方式接收消息:Pub/Sub 将消息推送到订阅者的所选端点,或订阅者从服务中拉取消息。
  5. 对于其收到的每条消息,订阅者向 Pub/Sub 服务发送确认信息。
  6. Pub/Sub 服务会从相关订阅的消息队列中移除已确认的消息。

发布者和订阅者端点

发布者可以是能向 pubsub.googleapis.com 发出 HTTPS 请求的任何应用:App Engine 应用、托管在 Google Compute Engine 或任何其他第三方网络中的 Web 服务、桌面设备或移动设备上安装的应用,甚至可以是浏览器。

HTTP 请求由服务、应用或物联网设备等发布者和微服务或数据应用等订阅者发出。

拉取订阅者也可以是能向 pubsub.googleapis.com 发出 HTTPS 请求的任何应用。

推送订阅者必须是可以通过 HTTPS 接受 POST 请求的 Webhook 端点。

常见使用场景

  • 平衡网络集群中的工作负载。例如,可以在多个工作器(例如 Google Compute Engine 实例)之间高效地分配大量任务。
  • 实现异步工作流。例如,订单处理应用可以对某主题下订单,由一个或多个工作器处理该订单。
  • 分发事件通知。例如,每当新用户注册时,接受用户注册的服务可以发送通知,并且下游服务可以订阅以接收该事件的通知。
  • 刷新分布式缓存。例如,应用可以发布无效化事件以更新发生更改的对象的 ID。
  • 将日志记录到多个系统。例如,Google Compute Engine 实例可以将日志写入到监控系统、数据库(方便以后查询)等等。
  • 来自各种进程或设备的数据流。例如,住宅传感器可以将数据流式传输到托管在云端的后端服务器。
  • 改进可靠性。例如,单地区 Compute Engine 服务可以通过订阅一个公用主题来在其他地区中运行,以便在地区或区域中发生故障时恢复服务。

Pub/Sub 集成

下图展示了 Pub/Sub 如何集成 Google Cloud 的众多组件。

Pub/Sub 可以将来自 Cloud Logging 和 Compute Engine 的输入与 Dataflow 和 App Engine 等端点集成。