关于java:面试官竟然问我为啥要用MQ幸亏我看了参考答案

2次阅读

共计 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 加薪,今天肯定要来。

正文完
 0