RocketMQ—消息队列入门

消息队列功能介绍

字面上说的消息队列是数据结构中“先进先出”的一种数据结构,但是如果要求消除单点故障保证消息传输可靠性应对大流量的冲击,对消息队列的要求就很高了。现在互联网的“微架构”模式兴起,原有的大型集中式的IT服务因为各种弊端,通常被拆分成细粒度的多个“微服务”,这些微服务可以在一个局域网内,也可以跨机房部署。一方面对服务之间松耦合的要求越来越高,另一方面,服务之间的联系越来越紧密,分布式消息队列可以提供三大重要功能 应用解耦流量削峰消息分发,已经成为大型互联网服务架构里的标配的中间件

1. 应用解耦

1.1 消息队列的解耦功能

复杂的应用里会存在多个子系统,比如电商应用中有订单系统,库存系统,物流系统,支付系统。这个时候如果各个子系统之间的耦合度太高,整体系统的可用性就会大幅度降低。多个低错误率的子系统耦合在一起,得到一个高错误率的整体系统。以电商应用为例,用户创建订单后,如果耦合调用库存系统,物流系统,支付系统,任何一个子系统出了故障或者因为升级等原因暂时不使用,都会造成下单操作异常,影响用户使用体验

如图1.1所示,当转变成基于消息队列的方式后,系统的可用性就高多了,比如物流系统因为发生故障,就需要几分钟的时间来修复,在这几分钟里,物流系统要处理的内容被缓存在消息队列里,用户的下单操作可以正常完成。当物流系统恢复后,补充处理存储在消息队列里的订单信息即可,终端用户感知不到物流系统发生过几分钟的故障

1.2 流量消峰

每年的双十一,淘宝的很多活动都在0点的时候后开启,大部分应用系统流量会在瞬间猛增,这个时候如果没有缓冲机制,不可能承受住短时大流量的冲击。通过消息队列,把大量的请求暂存起来,分散到相对长的一段时间内处理,能大大提高系统的稳定性和用户体验。
举个例子,如果订单系统每秒最多处理一万次下单,这个处理能力应对正常时段是绰绰有余的,但是遇到双十一0点时,如果没有消息队列这种缓冲机制,为保证系统的稳定,只能在订单超过一万次后就不允许用户下单了;如果有消息队列做缓冲,我们可以取消这个机制,把一秒内下的订单分散成一段时间来处理,这时候有些用户可能在下单后几十秒才能收到下单成功的状态,但是这也比不能下单的体验要好
使用消息队列进行流量削峰,很多时候不是因为能力不够,而是出于经济性的考察;比如有的业务系统,流量高峰也不会超过一万QPS,而平时只有一千左右的QPS。这种情况下我们就可以用普通性能的服务器,然后加个消息队列作为高峰期的缓冲,无需花大笔资金部署能处理上万QPS的服务器

1.3 消息分发

1.3 消息队列的消息分发功能

在大数据时代,数据对很多公司来说就像是金矿,公司需要依赖对数据的分析,进行用户画像,精准推送,流程优化等各种操作,并且对处理的实时性要求越来越高。数据是不断产生的,各个分析团队,算法团队都要依赖于这些数据来进行工作,这个时候有个可持久化的消息队列就非常重要。数据的产生方式只需要把各自的数据写入一个消息队列即可,数据使用方各自根据需求订阅自己感兴趣的数据,不同数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联

除了上面列出的应用解耦,流量削峰,消息分发等功能,消息队列还有保证最终一致性,方便动态扩容等功能

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdypg.html