MQ全称Message Queue,消息队列,是在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。
总结六个字:
解耦、异步、削峰
优势 | 说明 |
---|---|
应用解耦 | 提高系统的容错性和可维护性 |
异步提速 | 提升用户体验和系统吞吐量 |
削峰填谷 | 提高系统稳定性 |
应用解耦
系统的耦合性越高,容错性就越低(一粒老鼠屎坏一锅汤),可维护性就越低(修改或新增功能时,牵一发而动全身)
引入消息队列以后,即使库存系统挂了,用户消费的消息已经存在于MQ中,提升了容错性和可维护性
异步提速
如图,用户下单以后,订单系统需要调用库存,没问题的话接下来分别支付、物流系统,一个下单操作就耗时20+300+300+300=920ms
引入MQ后,只需将消息写入MQ和DB中,就可以给用户返回下单成功,后续慢慢的去消费MQ中的消息即可。此时每次下单耗时20+5=25ms
之前近一秒钟处理一个请求,现在25ms处理一个请求,(单位时间处理请求的数目增多了)系统的吞吐量增多了,提升了用户体验
削峰填谷
生活中常见的一秒抢购活动,不引入MQ,每秒5000请求会让系统直接宕机,引入MQ后,问题就成了MQ能不能每秒5000请求,而这个量级,对MQ来说,小case,A系统只需要慢慢的从MQ中去拿消息处理即可。
可以想到,削峰后,高峰期产生的数据会积压在MQ中,这样在高峰期过了的一段时间内,系统仍然会以一定的速度去处理消息,即填谷
A、B两个子系统之间,可以直接同步远程调用,也可以通过MQ实现异步间接调用