常见集群算法解析
Gossip协议 流行病协议,流言协议
分布式网络,无集中管理节点;节点间点对点传播信息。
P2P,BITCOIN,REDIS CLUSTER 等等
简单:
扩展性:网络节点可任意增加或修改
容错性:无中心节点,任意节点宕机不影响协议运行
去中心化:任意节点都能发送消息
最终一致性问题:
需要花费一定时间达到最终一致性
消息冗余
不适合大规模集群
恶意节点传播垃圾信息
direct mail :通知所有邻居更新信息,邻居节点收到消息后不会转发
简单
难以达到最终一致性、容错性低、种子节点压力大。
社交网络
anti entropy:集群中的节点每隔一段时间随机选择一个节点互相交换所有数据,然后进行数据同步,消除数据不一致。
最终一致性
信息同步成本高、达到最终一致耗时长。
存储系统多副本一致
rumor mongering:收到更新消息后,成为受感染节点,周期性的传播更新消息,如果发现其他节点已经知道了消息则按照一定概率将自己变为removed,不再传播消息。
最终一致性,传播信息少,达到最终一致性耗时少。
一定概率可能不一致,节点数量不能太多
节点经常变化的集群
bully算法: 当一个进程发现协调者(或leader)不再响应请求时,就判定其出现故障,于是他发起选举,选出新的协调者。(当前活动进程中进程号最大/小的)
关键假设:
系统是同步的
进程在任何时候都可能失败,包括算法执行过程中
进程失败后停止工作,重启后重新工作
有失败监控者,可以发现失败进程
进程之间传播消息是可靠的
每一个进程知道自己和其他每一个进程的ID及地址
raft算法:
容易理解;算法明确划分为选举、复制、安全三个子问题