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