- mqtt 以订阅的主题为key,订阅者为value,使用Trie前缀树存储(按key遍历,当找到一个key,它所在的节点会存储所有订阅者)
- Raft 是一个一致性算法,保证每个状态机的状态一致,常用于服务器集群
- 原理:每个状态机安装相同的序列执行相同的指令
- 实现:每个节点三个状态:follower, candidate, leader。开始都是follower,follower超时没发现leader,会变成candidate,给其他节点发送request Vote。发起后,自己必定为自己投一票。收到request Vote的节点会重置自己的超时时间,并可以选择投票或者不投票。只要拿到多数票(过半数),就变成leader。如果没有节点拿到多数票,那就Term+1,进入下一期。为了防止选不出leader,超时时间都是随机的,在100ms-150ms之间。 Leader在拿到新数据后(如果其他节点拿到新值,也会先发送给leader,leader再转发给除该follower节点之外的其他节点),发送给其他节点,当收到多数节点的回复后,commit这个新值,并在下一次心跳时通知其他节点把新值commit。