作者:yanglbme 来源:https://github.com/doocs/advanced-JAVA/blob/master/docs/high-concurrency/mq-design.md
文章插图
# 面试官心理分析
其实聊到这个问题 , 一般面试官要考察两块:
1、你有没有对某一个消息队列做过较为深入的原理的了解 , 或者从整体了解把握住一个消息队列的架构原理 。
2、看看你的设计能力 , 给你一个常见的系统 , 就是消息队列系统 , 看看你能不能从全局把握一下整体架构设计 , 给出一些关键点出来 。
说实话 , 问类似问题的时候 , 大部分人基本都会蒙 , 因为平时从来没有思考过类似的问题 , 大多数人就是平时埋头用 , 从来不去思考背后的一些东西 。类似的问题 , 比如 , 如果让你来设计一个 Spring 框架你会怎么做?如果让你来设计一个 Dubbo 框架你会怎么做?如果让你来设计一个 MyBatis 框架你会怎么做?
# 面试题剖析
其实回答这类问题 , 说白了 , 不求你看过那技术的源码 , 起码你要大概知道那个技术的基本原理、核心组成部分、基本架构构成 , 然后参照一些开源的技术把一个系统设计出来的思路说一下就好 。
【面试题:如何设计一个消息队列?】
比如说这个消息队列系统 , 我们从以下几个角度来考虑一下:
首先这个 mq 得支持可伸缩性吧 , 就是需要的时候快速扩容 , 就可以增加吞吐量和容量 , 那怎么搞?设计个分布式的系统呗 , 参照一下 kafka 的设计理念 , broker -> topic -> partition , 每个 partition 放一个机器 , 就存一部分数据 。如果现在资源不够了 , 简单啊 , 给 topic 增加 partition , 然后做数据迁移 , 增加机器 , 不就可以存放更多数据 , 提供更高的吞吐量了?
其次你得考虑一下这个 mq 的数据要不要落地磁盘吧?那肯定要了 , 落磁盘才能保证别进程挂了数据就丢了 。那落磁盘的时候怎么落啊?顺序写 , 这样就没有磁盘随机读写的寻址开销 , 磁盘顺序读写的性能是很高的 , 这就是 kafka 的思路 。
其次你考虑一下你的 mq 的可用性啊?这个事儿 , 具体参考之前可用性那个环节讲解的 kafka 的高可用保障机制 。多副本 -> leader & follower -> broker 挂了重新选举 leader 即可对外服务 。
能不能支持数据 0 丢失啊?可以的 , 参考我们之前说的那个 kafka 数据零丢失方案 。
mq 肯定是很复杂的 , 面试官问你这个问题 , 其实是个开放题 , 他就是看看你有没有从架构角度整体构思和设计的思维以及能力 。确实这个问题可以刷掉一大批人 , 因为大部分人平时不思考这些东西 。
推荐阅读
- 该如何解决就业、求职问题 如何解决就业问题
- 如何关闭抖音个人资质认证 抖音如何取消达人资质
- 教你如何辨别红碎茶的好坏
- 马桶堵了如何疏通
- 淘宝投诉判定的规则 《淘宝平台争议处理规则》
- 如何辨别红茶的品质
- 红碎茶要如何冲泡
- 一文全面解析人才盘点九宫格 九宫图解法
- 男士什么牌子洗面奶最好 妮维雅男士控油劲爽洁面乳
- 健康产业如何个人创业 健康产业个人如何创业