如果让你写一个消息队列,该如何进行架构设计啊?
2019-05-28 22:14
507 查看
版权声明:~转载请标注,谢谢~如果侵权了请私信我,我会立刻删除~ https://blog.csdn.net/baidu_26954625/article/details/90648295
本系列内容转载自git项目advancejava
面试题剖析
其实回答这类问题,说白了,不求你看过那技术的源码,起码你要大概知道那个技术的基本原理、核心组成部分、基本架构构成,然后参照一些开源的技术把一个系统设计出来的思路说一下就好。
比如说这个消息队列系统,我们从以下几个角度来考虑一下:
• 首先这个 mq 得支持可伸缩性吧,就是需要的时候快速扩容,就可以增加吞吐量和容量
设计个分布式的系统呗,参照一下 kafka 的设计理念,broker -> topic -> partition,每个 partition 放一个机器,就存一部分数据。如果现在资源不够了,简单啊,给 topic 增加 partition,然后做数据迁移,增加机器,不就可以存放更多数据,提供更高的吞吐量了?
• 其次你得考虑一下这个 mq 的数据要不要落地磁盘吧?那肯定要了,落磁盘才能保证别进程挂了数据就丢了。那落磁盘的时候怎么落啊?顺序写,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能是很高的,这就是 kafka 的思路。
• 其次你考虑一下你的 mq 的可用性啊?这个事儿,具体参考之前可用性那个环节讲解的 kafka 的高可用保障机制。多副本 -> leader & follower -> broker 挂了重新选举 leader 即可对外服务。
• 能不能支持数据 0 丢失啊?可以的,参考我们之前说的那个 kafka 数据零丢失方案。
相关文章推荐
- 消息中间件面试题:如果让你写一个消息队列,该如何进行架构设计?
- 如果让你写一个消息队列,该如何进行架构设计?
- 08 如果让你来开发一个消息队列中间件,你会怎么设计架构?
- 如何使用NODEJS+REDIS开发一个消息队列
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
- 互联网架构,如何进行容量设计?
- 如何用Java和Redis设计一个高效的先入先出的队列
- 如果是你铁道部12306网站架构师,如何设计网站的软件架构和硬件系统架构
- 关于如何设计一个基于事件驱动架构的思考
- 关于如何设计一个基于事件驱动架构的思考
- 如何进行软件架构设计?
- 有一个任务队列,分别有A、B、C三种类型的任务,设计一种功能,让三种任务分别按照x:y:z(具体比例可配置)的比例进行执行
- Flume(NG)架构设计要点及配置实践 Flume NG是一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集
- Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入。 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少
- 如何进行软件架构设计?
- 互联网架构,如何进行容量设计?
- 架构设计--消息队列
- [架构设计]关于消息队列的使用
- 如何进行软件架构设计?
- 如何进行软件架构设计?