写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

发布/订阅模式(pub/sub模式)指的是消息的发送方可以将消息异步地发送给一个系统中不同组件,而无需知道接收方是谁。
在发布/订阅模式中,发送方被称为发布者(Publisher),接收方则被称作订阅者(Subscriber)。
发布者将消息发送到消息队列中,订阅者可以从消息队列里取出自己感兴趣的消息。
在发布/订阅模式里,可以有任意多个发布者发送消息,也可以有任意多个订阅者接收消息。

补充

发布/订阅模式的优缺点

优点

  1. 松耦合(Loose Coupling):消息的发布者和消息的订阅者在开发的时候完全不需要事先知道对方的存在,可以独立地进行开发。
  2. 高伸缩性(High Scalability):发布/订阅模式中的消息队列可以独立的作为一个数据存储中心存在。
    在分布式环境中,更是消息队列更是可以扩展至上干个服务器中。
  3. 系统组件间通信更加简洁:因为不需要为每一个消息的订阅者准备专门的消息格式,只要知道了消息队列中保存消息的格式,发布者就可以按照这个格式发送消息,订阅者也只需要按照这个格式接收消息。

缺点

在整个数据模式中,我们不能保证发布者发送的数据一定会送达订阅者。

如果要保证数据一定送达的话,需要开发者自己实现响应机制。

发布/订阅模式的适用场景

  1. 系统的发送方需要向大量的接收方广播消息。
  2. 系統中某一个组件需要与多个独立开发的组件或服务进行通信,而这些独立开发的组件或服务可以使用不同的编程语言和通信协议。
  3. 系统的发送方在向接收方发送消息之后无需接收方进行实时响应。
  4. 系统中对数据一致性的要求只需要支持数据的最终一致性(Eventual Consistency)模型。

注意

如果系统的发送方在向接收方发送消息之后,需要接收方进行实时响应的话,那么绝大多数情况下,都不要考虑使用发布/订阅的数据处理模式。

实践

你认为微信的朋友圏功能适合使用发布/订阅模式吗?为什么?

朋友圈适合使用发布/订阅模式
原因:
1. 消息发送方需要向多个接收方(n个可以看自己朋友圈的好友)广播消息。
2. 多消费者组(微信朋友圈数据不仅仅只是用于社交,还可以用来进行数据分析推送广告等,所以可能会有多个模块需要用到这份数据)。
3. 发送方发送消息之后是不需要接收方立即进行响应的(异步),所以用消息队列可以有效起到解耦的作用。
4. 微信朋友圈对于数据而言,满足最终一致性的。

Q.E.D.


Apache Spark Contributor