面试官问:为什么你们项目要用消息队列?

同学们应该都会被问到过这个问题:你的系统为什么要用消息队列?
大家普遍回答:我入职前,系统里面就已经用了消息队列啊,然后就用了。
其实面试官就是想看看你有没有深入了解过消息队列,有没有认真思考过消息队列解决了哪些问题?

这篇文章主要带大家解决以下几个问题:

一、为什么要用消息队列

场景1.

假设现在有A,B 两个系统,都需要推送数据到C系统,普遍做法是C提供给一个接口,给A,B调用;
如果这时又上来了一个系统D,也需要A,B将数据推送给它,于是A,B又得调用D提供的接口,这样不太利于后期扩展。

场景2.

假设有一个商城系统,有一天做了一个促销活动,导致当天流量暴增,但是通过监控发现,用户进入首页,调用首页接口耗时非常长,导致有很多用户进入首页后,很长一段时都是空白页,最后发现是由于用户在调用首页接口后,后台需要更新用户的日活信息,直接操作了数据库,当时由于用户量又多,才导致耗时进一步变长,后面临时采用线程异步更新用户日活信息到数据库。

其实上面两个场景都可以用消息队列的基本特性去解决:

  • 异步处理
  • 应用解耦

所以为什么要用消息队列,我们就很清楚了,使用消息队列能让我们系统更加稳定,更加容易扩展,而不是为了用而用,而不考虑使用消息队列能够给我带来什么好处,只是盲目的去使用。

二、我的项目适合使用哪种消息队列

上面说了为什么使用消息队列,接下来在分享下几种主流的消息中间件分别适合在什么场景(项目)下去使用:

RabbitMQ

rabbitmq是erlang语言开发的,因为erlang本身就具备高并发的优势,所以性能非常好;但是不利于二次开发;社区活跃度非常高,一般开发过程中遇到的问题都能在社区找到答案。
如果公司的数据量不是特别大或者小公司优先选择rabbitmq

Kafka

kafka天生就是为了日志而生的,由于其顺序读写磁盘,所以其吞吐量极高。
kafka一般可以结合elk 去使用;一般不建议小公司使用,需要部署太多节点了,大公司请随意。

RocketMq

rocketmq 主要为金融和电商行业而生,rocketmq融入了kafka的一些设计思想;
由于它扛过了多次双11,所以它的稳定性和高可用性是毋庸置疑的;
而且rocketmq中加入了延时队列,很适用于订单超时未支付自动取消的功能需求。

三、使用消息队列会带来什么问题

我们在上面说了项目中引入消息队列带来的好处,但是同样也会给我们的项目带来一些不可避免的问题:

  • 系统可用性降低
  • 系统复杂性提高
  • 数据一致性问题

福利大放送

关注微信公众号“AI码师”,领取2021面试资料和最新全套微服务教程
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_34311210/article/details/120029115