从架构师到 CTO, 你还有多远的路要走?( 二 )


文章插图
 
02消息队列
消息队列异步架构的另一个主要组成部分就是所谓的消息队列 。
消息队列是消息发送的目的地和发给消费者的一个缓冲 。消息队列实现的方法有好多种,可以用共享文件夹,也可以用关系数据库或者NoSQL系统 。
当然最主要的还是使用专门的分布式消息队列服务器来实现 。

从架构师到 CTO, 你还有多远的路要走?

文章插图
 
03消息的消费者
业务架构的第三个重要角色就是消息的消费者 。消息的消费者从消息队列中接受并处理消息,消息的消费者也是由应用开发者实现的,但是它是一个异步处理的组件 。
消息的消费者不需要知道生产者存在,它只依赖消息队列中的消息 。消息的消费者通常部署在独立的服务器上,和消息的生产者完全隔离,并且可以通过添加硬件的方式进行伸缩 。
从架构师到 CTO, 你还有多远的路要走?

文章插图
 
知道以上3种主要角色之后,使用消息队列构建异步的调用架构,你还需要知道两种模型:点对点模型和发布订阅模型 。
本文选自:拉勾教育专栏《架构师的36项修炼》见文末了解更多
从架构师到 CTO, 你还有多远的路要走?

文章插图
 
点对点模型
首先来看点对点模型 。消费者和生产者只需要知道消息队列的名字,生产者发送消息到消息队列中,而消息队列的另一端是多个消费者竞争消费消息 。
每个到达消息队列的消息只会被路由到一个消费者中去,所以消费者看到的是全部消息的一个子集 。
我们看这张图,消息的生产者有多个,消息的消费者也有多个,多个生产者将消息发送到消息队列中,而有多个消费者去消息队列中对消息进行竞争性的消费 。
每条消息只会被一个消费者消费,每个消费者只会消费消息队列中的一部分消息 。
从架构师到 CTO, 你还有多远的路要走?

文章插图
 
发布订阅模型
在发布订阅模型中,消息可能被发送到不止一个消费者,生产者发送消息到一个主题,而不是队列中 。
消息被发布到主题后,就会被克隆给每一个订阅它的消费者,每个消费者接收一份消息复制到自己的私有队列 。
消费者可以独立于其他消费者使用自己订阅的消息,消费者之间不会竞争消息 。
常用的分布式消息队列都支持发布订阅模型,也就是说消息的发布订阅模型是分布式消息队列的一个功能特性 。
从架构师到 CTO, 你还有多远的路要走?

文章插图
 
两种模型结合对比来看,通常使用点对点模型的,是一些耗时较长的、逻辑相对独立的业务,比如说我前面的讲到的发送邮件这样一个操作 。
因为发送邮件比较耗时,而且应用程序其实也并不太关心邮件发送是否成功,发送邮件的逻辑也相对比较独立,所以它只需要把邮件消息丢到消息队列中就可以返回了 。
而消费者也不需要关心是哪个生产者去发送的邮件,它只需要把邮件消息内容取出来以后进行消费,通过远程服务器将邮件发送出去就可以了 。而且每个邮件只需要被发送一次 。所以消息只被一个消费者消费就可以了 。
相对应的另一种情况,比如新用户注册,一个新用户注册成功以后,需要给用户发送一封激活邮件,发送一条欢迎短信,还需要将用户注册数据写入数据库,甚至需要将新用户信息发送给关联企业的系统,比如淘宝新用户信息发送给支付宝 。
这样允许用户可以一次注册就能登录使用多个关联产品 。那么对于新用户注册这样一个消息,就需要使用按主题发布的方式,也就是发布订阅模型这种方式 。
一个新用户注册,会把注册消息发送给一个主题,多种消费者可以订阅这个主题 。比如发送邮件的消费者、发送短信的消费者、将注册信息写入数据库的消费者,跨系统同步消息的消费者等 。
今天就讲到这里啦~感谢你的坚持,下一课我会详细讲解分布式数据库相关内容,分享我的实践经验 。加油,我们不见不散!
本文选自:拉勾教育专栏《架构师的36项修炼》见文末了解更多
版权声明:本文版权归属拉勾教育及该专栏作者,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者必究 。




推荐阅读