MQ消息队列
大家平时也有用到一些消息中间件(MQ),但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。 对MQ更加深入的问题,可能很多人没怎么思考过。 比如,你跳槽面试时,如果面试官看到你简历上写了,熟练掌握消息中间件,那么很可能给你发起如下 4 个面试连环炮! 为什么要使用MQ? 使用了MQ之后有什么优缺点? 怎么保证MQ消息不丢失? 怎么保证MQ的高可用性? 本文将通过一些场景,配合着通俗易懂的语言和多张手绘彩图,讨论一下这些问题。 为什么要使用MQ? 相信大家也听过这样的一句话:好的架构不是设计出来的,是演进出来的。 这句话在引入MQ的场景同样适用,使用MQ必定有其道理,是用来解决实际问题的。而不是看见别人用了,我也用着玩儿一下。 其实使用MQ的场景有挺多的,但是比较核心的有3个: 异步、解耦、削峰填谷 异步 我们通过实际案例说明:假设A系统接收一个请求,需要在自己本地写库执行SQL,然后需要调用BCD三个系统的接口。 假设自己本地写库要3ms,调用BCD三个系统分别要300ms、450ms、200ms。 那么最终请求总延时是3 + 300 + 450 + 200 = 953ms,接近1s,可能用户会感觉太慢了。 此时整个系统大概是这样的: 但是一旦使用了MQ之后,系统A只需要发送3条消息到MQ中的3个消息队列,然后就返回给用户了。 假设发送消息到MQ中耗时20ms