RabbitMQ--面试官问为什么要使用MQ,应该怎么回答

如果简历中有写到使用过RabbitMQ或者其他的消息中间件,可能在MQ方面的第一个问题就是问:为什么要使用MQ

面试官期望的回答

  1、项目中有什么业务场景需要用到MQ

  2、但是用了MQ,会带来很多问题,有什么缺点

所以,我们首先要回答的就是MQ的使用场景,在第一篇MQ文章中有简单提过这个

应用场景

  1、异步处理

  2、流量削峰

  3、日志处理

  4、应用解耦

1、异步处理

  什么时候,我们有多个服务,如果是串行同步设计,例如:A服务产生一条数据,进行入库操作花费100ms,然后需要同步给B服务,B服务执行

insert和update SQL花费了200ms,然后A服务得到响应,到了C服务,又花费了300ms,然后整个系统响应花费了600ms+,如果系统有更多服务,用

户整个就崩溃了,特别是互联网公司,需要响应在200ms以内

  如果使用MQ,A服务入库操作话费100ms,发给MQ Broker只用了20ms,整个系统响应120ms,后面其余服务的入库操作就是异步的了,这个响应

时间就很正常

2、流量削峰

  流量高峰期对于系统来说是不可避免的,特别是互联网公司,例如:饿了吗中午是高峰期,这时候有100W用户在使用,每秒5000个请求打过来,

MySQL理论上只能承受每秒2000笔(这里不考虑Redis,或者其他架构设计),MySQL可能直接就挂了

  如果使用MQ,每次从MQ拉取2000请求过来,处理完了,进行ACK确认,继续拉取,能够有流量削峰的作用,虽然会造成MQ消息的堆积

3、日志处理

  这个主要是针对kafka的,很多大数据平台的日志量超级恐怖,kafka就是为了解决这种问题的,kafka我们怎么用过,就不细讲了。。。

4、应用解耦

  其实本人做过的第一个项目是保险项目,应用耦合比较严重,技术方面都比较落后吧,一个保费计算通过WebService接口串行调用好几个第三方

服务接口,感觉真的有点操蛋。类似这种情况,可能今天新增一个别的接口,明天减少一个接口。而且要考虑有的接口突然不通了,或者超时。是否

需要有一个重试机制,总之来说,很麻烦。

  这种时候如果使用RabbitMQ,通过发布订阅模型,使用交换机类型为fanout,都可以收到Producer的消息,fanout在讲java API的时候有讲到实

现广播,我只要把消息发送给Broker,下游是否接口怎么变化,跟上游的关系已经不大了,反正就是你想怎么搞就怎么搞

MQ优缺点:

优点:

  应用场景也是MQ的优点。。。

缺点:

  1、系统可用性降低,MQ一旦挂了,影响很大,虽然MQ也有集群,可以实现高可用。据说有一线互联网公司MQ真的宕机过几小时,影响很大

  2、使用MQ,我们需要考虑的更多了,导致系统复杂性增加,例如:消息的幂等性、消息如何进行可靠性投递、消息突然丢失了等

  3、一致性问题。例如业务流程设计服务ABCD,需要保证原子性的,但是ABC都成功了,D失败了,这种时候就很蛋疼了

所以无论是什么中间件,Redis、MQ、Elasticsearch等,都要考虑很多

原文地址:https://www.cnblogs.com/huigelaile/p/10923420.html

时间: 2024-11-01 22:34:17

RabbitMQ--面试官问为什么要使用MQ,应该怎么回答的相关文章

面试官问现在工资是多少,该怎么回答?

面试,是一个推销自己的过程,先谈能力,后聊价格,顺序不能乱.如何谈薪资,能够做到对候选人最有利,是一门学问,也需要大量的实践.今天,我介绍两个谈薪资的要点给大家,稍加练习,便足以应对大部分的场面. 这个世界,从来都不是公平和客观的,面试也一样.用人单位对候选人的定价,从不看真实价值,往往只根据候选人当前的薪资来定,并且默认最多只会增幅0-20%(没错,不少公司在某些情况下一分钱都不会涨),而候选人对跳槽涨薪的预期一般是30%起.天然的,在谈判开始前,双方对薪资涨幅的预期,就存在巨大鸿沟,如何跨越

当面试官要你介绍一下MQ时,该怎么回答?

