MQ简述

176 阅读2分钟

1. MQ是什么?

MQ是Message Queue,消息队列。
队列是一种FIFO先进先出的数据结构,消息队列就是存放消息的队列。
消息由生产者发送到MQ进行排队,然后由消费者对消息进行处理。

想象一下,你正在公司改bug,领导告诉你这个问题今天必须搞定。
而这个时候,你的快递到了,快递小哥疯狂地给你打电话让你去取时,你会怎么做?
“帮我放在菜鸟驿站吧,谢谢!”

在上边的例子中,“快递” 就是消息,“菜鸟驿站” 就是MQ。

2. MQ有啥用?

1. 异步

有了菜鸟驿站之后,快递小哥不用等着你去取快递,你也随时可以去菜鸟驿站拿了,双方的效率都得到了提高。

我们知道异步能提高系统的响应速度和吞吐量,但是却不好实现,需要考虑很多东西。
而引入MQ就可以很方便的帮我们的系统实现异步处理,从而提高系统的性能。

2. 解耦

快递小哥把快递放到菜鸟驿站后,就可以去送下一个快递了,并不用依赖你什么时候才去取
而你也不用管到底是哪个快递小哥给你送来的,你只需要去菜鸟驿站拿就行了。

消息队列也是一样,MQ可以对服务之间进行解耦,减少服务之间的影响
从而提高系统的稳定性和可拓展性。

3. 削峰

你双11剁手买买买了一堆东西之后,过了几天快递小哥突然给你送来一大堆快递,让你一次性把他们都抗回家去,你也会像突然收到一大堆消息的服务一样崩溃吧,不如让他把所有的快递都先放到菜鸟驿站,你一个一个再去取。

MQ可以以稳定的系统资源应对突发的流量冲击,从而防止服务的崩溃。

3. MQ有啥缺点?

1. 系统复杂度提高,引入了MQ,肯定系统架构会变得比之前复杂
如何保证消息不丢失?
如何保证消息不会重复调用?
如何保证消息的顺序?
2. 系统可用性降低,因为一旦MQ宕机了,整个系统都会受到影响
3. 数据一致性问题
比如A系统发消息,需要B、C两个系统一同处理,如果B成功而C失败了,应该怎么办?

引入了MQ,这些问题都需要进行额外的考虑,所以不是所有的系统都适合使用MQ。