导图

所以主要考虑的点是:
P1.1. MQ 要有基础的消息管理能力(CRUD)
P1.2. MQ 要有产消日志
P2. MQ将消息存储成功才能响应成功
P3.1 MQ将消息存储 = 分片存储
P3.2 扩容的实现思路(如何在扩容的时候更方便高效)
P4.1 数据要有副本(分片副本)
P4.2 数据副本的传输问题(socket or 其它,同步 or 异步?)
P4.3 数据节点的主从切换,且要对消费者无感
P5.1 主从节点的选举协议
P5.2 分片数据的重加载
P5.3 分片数据与增量数据的混合问题
P5.4 内存数据的排序
R1. ack 机制
R2. 消息丢弃(其实就是 ack,更本质就是消息状态更新处理)
T1. 发布订阅模式(也就是常说的 broker )
优化
有了主要思路后,就要考虑更多的优化细节。
正确的利用COW 机制避免入坑
网络传输的零拷贝能力的应用
正确利用磁盘的数据页,提升刷数据的效率
数据结构 (分片算法)
小结
以上是从不同的角色需求出发,结合任务标的本身的特性思考如何设计一个MQ,新年开篇