One minute
Phx Oversall
phxQueue的组件模块:
- store service: 依赖Paxos 协议作副本同步, 实现消息存储, 通过租约保证master模型
- lock service: 为scheduler 选主、consumer-queue的分配
- scheduler service: 根据负载调度consumer和queue的映射关系
模型:
- producer: 生产者
- consumer: 消费者
- store: 负责消息/cursor的存储
- queue: 消息队列
- paxos-group: 存储的一组集合, 集合中所有的store数据一致.
- 使用scheduler避免consumer的负载过高, 进行负载均衡
交互上:
producer/consumer使用了rpc方式和broker进行交互, broker的消息存储使用了leveldb, 通过paxos实现内容的一致性.
逻辑层面:
- queueId 和 queue的关系比较特殊, queue是一段连续的queueId, queue之间可以进行排序
- topic负责部分queue
- consumer层通过拉取queue实现消息的拉取
特殊的地方:
- 在paxos上进行了大量的优化: broker层的批提交
- 相比传统的mq, 添加了consumer层的scheduler: 负载调度
不足:
- 开源的版本没有broker负载调度模型, 避免broker负载过重, 相对pulsar欠缺. 怀疑queueId/queue模型是可以切分负载的, qmq有类似的功能.
- leveldb可以考虑使用rocksdb, 在review代码的时候, 发现很多针对leveldb的优化.
- 开源的版本没有运维的方式说明. 比如 queue的切分, 部署模型
参考文档:
63 Words
2019-03-31 11:52 +0800