
Gossip protocol,又叫 Epidemic Protocol (流行病协议),也叫“流言算法” 、 “疫情传播算法”等。其名称已经形象的说明了算法的原理和工作方式
简单
最终一致性
直邮模式:通知所有邻居更新信息,邻居节点收到消息后不会转发

简单
社交网络(朋友的朋友并不一定是你的朋友)
反馈模式:集群中的节点,每隔一段时间随机选择1个节点,互相交换所有数据,然后进行同步,消除数据不一致

最终一致性
节点数量不多,实现最终一致性,例如存储系统多副本一致性
谣言传播:收到更新消息后,自己成为“受感染节点”,周期性的传播更新消息,如果发现其他节点已经知道了消息,则按照一定概率将自己变为removed,不再传播消息

节点经常变化的集群
当一个进程发现协调者(或 Leader)不再响应请求时,就判定其出现故障,于是它就发起选举,选出新的协调者,即当前活动进程中进程号最大者
Bully 的中文意思是“霸凌” ,但实际实现的时候,找最小的节点也可以,关键点在于“最”

step0:初始状态,P6为Leader
step1:P6故障
step2:P3 检测到 P6 故障,发起选举,向 P4、P5、P6 发送 Election 消息
step3:P4、P5 回复 P3 Alive 消息,说明自己还活着,P3 退出选举,等待 Victory 消息

step4:P4向P5、P6发送 Election 消息
step5:P5回复P4 Alive 消息,P4退出选举,等待 Victory 消息
step6:P5向P6发送 Election 消息
step7:P5未收到 Alive 消息,成功当选,向所有节点发送 Victory 消息,选举结束
Raft is a consensus algorithm that is designed to be easy to understand. It’s equivalent to Paxos in fault-tolerance and performance. The difference is that it’s decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems


State machine replication:复制状态机,复制的是命令而不是数据,典型代表:Raft
Primary-backup system:主备复制,复制的是命令执行后的数据,典型代表:Zookeeper的ZAB
两者差别:是否能够容忍“非拜占庭错误”

每个节点都有一个状态机和一致性模块,由一致性模块保证分布式一致性,节点之间复制的是 client 发送的命令,无论读写请求都需要进行一致性处理,因此可以容忍非拜占庭故障
| Raft | ZAB | Paxos | |
|---|---|---|---|
| 分布式一致性 | 弱于Paxos | 弱于Paxos | 最强 |
| 复制方式 | State machine replication | Primary-backup system | State machine replication |
| 读写方式 | 读写leader,follower不接受请求 | 读写leader,读follower | 任意节点都可以读写 |
| 是否有leader | 是,强leader | 是,强leader | 无,部分变种有Leader,但只是协调作用 |
| 复杂度 | 比Paxos简单 | 比Paxos简单 | 复杂 |
| 特殊场景 | 选举期间不能服务 | 选举期间不能服务 | Livelock |
