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。