如果让你开发一个消息队列中间件,你会怎么设计架构
如果说设计一个MQ系统,需要从以下几个角度考虑
- 首先这个MQ需要支持可伸缩性,就是需要的时候快速扩容,就可以增加吞吐量和容量,那怎么做?设计一个分布式的系统,参照一下kafka的设计理念 broker->topic->partition,每个partition放一个机器,就存储一部分数据,如果现在资源不够用了,给topic增加partition,然后做数据迁移,增加机器,就可以存放更多的数据,然后提供更高的吞吐量
- 其次需要考虑一下MQ的数据要不要落地磁盘,落磁盘,才能保证进程挂掉之后数据不会丢失,顺序写入磁盘,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写性能是很高的,这就是kafka的思路
- 其次需要考虑下MQ的可用性,多副本->leader&follower->broker挂了重新选举Leader即可对外服务
- 消息数据0丢失,参考Kafka数据0流失方案