Friday, March 26, 2021

System design: 消息队列 | Message queue

March 26, 2021

I just quickly copied some good arguments about system design, message queue. I will look into more through Google search. 


既然考察到让你对消息队列进行架构设计,不是说你一定要研究过消息队列的源码,其实从根本上说,就是考察你了不了解消息队列的基本原理、核心组成部分、基本架构构成,同时再结合一些开源技术做参考理解消息队列的架构设计思路。

说到消息队列的架构设计,我们可以从以下几个角度来思考:

首先是消息队列要支持可伸缩性。在需要的时候能够快速扩容,提高吞吐量和容量,针对这一点,就是要设计一套分布式的系统。这里可以参考kafka的设计理念,也就是broker->topic->partition这种模式,每个partition放到每一台机器里,只存一部分的数据。如果资源不够了,就给topic增加partition,再做数据迁移,增加机器,这样就可以存放更多数据,提供更高的吞吐量。

然后要考虑消息队列的数据有没有必要持久化到磁盘里。这是肯定的,持久化到磁盘里才能保证线程挂的时候消息不会丢失。这里也参考kafka,顺序写进磁盘,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能也是很高的。

还有就是消息队列的可用性。这点可以通过kafka的高可用保障机制来实现。思路就是多副本->leader&follower->broker挂了重新选举leader即可对外服务。

最后如果要支持数据0丢失。也是可以参考kafka数据零丢失方案。

消息队列

消息队列确实是很复杂的,但其实考察这种开放性问题就是考察你从架构角度整体构思和设计的思维以及能力。

No comments:

Post a Comment