C/S模式,发布/订阅模式和PUSH/PULL模式(上)

CS模式(客户端/服务器模式)

最场景的信息传递模式,也称为Request/Response模式,或者调用模式。http/https协议即此模式。因为最常用所以大家一般都比较熟悉,这里不重点讲了,大家请看图下图:

 

发布/订阅模式(Publish/Subscribe)

发布订阅模式相对于BS模式稍微难点,我们不妨先看一个生活中的小例子:

如果没有邮局会怎么样?毫无疑问出版社既要发行杂志又要把杂志投递给用户,不仅累而且极其低效!因为大部分时间都将耽误在投递上,发行杂志的事情还有肯能被耽误!此例子可以理解为生活中的"发布订阅模式"

 

理解完生活中的事例,我们再来看发布订阅模式在软件开发中的重要作用!我们先看下图:

这是一个新闻入库程序的实现的流程,我们来看看此流程有什么问题:

  1. 逻辑会越来越复杂:不停将新功能追加后面必然导致程序越来越复杂。

  2. 非异步流程:程序是串行执行的,只有确认推送成功后才会走到写入elasticsearch流程。意味着可能有进程等待,程序执行过程将会较长,甚至会超时。

  3. 不稳定:只要中间任何一个流程挂掉了,整个程序就挂了,无法走到后面的流程。

 

再看采用发布订阅模式处理流程:

可以看到新闻入库过程被简化了,只有新闻写入数据库和发布到kafka两个过程。其他的处理程序采用订阅kafka中的新闻消息来实现了各自功能,我们再来看看这样处理有什么好处:

  1. 新闻入库简化且几乎不再变更。

  2. 处理流程是异步的:新闻发布到kafka后就可以给用户返回新闻入库成功,用户体验好!后面的事情其他程序会异步去完成。

  3. 一个程序被拆分成多个程序,每个程序都不算复杂。

  4. 即使有一个程序(例如推送程序)挂掉了,其他程序依然可以稳定运行。

 

总结发布/订阅模式:

我们可以看到发布订阅模式有3个角色,分别是一个生产者,一个消息管理器,多个消费者,生产者将消息发布到消息管理器,而多个消息消费者则会订阅消息管理器中消费者发布的内容。这便是发布订阅模式的基本组成。

 

发布订阅模式的意义:

  1. 降低系统耦合性。

  2. 提供系统稳定性。

  3. 系统更加灵活

  4. 降低每个程序的复杂度

   ...

 

本节就先分析到这来了!

仁者见仁智者见智,欢迎大家评论指正!

 

分享或关注公众号的帅哥会越来越帅!美女会越来越美!

 

 

posted on 2018-09-21 22:43  940072923  阅读(2050)  评论(0编辑  收藏  举报