RabbitMQ——什么情况下应用RabbitMQ?
一. RabbitMQ 简介#
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的_ ? G是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通$ A y I 2 o V常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程{ 7 o p序同时执行的要求。
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基~ q j | 4 A ,于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(g j Q # o包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更- N ? l j } K U *多用在企业系( U a r @ ( } !统内,对数据一致性、稳定性和可靠性要求m Q K l很高的场景,对性能和吞吐量的要求还在其次。
二. RabbitMQ 使用场景#
### 1. 解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)
场景说明:用户下单后,订单系统需要N k w w j $ V k通知库存系统。传统L * N M的做法是,订单系统调w D 5 W J ? I (用库存系统的接口。
传统模式的缺点:
- 假如库存系统无法访问,则订单减库存将失败,f u - # s B #从而导致订单失败
- 订单系统与库存系统耦合
引入消息队列
- 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订f $ 8 D .存肯定有,可以将队列大小设置成库存数量,或者采用其他方式解决。
基于消息的模型,) S x P关心的是“通知”,而非“处理”。
短信、邮件通知、缓存刷新等操作使用消r 0 K ! T息队列进行通知。
消息s l L n队列和RPC的区别与m l ` B T , % x P比较:
RPC: 异步调用,及时获得调用结果,具有强一致性结果,关心业务调用处理结果。
消息队列:两次异步RPC调用,将L G 0 V : ] O调用内容在队列中进行转储,并选择合适的时机进行投递(错峰流控)
2. 异步提升效率#
场景说明:用户注册后,3 % ] P需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式
(1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端
(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短a G b W M K + P信。以上三个任务完成后,返回给客户端。与~ C 4 j 4 = H B串行的差别是,并行的方式可以提高处理的时间
(39 ; a e O # z $)引入消息队列,将不是必须的业1 P M T务逻辑,异步处理。改造后的架构如下:
3. 流量削峰#
流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛
应! # y v用场景:系统其他时间A系统每秒U J . Z请求量就100个,系统可以稳定运行。系统每天晚间八点有秒杀活动,每秒并发请求量增至1万条,但是系统最大的处理能力只能每秒处理1000个请求,于是系统崩溃,服务器宕机。
之前架构:大量用户(1c h / 7 X # M T j00万用户)通过浏览器在晚上八点高峰期同时参与秒杀活动。大g 7 w G h [ Z ;量的请求涌入$ f r我们的系统中,高峰期达到每秒钟5000个请求,大量的请求打到MySQL上,每秒钟预计执行3000条SQL。但是一般的MySQL每秒钟扛住2000个请求就不错了,如果达到3000个请求的话可能MySQL直接就瘫痪了,从而系统无法被使用。但是高峰期过了x g H 9 X f I 2 ~之后,就成了低_ A N & V W峰期,可能也就1万用户访问系统,每秒的请求数量也就50个左右,整个系统几乎没有任何压力。
引入MQ:100万用户在高峰期的时候,每秒请求有5000个请求左右,将这5000请求写入MQ里面,系统A每秒最多只能处理2000请求,因为MySQL每秒只能k W J $ i n ~ q处理2000个请求。系统A从MQ中慢慢拉取请求,每秒就拉取2000个请求,不n 2 & p =要超过自己每秒能处理的请求数量即可。MQ,U e c o p r ,每秒5000个请求进来,结果只有2000个请求出去,所以在秒杀期间(将近一小时)可能会有几十万或者几百万的请求积压在MQs S z $ d o p,/ T Y ^ s但是BCD系统之中若有系统写库失败,则会产生数据不一致的J o v o 5 W X问题。
总结#
所以总结来说,消息队列是一种十分复杂的架构,引入它有很多好处,但是也得针对它带来的坏处做各种额外的技. H d 9 ( J 9术方案和架构来规避。引入MQ系统复杂度提升了一个数量级,但是R b i 6 & y在有些场景下,就是k # v n r p s *复杂十倍百倍,还是需要使用MQ。
作者: 海向
出处:https:/; v /www.cnblogs.cX k b & t E e -om/haixiang/p/10199754.html
本站使用「CC BY 4.0」创v m c # = 2作共= k :享协议,转载请在文章明显位置注明作者及出处。