什么是 Pub/Sub?

Pub/Sub 允许服务异步通信,延迟时间大约为 100 毫秒。

Pub/Sub 用于流式分析和数据集成流水线,以提取和分发数据。它同样适合用作服务集成的面向消息传递的中间件,或者并行执行任务的队列。

通过 Pub/Sub,您可以创建事件提供方和使用方的系统,称为发布者订阅者。发布者通过广播事件而不是同步远程过程调用 (RPC) 与订阅者异步通信。

发布者将事件发送到 Pub/Sub 服务,而不考虑这些事件的处理方式或时间。然后,Pub/Sub 会将事件传递给需要对其进行回应的所有服务。在通过 RPC 进行通信的系统中,发布者必须等待订阅者接收数据,而与之相对地,这种异步集成可以增强系统整体的灵活性和稳健性。

如需开始使用 Pub/Sub,请查看快速入门:使用 Cloud Console。如需更全面的介绍,请参阅构建 Pub/Sub 消息传递系统

常见使用场景

  • 提取用户互动和服务器事件:要利用最终用户应用中的互动事件或您的系统中的服务器事件,您可以将这些事件转发到 Pub/Sub,然后使用 Dataflow 等流处理工具,它们可将其传送到 BigQuery、Bigtable、Cloud Storage 和其他数据库。通过 Pub/Sub 可同时从许多客户端收集事件。
  • 实时事件分发:原始或已处理的事件可提供给您团队和组织中的多个应用进行实时处理。它支持“企业事件总线”和事件驱动型应用设计模式。Pub/Sub 可让您与许多将事件导出到 Pub/Sub 的 Google 系统集成。
  • 在数据库之间复制数据。Pub/Sub 通常用于从数据库分发更改事件。这些事件可用于在 BigQuery 和其他数据存储系统中构建数据库状态和状态历史记录的视图。
  • 并行处理和工作流。您可以通过使用 Pub/Sub 消息连接 Cloud Functions 函数,高效地在多个工作器之间分配大量任务,例如压缩文本文件、发送电子邮件通知、评估 AI 模型或重新设置图片格式。
  • 企业事件总线。您可以创建企业范围的实时数据共享总线,并在整个组织中分发业务事件、数据库更新和分析事件。
  • 从 IoT 设备流式传输数据。例如,住宅传感器可以将数据流式传输到托管在云端的后端服务器。
  • 刷新分布式缓存。例如,应用可以发布无效化事件以更新发生更改的对象的 ID。
  • 进行负载平衡来实现可靠性。 例如,服务的实例可以部署在多个区域的 Compute Engine 上,但订阅一个常见主题。如果服务在任何区域发生故障,其他区域可以自动获取负载。

Pub/Sub 或 Pub/Sub 精简版

Pub/Sub 包含两项服务:

  • Pub/Sub 服务:这应该是大多数用户和应用的默认选择。它提供最高可靠性和最大一组集成,还提供自动容量管理。

  • Pub/Sub 精简版服务:单独且类似的消息传递服务,费用低廉。它提供区域级存储,但需要您预配并管理存储和吞吐量容量。

请考虑将 Pub/Sub 精简版仅用于极低费用就能满足一些额外的运营工作和较低可用性要求的应用。

如需更多详细信息,请参阅选择 Pub/Sub 或 Pub/Sub 精简版。如需试用 Pub/Sub 精简版,请参阅 Pub/Sub 精简版使用入门

将 Pub/Sub 与其他消息传递技术进行比较

Pub/Sub 将 Apache KafkaPulsar 的横向可扩缩性与传统消息传递中间件(例如 Apache ActiveMQ 和 RabbitMQ)的功能(例如死信队列和过滤)相结合。

Pub/Sub 从消息传递中间件采用的另一项功能是按每消息并行处理(而不是基于分区)。Pub/Sub 将个别消息“租用”给订阅者客户端,然后跟踪是否已成功处理给定消息。

相比之下,其他可横向扩容的消息传递系统使用分区进行横向扩缩。这会强制订阅者按顺序处理每个分区中的消息,并将并发客户端的数量限制为分区数量。按每消息处理可最大限度地提高订阅者应用的并行性,并有助于确保发布者/订阅者的独立性。

服务到服务与服务到客户端的通信

Pub/Sub 适用于服务到服务的通信,而不是与最终用户或 IoT 客户端的通信。其他产品更好地支持其他模式:

您可以使用这些服务的组合来构建客户端 -> 服务 -> 数据库模式。例如,请参阅通过 WebSocket 流式传输 Pub/Sub 消息教程。

集成

Pub/Sub 与其他 Google Cloud 产品有许多集成,可创建一个功能齐全的消息传递系统:

  • 流处理和数据集成:由 Dataflow 支持,包括允许处理数据以及将数据集成到 BigQuery 和 Cloud Storage 数据湖的 Dataflow 模板SQL。Cloud Console 的 Pub/Sub 和 Dataflow 界面中提供了用于将数据从 Pub/Sub 移动到 Cloud Storage、BigQuery 和其他产品的 Dataflow 模板。此外,您还可以集成 Apache Spark,尤其是在使用 Dataproc 进行管理时。在 Spark + Dataproc 上运行的集成和处理流水线的视觉化组合可通过 Datafusion 完成。
  • Monitoring、Alerting 和 Logging:由 Monitoring 和 Logging 产品提供支持。
  • 身份验证和 IAM:Pub/Sub 依赖其他 Google Cloud 产品使用的标准 OAuth 身份验证,并支持精细 IAM,从而实现对个别资源进行访问权限控制。
  • API:Pub/Sub 使用标准 gRPC 和 REST 服务 API 技术以及多种语言的客户端库
  • 触发器、通知和网络钩子:Pub/Sub 以对网络钩子的 HTTP POST 请求的形式提供基于推送的消息传送。这样,您就可以使用 Cloud Functions 或其他无服务器产品轻松实现工作流自动化。
  • 编排:Pub/Sub 能够以声明方式集成到多步无服务器工作流 Workflows 中。大数据和分析编排通常使用支持 Pub/Sub 触发器的 Cloud Composer 完成。

核心概念

  • 主题:发布者向其发送消息的已命名资源。
  • 订阅:代表从单个特定主题传送到订阅应用的消息流的已命名资源。 如需详细了解订阅和消息传送语义,请参阅订阅者指南
  • 消息:发布者向主题发送并最终传送给订阅者的数据和(可选)特性的组合。
  • 消息特性:发布者可以为消息定义的键值对。例如,可以将键 iana.org/language_tag 和值 en 添加到消息中,将消息标记为可供英语订阅者阅读。
  • 发布者:创建消息并向主题发送消息的应用。
  • 订阅者:订阅主题以从其接收消息的应用。
  • 确认:订阅者成功接收消息后发送给 Pub/Sub 的信号。已确认的消息会从订阅的消息队列中移除。
  • 推送和拉取:两种消息传送方法。每位订阅者通过以下方式接收消息:Pub/Sub 将消息推送到订阅者的所选端点,或者订阅者从服务中拉取消息。

发布者-订阅者关系可以是一对多(扇出)、多对一(扇入)和多对多,如下图所示:

发布者-订阅者关系

下图展示了如何将消息从发布者传递给订阅者。请注意,对于推送传送,在对推送请求的响应中进行隐式确认;对于拉取传送,需要单独的 RPC。

消息生命周期

后续步骤