导图
所以主要考虑的点是:
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,更本质就是消息状态更新处理)
优化
有了主要思路后,就要考虑更多的优化细节。
正确的利用COW 机制避免入坑
网络传输的零拷贝能力的应用
正确利用磁盘的分布刷数据的能力
数据结构 (分片算法)
小结
以上是从不同的角色需求出发,结合任务标的本身的特性思考如何设计一个MQ,新年开篇