问题剖析之消息队列的架构设计
既然考察到让你对消息队列进行架构设计,不是说你一定要研究过消息队列的源码,其实从根本上说,就是考察你了不了解消息队列的基本原理、核心组成部分、基本架构构成,同时再结合一些开源技术做参考理解消息队列的架构设计思路。
说到消息队列的架构设计,我们可以从以下几个角度来思考:
首先是消息队列要支持可伸缩性。在需要的时候能够快速扩容,提高吞吐量和容量,针对这一点,就是要设计一套分布式的系统。这里可以参考 kafka 的设计理念,也就是 broker->topic->partition 这种模式,每个 partition 放到每一台机器里,只存一部分的数据。如果资源不够了,就给 topic 增加 partition,再做数据迁移,增加机器,这样就可以存放更多数据,提供更高的吞吐量。
然后要考虑消息队列的数据有没有必要持久化到磁盘里。这是肯定的,持久化到磁盘里才能保证线程挂的时候消息不会丢失。这里也参考 kafka,顺序写进磁盘,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能也是很高的。
还有就是消息队列的可用性。这点可以通过 kafka 的高可用保障机制来实现。思路就是多副本->leader&follower->broker 挂了重新选举 leader 即可对外服务。
最后如果要支持数据 0 丢失。也是可以参考 kafka 数据零丢失方案。
消息队列确实是很复杂的,但其实考察这种开放性问题就是考察你从架构角度整体构思和设计的思维以及能力。
评论