我们为何需要消息队列
消息队列主要面对的解决在于
异步处理
流量控制
服务解耦
我们分别说下这些问题
1.异步处理
如何设计一个秒杀系统
对于秒杀中的处理,很多的时候都离不开消息队列
秒杀的步骤分为了,风险控制,库存锁定,生成订单,短信通知,更新统计数据
一般来说就是这5个步骤
对于这5个步骤,核心的是风险控制和库存锁定
用户的请求通过了风险控制,并且在服务器端完成了库存锁定,就可以给用户返回秒杀的结果了
对于后续的订单生成等操作,并非要在秒杀请求中完成处理
所以我们可以将其放在消息队列中,完成后续的异步处理操作,这样可以更快的返回结果
这就是一种减少步骤,增加服务器资源给需要的服务的操作
在这个场景中,消息队列被用于实现服务的异步处理
可以更快的返回结果,提高了整体的性能
2.流量控制
对于个集群服务,在网关处我们可以利用部分隔离机制,来保护后端服务,避免不可用
我们可以利用消息队列,在网关处进行限流
比如,网关处加入消息队列,收到消息后放入消息队列中
后端服务从消息队列中获取APP请求,完成后续秒杀处理,返回结果
秒杀开始后,网关先将请求堆积到消息队列中,让后端服务按照自己的性能处理
对于超时的服务,可以直接丢弃,让APP认为是秒杀失败即可
这样可以进行削峰的一个操作
不过也带来了额外的响应时间,以及上下游都需要将同步改为异步的消息,增加复杂度
或者网关利用令牌桶来进行限流
或者是服务解耦
利用消息队列,从而将上流的订单系统和下流的客服,分析系统进行解耦
上流系统将生成后的订单放入消息队列,然后由下流系统基于订单进行其他操作
这就是消息队列的消息解耦
除此外,还有
通过作为发布/订阅系统来实现一个微服务的观察者模式
连接流计算任务和数据
消息广播
但是消息队列也有自身的一些问题和局限性
延迟,复杂度等问题
有什么问题可以通过引入消息队列来解决,对于系统中已经使用消息队列,对应到的是哪个场景呢?