共计 1453 个字符,预计需要花费 4 分钟才能阅读完成。
互联网公司的我的项目没有不必到 MQ(音讯队列)的,在简历中写上我的项目中用到 MQ,也算是亮点之一。既然你写了,面试官就会问,你对 MQ 到底理解多少?
一个挺着啤酒肚,身穿格子衫,发际线重大后移的中年男子,手拿着保温杯,胳膊夹着 MacBook 向你走来。
面试官:小伙子,我看你简历上写了,在我的项目中用到了 MQ,你们我的项目为什么要引入 MQ?
心田闪过一万匹马,引入 MQ 是我能决定的吗?
CTO 让咱们用,咱们就用了呗!
尽管事实是这样,然而如果这样间接答复,必定让你回去等告诉了。
其实这道题就是让你答复 MQ 的作用是什么?
MQ 的作用就三个:解耦、异步、削峰。如果你间接答复这三个作用,会给面试官一种死记硬背的嫌疑,所以要结合实际我的项目具体分析。
1. 解耦
面试官你好,咱们公司是做电商零碎的。外围是交易服务,交易服务要调用另外三个服务,订单服务、库存服务、仓储服务。
这三个服务如果有一个服务不可用,交易服务就无奈失常运行,所以交易服务是强耦合另外三个服务。
引入 MQ 之后,交易服务只跟 MQ 交互,把音讯发到 MQ 外面就行了,无需关怀另外三个服务是否可用。这时候交易服务跟另外三个服务就是弱耦合的关系,耦合性被升高了。
哪怕是另外三个服务临时不可用,也不影响交易服务的运行,只有其余服务运行起来后,把 MQ 外面的音讯生产了就行。
2. 异步
没有引入 MQ 的时候,交易服务须要同步调用三个服务,如果调用一个服务须要耗时 1 秒,那么同步调用三个服务须要耗时 3 秒。在引入 MQ 之后,全都改成了异步调用,整个耗时不到 1 秒,大大提高了接口的性能。
3. 削峰
如果一秒内同时来了 5000 笔交易,而订单服务每秒只能解决 100 笔交易,那么前面的 4900 笔交易失败。在引入 MQ 之后,交易服务能够把交易数据先发送到 MQ 中,而订单服务再缓缓从 MQ 拉取交易信息处理。从而防止突发流量压垮服务器。
面试官: 小伙子,有点货色。看来筹备的很充沛啊,那你晓得引入 MQ 有什么害处吗?MQ 不可能全是长处吧?
当然。我感觉引入 MQ 之后,会有以下三个害处。
1. 零碎可用性升高
原本整个零碎有四个服务,咱们只须要保障这四个服务可用就行了。当初又多引入了一个 MQ,咱们还要保障 MQ 的可用,所以整个零碎的可用性升高。
2. 零碎复杂性进步
原本交易服务是同步调用另外三个服务,如果另外三个服务不可用,交易服务能立刻感知到。引入 MQ 之后,整个零碎的稳定性就要靠 MQ 保障了。
这时候,咱们就要思考到发到 MQ 外面的 音讯怎么防止失落的问题 ?
程序性生产的问题 ,就是同一笔交易的下单音讯应该比撤单音讯先解决。
重复性生产的问题,就是同一笔下单交易的音讯可能被屡次解决。
当然,每种问题都有具体的解决方案,
防止音讯失落能够应用 MQ 集群,
程序性生产能够把音讯发到同一个分区,
重复性生产能够在生产端做幂等性解决。这里不做具体论述,
当前再讲一下每种 MQ 不同的具体实现形式。
3. 数据一致性问题
当服务间是同步调用的时候,咱们还能够应用本地事务来控制数据的一致性。然而引入 MQ 之后,服务间的调用都是异步了,就没方法应用本地事务,也就无奈做到数据的强一致性了。
例如,调用订单服务下单胜利了,然而调用库存服务扣减库存失败,就会导致超卖,是重大的线上事变。
这时候怎么办?能够应用 MQ 事务音讯,相当于是同步调用,会重大升高性能。还能够应用分布式事务,能够实现数据的最终一致性,无奈做到强一致性。
面试官心田竖起大拇指,小伙子能够啊,今天就来下班吧!
我在上家公司的工作还没交接实现,要不再等两周吧?
是不是嫌工资开得低了,我这就让 HR 加薪,今天肯定要来。