大咖分享

看“消息队列”如何让你更快、更爽
北大青鸟总部

摘要:Message Queue运行机制是怎样的?业内常用的MQ包括Kafka、ActiveMQ、RabbitMQ、RocketMQ,四者基本原理差不多,只是根据类型不同而有些许区别,我们以RabbitMQ来进行讲解吧~

之前疫情带来的隔离使得我们只能待在家里,除了工作、上网课、自我充电之外,即使有云健身、云购物、做美食等等活动,我们似乎还是觉得少了点什么。一天24小时,活动的最大空间就是从客厅到厨房,这时候最大的释放莫过于买买买了。

说到买买买,最激动人心的就是双十一了,双十一活动虽然多可即使你提前开始打开手机电脑iPad等着,准点开抢,然而还是抢不到抢不到抢不到!这背后的原因真的是因为有的人手速快、有的人运气好,而并不是供应商搞这样的活动来吸引人然而实际没做活动。

我们以最让大家激情澎湃的双十一为例,从23:59分开始,每个人都打开手机,不断的刷新页面,不断的点击商品去结算,直到00:00这一时刻过去。除了商品买到或没买到之外,淘宝app或网页版却也还是可用的,只不过是这件商品买不到而已,但不影响其它的商品的购买,在2019年的双十一中淘宝每秒处理544000笔请求,如此大的用户请求量下还保障业务的正常运行,可以说阿里云是非常了不起的。在以前的交易系统中,我们购买一个商品,先进行商品的筛选,然后提交购买商品的款式、数量给到系统,这时候需要等待查询库存的结果,如果有商品的话则可以继续进行付款,如果没有的话就返回错误。如果是这样的机制运行在双十一这样的大流量里,那么所有的人都要疯了,一来一回的等,索性不买了!实际上我们也找到了一个特别好的解决方案— 消息队列Message Queue,用其来实现消息的异步传输。现在的交易系统是这样的,我们筛选好商品之后,直接向订单系统发起购买请求,订单系统一边给库存系统发送用户订单,另一边直接返回用户订单结果,用户无须等待即可快速的完成整个购物流程。

那么MQ(Message Queue)的运行机制是怎么样的呢?现在业内常用的MQ包括Kafka、ActiveMQ、RabbitMQ、RocketMQ,四者的基本原理都差不多,只不过是根据自己的类型不同而有些许区别,我们以RabbitMQ来进行讲解吧~

在RabbitMQ中有三个角色,生产者producer、Broker、消费者consumer,



Ø 生产者

即消息的创建者,将业务产生的数据进行一定的包装,放进broker中。


Ø 消费者

即接收消息的一方,通过连接broker,订阅队列里面的消息。


Ø broker

即管理消息的服务器,它包含exchange和queue。exchange即交换器,生产者将消息投给broker后,broker内的exchange决定把消息分发给哪个队列queue。

典型的MQ设计模式有两种,即点对点P2P(point to point)、发布订阅pub\sub(publish\subscribe).


Ø P2P模式

P2P的典型特点是发送的消息都会被成功处理。每个消息只有一个消费者,并且成功消费后告知生产者。它包含生产者、消息队列、消费者三个模块。



Ø Pub\Sub模式



发布\订阅模式的特点是一条消息可以被多个消费者消费、也可以不必消费,消费者根据自己的需要来订阅生产者消息。包含生产者、topic、消费者三个模块,topic也就是主题。对于生产者消费者大家很熟悉了,但topic有点晦涩,我们以阿里巴巴旗下有淘宝、天猫、支付宝等产品来讲解一下,在客户注册不同app后发送注册成功的短信中,淘宝的注册成功短信是一个topic,天猫的短信是另一个topic。

其实整个消息管理系统的运转就和平时寄快递差不多,假设我们要寄个物品回家,首先将我们的快递给到快递公司,快递公司内部根据目的地再分配走哪条路线,到达目的地后再由快递员送到家里。我们就是生产者,整个快递公司就是broker,不同的目的地就是不同的topic,收件人就是消费者。

MQ是随着云计算的出现而出现的,随着互联网的发展,应用变得越来越复杂,系统与系统之间互相依赖,这样就导致在开发过程中开发周期长、上线要互相等待、上线后用户使用某个服务时也要互相等待。这时候MQ就担任了系统与系统之间的桥梁,让它们不再互相强依赖,订单系统可以独自开发完成上线、库存系统也可以独自开发完成上线,用户使用时感觉顺畅,实现了系统与系统之间的解耦。

MQ除了异步处理、解耦外,另一个主要的应用场景就是削峰。以我们在京东抢商品为例,15:00准时开抢,这个时候可能一下子就来了10000个用户(平常也就是1000个用户,一下多了十倍),如果每个用户的下单请求都去请求库存系统的话,那么后台的数据库一下子就崩溃了,但有了MQ,我们可以把用户的请求全都放在消息队列里,等到后台一个个的处理,就等价于把流量高峰削减了,保障了网站的正常运行。

随着5G的到来、云计算的发展、人工智能的应用与普及,会有越来越多的人同时接入互联网,传统的“巨无霸”应用已不可取,将消息队列融合在应用中,实现应用的解耦、异步使用,才能保障用户的使用体验,也才能保障互联网继续大步的往前发展,用户更快、更爽~


相关阅读
热门推荐