-
拆分服务,可将各个业务微服务最小化处理,有利于项目维护
-
低耦合,拆分消息生产者和消费者的关系(不关心谁要用,业务服务根据需要上架/下线)
-
尽量保证消息的前后时序关系(例如必须要登录在前,退出在后)
-
低延时,正常消息产生和发布在3秒内完成(不含死信消息)
-
高可靠性,无单点故障
-
高吞吐率,多节点同时接收和发布
-
有死信队列,支持消息重发(保证订阅者短暂断开,不丢消息)
-
每条消息需要有对应的数字cmdid,否则会丢弃消息
-
自动抛弃未订阅的消息
- 发起tcp,或启动grpc 服务
- 连上发送订阅事件
- 接收发布的消息,并处理
- 断开前,发送取消订阅事件
- 异常断开时,需要重新连接并订阅
-
发起tcp消息,或发起grpc 方法调用
-
向连上的集群节点发送消息
- 可启动单节点和多节点两种集群模式。多节点模式下不可低于2台,推荐奇数台(低于2台会报警)
- 每个节点都有选举特权
- 集群节点之间通过gossip协议维护,派发node join, leave, fail等事件
- leader根据raft协议选举产生,派发leader, follower等事件
- 集群之间使用raft进行数据同步,同步索引,订阅信息,队列等
- 支持两种队列模式:内存和磁盘队列。内存运行速度快,磁盘队列不怕集群重启(消息不丢失)
- 某节点宕机,自动剔除该节点。订阅者自动重连到其他节点上
- leader宕机,自动产生新leader,继续接受/发布消息
- 异常预警,人工干预
- 支持客户端Tcp和grpc stream长链接两种接入,后期考虑介入ws
- 日志记录,方便回查bug
- 支持多协议对外入口,tcp/tls, grpc, ws/wss
- 提供api接口,方便查询集群内存数据(待定)
- 支持安全链接(待定)
- 支持订阅者身份认证(待定)
- 支持consul服务注册和发现(待定)
- Cpu 待定
- Mem 待定
- Tps 待定
- 客户端断开需要取消订阅 ok
- 同一消息多方订阅 ok
- 只有follower节点对外 ok
- 单元测试 ok
- 订阅信息同步给新节点 ok
- 用raft来同步数据,而不是用grpc ok
http://thesecretlivesofdata.com/raft/
https://raft.github.io/
https://www.infoq.cn/article/coreos-analyse-etcd/