一.为什么要使用MQ消息中间件? 一个用消息队列的人,不知道为啥用,有点尴尬.没有复习这点,很容易被问蒙,然后就开始胡扯了. 回答:这个问题,咱只答三个最主要的应用场景,不可否认还有其他的,但是只答三个主要的,即以下六个字: 解耦.异步.削峰 1.解耦 传统模式: 传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的优点: 将消息写入消息队列,需要消息的系统自己从消息队列中订

面试官问:如何让其他部门重视数据?该怎么答?

本文转自知乎 作者:接地气的陈老师 ----------------------------------------------------- 有同学问:老师,面试官问了我一个这样的问题:"管销售的领导一直不关心数据,而且人家那个部门也一直业绩排名第一,每年的指标都能达标,要怎样让这个领导重视起来呢?"我该怎么回答???? 答:如果不是面试的话,我建议直接放弃这哥们吧.回顾一下我们讲过的业务部门分类(如下图) 天天做用户画像,有多少同学对企业内部数据分析部门的用户进行过画像?哈哈 业务

面试官问我,使用Dubbo有没有遇到一些坑?我笑了。

前言 17年的时候,因为一时冲动没把持住(当然最近也有粉丝叫我再冲动一把再更新一波),结合面试题写了一个系列的Dubbo源码解析.目前公众号大部分粉丝都是之前的粉丝,这里不过多介绍. 面试官问我,使用Dubbo有没有遇到一些坑?我笑了.根据我的面试经验而言,能在简历上写上原理.源码等关键词的,是非常具备核心竞争力的.上周和一个公众号粉丝交流面试情况如下 面试官问我,使用Dubbo有没有遇到一些坑?我笑了.面试的时候,把源码一波分析,令面试官虎躯一震!在一阵前戏过后,以为接下来无非就是身体的一顿抽

大厂面试官问你META-INF/spring.factories要怎么实现自动扫描、自动装配?

大厂面试官问你META-INF/spring.factories要怎么实现自动扫描.自动装配? 很多程序员想面试进互联网大厂,但是也有很多人不知道进入大厂需要具备哪些条件,以及面试官会问哪些问题,这里今天就给大家分享一下,如果大厂面试官问你META-INF/spring.factories要怎么实现自动扫描.自动装配,你需要怎么回答? 程序员应聘面试经验技巧和注意事项你知道哪些? 1.基础很重要,不要生疏了. 2.要关注技术前沿. 3.小公司比较看重知识的广度,大公司更看重知识的深度. 4.良好

去百度面试,想知道面试官问哪些问题,看这篇文章

https://mp.weixin.qq.com/s?__biz=MzI0NjM3NjI1NQ==&mid=2247487861&idx=1&sn=34316976cdb0aa2e4df3aa6f1f5cc31d&chksm=e9416325de36ea33200d9944fff37381de11c8d4dc8aeb0cc4b83c6201e56b8ee2bc8c2798cc&mpshare=1&scene=1&srcid=1102ElP5k7MBT

大厂面试官问你知道final、finally、finalize有什么区别?

前言Java程序员面试,基础真的很重要.基础这东西,各个公司都很看重,尤其是大公司,他们看中人的潜力,他们舍得花精力去培养,所以基础是重中之重.之前很多人问我,项目经历少怎么办,那就去打牢基础,当你的基础好的发指的时候,你的其他东西都不重要了. Java 语言有很多看起来很相似,但是用途却完全不同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点.今天,我要问你的是一个经典的 Java 基础题目,谈谈 final.finally. finalize 有什么不同?典型回答final

当面试官问你:如何进行性能优化?

问题背景 在开发好页面后,如何让页面更快更好的运行,是区分一个程序猿技术水平和视野的一个重要指标.所以面试时,面试官总会问你一个问题,如何进行性能优化呢? 性能优化是什么 从前端的角度来说,性能优化可以分为两个方向.从用户角度来看,一个是页面加载的很快,另一个是页面使用起来很流畅.因此,对性能优化的探索,我们可以分为页面加载时间跟页面运行效率两个方向来进行研究 从浏览器打开到页面渲染完成,花费了多少时间 浏览器解析->查询缓存->dns查询->建立链接->服务器处理请求->服

面试官问你斐波那契数列的时候不要高兴得太早

前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归求斐波那契数列 递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法.斐波那契数列的计算表达式很简单: 1F(n) = n; n = 0,12F(n) = F(n-1) + F(n-2),n >= 2; 因此,我们能很快根据表达式写出递归版的代码: 1/*fibo.c*/ 2#include <stdio.h> 3#include <stdlib.h&