作者:紫凝 | 来源:互联网 | 2023-07-11 13:03
篇首语:本文由编程笔记#小编为大家整理,主要介绍了消息队列 01 - 面试官对于消息队列的连环炮相关的知识,希望对你有一定的参考价值。
1. 引子
消息队列分布式系统中重要的组件,一种存放消息的容器,主要作用有解耦、异步、削锋,是大型分布式系统不可缺少的中间件。
常见的消息队列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka。
面试官先问了这样几个问题:
你们系统里为什么要使用消息队列?
既然使用了消息队列,说说他还有什么使用场景?
消息队列的优缺点是什么?
2. 为什么使用消息队列?
回答:甲方提供 EOS 充值服务,我方进行调用。出于解耦的目的,引入了消息队列。
回答的方向是:公司的 xxx 业务遇到了挑战,不用 MQ 会有麻烦,使用 MQ 之后带来了好处。
3. 消息队列的使用场景?
消息队列的使用场景,消息队列有什么优点,消息队列有什么作用是等价的。
消息队列的作用主要有三个解耦、异步、削峰。
解耦
B,C,D 系统需要使用 A 系统产生的关键数据。
无消息队列时
有消息队列时
系统 A 作为生产者,将消息发送到消息队列
系统 B、C、D 作为消费者订阅消息
新增消费者只需订阅消息,对原系统和业务没有影响
异步
为了更好的用户体验,用户请求数据时,响应时间不能太久。
无消息队列时
用消息队列时
削峰
秒杀场景下,每秒有 5000 个请求,mysql 每秒最大处理 2000 条 sql。
无消息队列时
有消息队列时
用户请求数据先存入 MQ 中
系统 A 每秒读取 2000 条数据进行处理
每秒多出 3000 条未处理数据按场景稍后处理
4. 消息队列有什么缺点?
优点前面已经说过了,还需要讨论一下缺点。
为什么要问缺点是什么?
凡事都有两面性,如果只是考虑到消息队列的优点,而没有考虑缺点,这就是一个潘多拉的魔盒。打开魔盒,接踵而来的会是一系列的意外。
推广到引入其他技术亦然,只有考虑到缺点之后才可以采取额外的技术方案或者架构来规避这些缺点。
系统可用性降低
系统复杂度提高
一致性问题
总结
面试官问到 MQ 的时候,希望考察我们在使用 MQ 的时候是否有过自己的思考。
没有完美的技术,任何技术都具有两面性,要考虑它的使用场景,并且对可能遇到的风险做到心中有数,提前预防。
思考
引入消息队列之后:
如何保证高可用?
如何避免消息的重复消费和消息丢失?
如何保证消息的顺序执行?
请听下回。
欢迎关注,深页的学习与思考