蓝盟IT小贴士,来喽!
第一,你不知道为什么在你的系统中使用消息队列吗?
很多候选人都说自己的项目使用了Redis,MQ,其实他不知道自己为什么使用这个。 其实,说白的是用来使用,或者是别人设计的框架,他从头到尾都没有想过。
对自己的框架没有问题的人,一定是平时没有想过的人。 面试官对这种候选人印象不好。 因为面试官担心你进入队伍后只有木头的工作,不能自己思考。
其次,既然使用了信息队列,就不知道有什么好处吗?
如果没有考虑这个的话,就把MQ盲目地放进系统,之后有问题的话自己给公司打了个洞吗? 如果不考虑技术上可能存在的弊端和风险,面试官邀请这样的候选人基本上也许是基坑型选手。 害怕你工作一年就挖坑,自己换工作,给公司留下无限的后患难。
第三,使用MQ的可能是MQ,没有调查过吗?
笨蛋自己拍拍头看自己的喜好,使用像Kafka这样的MQ,连业界流行的MQ种类都没有调查过。 每个MQ的优点和缺点是什么? 每个MQ绝对没有好坏,但要看用在哪个场合,利用优点回避劣势。
如果不考虑技术选择的候选人进入了队伍,领导者可能会给他任务,设计什么样的系统,他可能会在中间使用技术,不考虑选择。 最后选择的技术可能不一定合适,但留下了同样的洞穴。
分析面试问题
为什么要使用消息队列
实际上,我们来询问消息队列中有什么样的使用场景。 并且,在项目中具体有什么样的场景,在这个场景中使用消息队列的是什么
面试官问你这个问题,希望的一个答案是:你们公司有什么样的业务场景,这个业务场景有什么样的技术挑战,如果不使用MQ可能会很麻烦,但是现在使用MQ带来了很多好处。
首先,让我们谈谈消息队列中常见的使用场景。 实际上有很多场景,但比较的核心是解耦、异步和切削峰值三个。
解除结合
看这样的场面。 a系统向BCD系统发送数据,并通过接口调用发送数据。 如果e系统也需要这个数据呢? 如果不再需要c系统呢? a系统负责人几乎崩溃了…
在此情形下,a系统可与各种其它混乱系统组合在一起以使得a系统产生相对重要的数据,且许多系统要求a系统发射此数据。 a系统必须经常重新考虑BCDE的四个系统,还是保存信息?头发变白了呢
使用MQ,a系统生成数据且将数据发送到MQ中,哪些系统需要自己在MQ中消耗数据。 如果新系统需要数据,那么可直接从MQ消耗的系统不需要该数据,可取消MQ消息的消耗。 这样,a系统无需考虑向谁发送数据,无需维持这个代码,也无需考虑人是否成功、失败是否超时等。
总结:通过MQ、Pub/Sub发布订阅消息模型,a系统与其他系统完全结合。
面试技巧:想想你负责的系统是否有类似的场景。 在一个系统或一个模块中调用多个系统或模块,彼此的调用很复杂,维护很麻烦。 但是,实际上,如果此调用不需要直接同步调用接口,并且可以通过MQ异步解决绑定,则必须考虑是否可以在您的项目中使用此MQ来解除系统绑定。 简历中显示了这一情况,用MQ解耦。
异步
让我们看看另一个剧本。 a系统必须在自己的本地写入库,必须在bcd3系统中写入库。 在自己的本地写入库需要3ms,在bcd3个系统中写入库需要300ms,450ms,200ms。 最终的要求总延迟为3,300,450,200=953 ms,接近1s,用户感到在做什么,慢慢死去。 用户通过浏览器提出要求,等待1s,几乎是不被接受的。
一般的互联网企业对于用户的直接操作,按照要求必须在200 ms以内完成,一般用户几乎没有意识。
使用MQ,a系统向MQ队列连续发送三条消息,如果时间为5ms,则a系统在收到请求后进行响应,总时间为3.5=8ms,对用户来说就像点击了按钮一样,8ms后直接返回,非常爽快的网站
削峰
从每天0:00到12:00,a系统平稳,每秒同时要求数为50个。 结果:一旦达到12:00 ~ 13:00,每秒同时要求数突然急剧增加到5k条。 然而,系统直接基于MySQL,并且大量请求蜂拥到MySQL上,从而对MySQL每秒执行大约5k个SQL。
典型的MySQL几乎等同于每秒运行2k个请求。 每秒请求5k可能会直接杀死MySQL,导致系统崩溃,使用者无法使用系统。
但是,高峰期过后,到了下午,达到低峰值,1w的用户有可能同时在网站上操作,每秒的请求数也有可能达到50件,整个系统几乎没有压力。
如果使用的是MQ,则每秒5k个请求写入MQ,a系统每秒最多处理2k个请求。 因为MQQ每秒最多处理2k个请求。 a系统从MQ逐渐提取请求,每秒提取2k个请求,使其不超过自己每秒可处理的最大请求数,即使在高峰时间a系统也绝对不下降。 MQ每秒进入5k个请求,出现2k个请求,结果中午的高峰( 1小时)有可能积累了数十万到数百万人的请求。
这个短峰的积压是ok的。 高峰过后,MQ每秒有50个请求,但a系统仍以每秒2k个请求的速度处理。 所以,一过高峰,a系统就会立刻解决滞留的信息。