当前位置: 首页 > ai >正文

Pub/Sub是什么意思

Pub/Sub(发布/订阅模式)​​ 是一种异步消息通信范式,用于分布式系统中不同组件之间的解耦通信。它的核心思想是将消息的发送方(发布者)​​ 和接收方(订阅者)​​ 分离,通过一个中间层(消息代理)进行消息的路由和分发。


核心概念:

  1. 发布者(Publisher)​

    • 负责产生并发送消息到指定主题(Topic)​,不关心谁接收消息。

    • 例如:传感器发布温度数据、用户行为服务发送日志。

  2. 订阅者(Subscriber)​

    • 主动订阅感兴趣的主题,只接收该主题下的消息。

    • 例如:数据分析服务订阅日志主题,实时告警服务订阅异常数据主题。

  3. 消息代理(Broker)​

    • 中间件组件(如 ​Kafka、RabbitMQ、Google Pub/Sub、Redis Pub/Sub),负责:

      • 接收发布者的消息。

      • 将消息按主题分发给所有订阅者。

      • 管理订阅关系、消息持久化(可选)、负载均衡等。


工作流程:

  1. 订阅者向 Broker ​注册对某个主题的兴趣。

  2. 发布者向 Broker ​发送消息,并指定目标主题。

  3. Broker ​匹配消息的主题,将其复制并推送给所有订阅该主题的订阅者。

  4. 订阅者异步处理收到的消息。


核心特点:

  • 解耦性

    发布者和订阅者无需知道对方存在,添加/移除订阅者不影响发布者。

  • 动态伸缩

    订阅者数量可动态增减,Broker 自动处理负载分配。

  • 一对多广播

    一条消息可同时送达多个订阅者(对比点对点队列的单一消费者)。

  • 异步通信

    发布者发送后无需等待,订阅者按自身节奏消费。


常见应用场景:

  1. 实时通知系统

    :用户注册后,通知邮件服务、推荐系统、数据分析服务并行处理。

  2. 分布式系统解耦

    微服务间通过主题通信,避免直接调用依赖(如订单服务发布order_created,库存服务消费)。

  3. 数据同步

    数据库变更通过CDC(Change Data Capture)发布到主题,多个系统同步数据(如缓存更新、搜索索引)。

  4. 物联网(IoT)设备监控

    百万级设备上报数据至主题,由不同的订阅者处理实时告警、持久化存储、批量分析。

  5. 聊天室/直播互动

    用户消息发布到房间主题,所有订阅该房间的客户端实时接收。


对比其他消息模式:

Pub/Sub

点对点队列(P2P Queue)​

消息消费

一条消息发给所有订阅者

一条消息仅由一个消费者消费

订阅关系

动态订阅/取消订阅主题

队列固定,消费者需绑定队列

场景

广播通知、事件驱动

任务分发、负载均衡(如订单处理)


优缺点:

✅ ​优势

  • 系统扩展性强,新增消费者无需修改发布者。

  • 容错性高:单个订阅者故障不影响整体。

  • 支持高吞吐量场景(如Kafka)。

❌ ​挑战

  • 消息可能重复消费(需幂等设计)。

  • 顺序保证需额外配置(如Kafka分区)。

  • 架构复杂度增加(需部署Broker)。


主流实现工具:

  • 云服务​:Google Cloud Pub/Sub, AWS SNS/SQS, Azure Service Bus

  • 开源​:Apache Kafka, RabbitMQ(需插件), Redis Pub/Sub, NATS

总结:

Pub/Sub 通过主题广播+异步解耦的机制,成为构建高扩展性、松耦合分布式系统的基石。适用于需要事件驱动、实时广播、服务解耦的关键场景,是现代云原生架构的核心组件之一。

http://www.xdnf.cn/news/18249.html

相关文章:

  • 常见的学术文献数据库
  • 好家园房产中介网后台管理完整(python+flask+mysql)
  • 开源的实时 Web 日志分析器GoAccess安装使用指南
  • 【数据结构】快速排序算法精髓解析
  • Vue 3 高性能实践 全面提速剖析!
  • Android 资源替换:静态替换 vs 动态替换
  • [GraphRAG]完全自动化处理任何文档为向量知识图谱:AbutionGraph如何让知识自动“活”起来?
  • sourcetree 拉取代码
  • C++篇(2)C++入门(下)
  • 十二,数据结构-链表
  • Docker Compose命令一览(Docker Compose指令、docker-compose命令)
  • 【基础-判断】@CustomDialog装饰器用于装饰自定义弹窗组件,使得弹窗可以动态设置内容及样式
  • ubuntu下安装vivado2015.2时报错解决方法
  • 1-2前端撸码前的准备,包管理工具和环境搭建
  • SPI 机制深度剖析:Java、Spring、Dubbo 的服务发现哲学与实战指南
  • 基于Java虚拟线程的高并发作业执行框架设计与性能优化实践指南
  • ReAct Agent:让AI像人类一样思考与行动的革命性框架
  • 使用 FastAPI 的 WebSockets 和 Elasticsearch 来构建实时应用
  • Python HTML/XML实体处理完全指南:从基础到安全工程实践
  • mac电脑软件左上角的关闭/最小化/最大化按钮菜单的宽度和高度是多少像素
  • 阿里云ECS服务器的公网IP地址
  • 服务器硬件电路设计之 SPI 问答(一):解密 SPI—— 从定义到核心特性
  • 【机器学习深度学习】AI大模型高并发挑战:用户负载部署策略
  • 雷卯针对香橙派Orange Pi 3B开发板防雷防静电方案
  • 运用平均值填充后的数据进行模型预测
  • 计算机毕设Spark项目实战:基于大数据技术的就业数据分析系统Django+Vue开发指南
  • 函数式编程“闭包”概念深入解析
  • 【LeetCode 热题 100】279. 完全平方数——(解法三)空间优化
  • 应用在运行时,向用户索取(相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求--教你如何解决华为市场上架难题
  • 手机截图如何优雅地放在word里