C/S模式,发布/订阅模式和PUSH/PULL模式(上)
CS模式(客户端/服务器模式)
最场景的信息传递模式,也称为Request/Response模式,或者调用模式。http/https协议即此模式。因为最常用所以大家一般都比较熟悉,这里不重点讲了,大家请看图下图:
发布/订阅模式(Publish/Subscribe)
发布订阅模式相对于BS模式稍微难点,我们不妨先看一个生活中的小例子:
如果没有邮局会怎么样?毫无疑问出版社既要发行杂志又要把杂志投递给用户,不仅累而且极其低效!因为大部分时间都将耽误在投递上,发行杂志的事情还有肯能被耽误!此例子可以理解为生活中的"发布订阅模式"
理解完生活中的事例,我们再来看发布订阅模式在软件开发中的重要作用!我们先看下图:
这是一个新闻入库程序的实现的流程,我们来看看此流程有什么问题:
逻辑会越来越复杂:不停将新功能追加后面必然导致程序越来越复杂。
非异步流程:程序是串行执行的,只有确认推送成功后才会走到写入elasticsearch流程。意味着可能有进程等待,程序执行过程将会较长,甚至会超时。
不稳定:只要中间任何一个流程挂掉了,整个程序就挂了,无法走到后面的流程。
再看采用发布订阅模式处理流程:
可以看到新闻入库过程被简化了,只有新闻写入数据库和发布到kafka两个过程。其他的处理程序采用订阅kafka中的新闻消息来实现了各自功能,我们再来看看这样处理有什么好处:
新闻入库简化且几乎不再变更。
处理流程是异步的:新闻发布到kafka后就可以给用户返回新闻入库成功,用户体验好!后面的事情其他程序会异步去完成。
一个程序被拆分成多个程序,每个程序都不算复杂。
即使有一个程序(例如推送程序)挂掉了,其他程序依然可以稳定运行。
总结发布/订阅模式:
我们可以看到发布订阅模式有3个角色,分别是一个生产者,一个消息管理器,多个消费者,生产者将消息发布到消息管理器,而多个消息消费者则会订阅消息管理器中消费者发布的内容。这便是发布订阅模式的基本组成。
发布订阅模式的意义:
降低系统耦合性。
提供系统稳定性。
系统更加灵活
降低每个程序的复杂度
...
本节就先分析到这来了!