常见集群算法解析

Gossip 协议简介

常见集群算法解析

【定义】

Gossip protocol,又叫 Epidemic Protocol (流行病协议),也叫“流言算法”、“疫情传播算法”等。其名称已经形象的说明了算法的原理和工作方式。

学习链接

【应用场景】

1. 分布式网络,无集中管理节点;

2. 节点间点对点传播信息。

【典型应用】

1. P2P;

2. Bitcoin;

3. Apache Cassandra、Redis cluster。

Gossip 协议优缺点

优点
缺点

简单

最终一致性

1. 扩展性:网络节点可任意增加和修改;

2. 容错性:无中心节点,任意节点宕机

不影响协议运行;

3. 去中心化:任意节点都可以发送消息。

1. 需要花费一定时间达到最终一致性;

2. 消息冗余;

3. 不适合超大规模集群(超过1000);

4. 恶意节点传播垃圾信息。

Gossip 模式1 – Direct Mail

【直邮模式】

通知所有邻居更新信息,邻居节点收到消息后不会转发。

常见集群算法解析

【优点】

简单。

【缺点】

1. 难以达到最终一致性

节点消息可能丢失(图中黄色节点);

节点可能并没有连接(图中深红色节点)。

2. 容错性低

需要缓存发送失败的消息。

3. 种子节点压力大

【应用场景】

社交网络(朋友的朋友并不一定是你的朋友)。

Gossip 模式2 – Anti-Entropy

【反熵模式】

集群中的节点,每隔一段时间随机选择1个节点,互相交换所有数据,然后进行同步,消除数据不一致

常见集群算法解析

【优点】

最终一致性。

【缺点】

1. 信息同步的成本高:

checksum;

updated list。

2. 达到最终一致性的耗时较长。

【应用场景】

节点数量不多,实现最终一致性,例如存储系统多副本一致性。

Bully 算法简介

【Bully 算法】

当一个进程发现协调者(或 Leader)不再响应请求时,就判定其出现故障,于是它就发起选举,选出新的协调者,即当前活动进程中进程号

最大者。

Bully 的中文意思是“霸凌”,但实际实现的时候,找最小的节点也可以,关键点在于“最”

【关键假设】

1. 系统是同步的;

2. 进程在任何时候都可能失败,包括算法在执行的过程中;

3. 进程失败后停止工作,重启后重新工作;

4. 有失败监控者,它可以发现失败的进程;

5. 进程之间消息传递是可靠的;

6. 每一个进程知道自己和其他每一个进程的 ID 以及地址。

Bully 算法选举过程

(1/2)

常见集群算法解析

step0:初始状态,P6 为 Leader;

step1:P6 故障;

step2:P3 检测到 P6 故障,发起选举,向 P4、P5、P6 发送 Election 消息;

step3:P4、P5 回复 P3 Alive 消息,说明自己还活着,P3 退出选举,等待胜利消息。

(2/2)

常见集群算法解析

step4:P4向P5、P6发送 Election 消息;

step5:P5回复P4 Alive 消息,P4退出选举,等待 Victory 消息;

step6:P5向P6发送 Election 消息;

step7:P5未收到 Alive 消息,成功当选,向所有节点发送胜利消息,选举结束。

Raft 算法简介

【Raft 算法】

Raft是一种更为简单方便易于理解的分布式算法,主要解决了分布式中的一致性问题。相比传统的Paxos算法,Raft将大量的计算问题分解成为了一些简单的相对独立的子问题。

【关键点】

1. 容易理解(Raft 作者说几个研究人员研究了1年还不是很明白 Paxos);

2. 算法明确划分为选举、复制、安全三个子问题。

Raft 实现1 – leader 选举

常见集群算法解析

1.应用程序的客户端只向领导服务器发出请求,并且只从领导服务器获取响应。etcd 的实现

2. 只有在一个领导人成功当选并存活才可用。

Raft 实现2 – 日志复制

常见集群算法解析

State machine replication:复制状态机,复制的是命令而不是数据,典型代表:Raft。

Primary-backup system:主备复制,复制的是命令执行后的数据,典型代表:ZooKeeper 的 ZAB

常见集群算法解析

Raft的实现:

每个节点都有一个状态机和一致性模块,由一致性模块保证分布式一致性,节点之间复制的是 client 发送的命令,无论读写请求都需要进行一致性处理,因此可以容忍非拜占庭故障。

Raft vs ZAB vs Paxos

常见集群算法解析

Raft vs ZooKeeper

常见集群算法解析

1. 如果你想内嵌分布式选举或者一致性功能,或者基于业务特性做一些小调整,选择 Raft,例如 MongoDB、etcd 等;

2. 如果你想实现分布式选举或者一致性,但是不想自己去实现协议代码,选择 ZooKeeper,例如 HDFS、Cassandra 等;

3. 如果你不确定,请选择 ZooKeeper。

总结:

常见集群算法解析


原文始发于微信公众号(二进制跳动):常见集群算法解析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/166880.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!