消息中间件:RabbitMq

简介

     RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点、发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

    MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通讯方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

特征

一、业务解耦

    当发送短信执行成功后页面才执行倒计时60秒,假如在发送短信时,由于网速的原因,导致短信一直被阻塞,那么倒计时也会一直延迟,这样会影响用户体验感。这种情况下就可以使用RabbitMQ了,将发送短信和倒计时解耦,基于消息的模型,关心的是“通知”,而非“处理”。

除此之外,例如下订单、邮件通知、缓存刷新等操作都可以使用消息队列进行优化。

二、异步提效

场景说明:用户发送短信验证码,首先点击发送短信,然后第三方平台发送短信至用户手机成功,最后执行倒计时60秒。
传统的做法有两种:1.串行方式,2.并行方式;

(1)串行方式:将用户点击发送短信、三方平台发送短信到用户手机成功、执行60s倒计时,以上三个任务全部完成后,返回给客户端(响应150ms)。
串行

(2)并行方式:在用户点击发送短信成功后,三方平台发送短信的同时,执行倒计时60s。与串行的差别是,并行的方式可以提高处理的时间(响应100ms)。
并行

引入消息队列后,将不是必须的业务逻辑,异步处理(55ms)。改造后的架构如下:
异步

三、流量削峰

流量削峰也是消息队列的常用场景,一般在秒杀或者抢单活动中使用广泛。

应用场景:系统A平时的每秒请求量也就100个左右,系统是可以稳定运行的。但是到了晚上八点秒杀活动时,每秒并发请求量增至5000个,但是系统最大的处理能力只能每秒处理2000个请求(因为MySQL每秒只能处理2000个请求,MySQL的缺点:在海量数据处理和热数据处理时,效率会显著变慢),最终会导致系统崩溃,服务器宕机。

引入RabbitMQ,系统A从RabbitMQ中慢慢拉取请求,每秒就拉取2000个请求,不要超过自己每秒能处理的请求数量即可。RabbitMQ每秒5000个请求进来,结果只有2000个请求出去,所以在一个小时的秒杀期间,可能会有几十万或者几百万的请求积压在RabbitMQ中。这个短暂的高峰期积压是没有问题的,因为高峰期过了之后,每秒就只有100个请求进入RabbitMQ中了,但是系统还是按照每秒2000个请求的速度在处理,所以说,只要高峰期一过,系统就会快速将积压的消息消费掉。

我们计算一下,每秒积压3000条,一分钟就会积压18万条,一小时积压1000万条消息,高峰期过后,一个多小时就可以将积压的1000万消息消费掉。
秒杀

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值