MQ消息队列

消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件

使用消息队列还可以实现异步处理

下图便是消息队列的基本模型,向消息队列中存放数据的叫做生产者,从消息队列中获取数据的叫做消费者

MQ消息队列的应用场景(本次只讨论异步跟削峰)

异步处理:提升了用户体验削峰填谷:提高了系统的稳定性

异步处理

消息队列的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。

要了解异步处理首先得了解同步处理

举一个用户注册的例子,用户注册成功后,系统需要发送注短信注册成功通知,以及赠送注册成功的积分

1 采用同步处理的方式

同步处理的总耗时:10ms+100ms+100ms=210ms

2 采用异步方式处理

在上诉操作中注册是核心的操作,由于短信通知与增加积分为非核心流程,为了提升系统响应性能,提高用户体验,从而我把它改造为异步。

看下图

用户注册10ms就返回注册成功

后续发送短信和增加积分的操作下发到MQ消息队列,由其他服务从MQ消息队列获取消息进行处理,处理成功后用户接收到短信,并且增加积分

流量削峰

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

这种场景中系统的峰值流量往往集中于一小段时间内,所以为了防止系统在短时间内的峰值流量冲垮,往往采用消息队列来削弱峰值流量,相当于消息队列做了一次缓冲。

看下图

不使用消息队列直接调用服务处理,碰到这种一瞬间过大的压力服务器可能会崩溃

但是使用了消息队列可以将请求给MQ消息队列处理,然后由MQ每秒拉出1000个请求给A系统处理

最终走势

可以看到左侧没有使用MQ消息队列,峰值很高,服务器随时都有可能会崩溃

右侧利用了消息队列,先收集所有请求,再固定每秒拉取的请求去处理,处理请求的同时防止服务器崩溃

使用了MQ之后,限制消费信息速度为1000,这样一来,高峰期产生的数据势必会被积压在MQ中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做“填谷”。

完整服务架构 我们将一些核心的功能和操作放到http主服务,非核心的操作可以使用消息队列进行处理

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: