分布式系统的共识(consensus)算法比较

这是一篇比较分布式系统中服务器之间得到状态最终一致性也就是取得共识consensus几个流行算法,包括Paxos、Egalitarian Paxos、Hydra、Fast Paxos、Ios、VRR(Viewstamped Replication Revisited)、 Multi-Paxos、Raft等。算法


什么是共识consensus?当多个主机经过异步通信方式组成网络集群时,这种异步网络默认是不可靠的,那么在这些不可靠主机之间复制状态须要采起一种机制,以保证每一个主机的状态最终达成相同一致性状态,取得共识。数据库


为何认为异步网络默认是不可靠的?这是根据FLP原理。Impossibility of Distributed Consensus with One Faulty Process一文提出:在一个异步系统中咱们不可能确切知道任何一台主机是否死机了,由于咱们没法分清楚主机或网络的性能减慢与主机死机的区别,也就是说咱们没法可靠地侦测到失败错误。可是,咱们还必须确保安全可靠。缓存


在实际中,咱们首先必须接受系统可能不可用,而后试图减轻这种不可用,而不是彻底回避去除,减轻的手段有定时器和补偿。Paxos等算法所以而诞生。安全


Paxos算法是最初最简单的分布式共识算法,它是经过节点之间来回两次实现状态复制(两段复制),可是Paxos这种来回两次的协调过程(甚至更长)拖延了时间,增长了系统的延迟。服务器


在实际过程当中,Paxos这种理想化的协议实际遭遇不少挑战,也就是说,实际中有不少问题呼唤一种分布式协调机制来处理下面这些问题:网络

1. 处理磁盘故障和损坏架构

2. 处理有限的存储容量less

3. 有效处理只读请求异步

4. 动态成员资格和从新配置分布式

5. 支持事务

6. 验证明施的安全


这就须要一种领导人或协调人角色来具体处理这些问题,Paxos是一种无领导人Leaderless算法,而Raft算法是一种强领导力Leadership的算法。总之,之因此须要协调领导人是为了确保主机之间状态复制过程的可靠性。

一个强势领导人Leadership可以在问题发生时在主机之间进行复杂的强协调,显然Leaderless则是无领导人或协调人介入处理。可是强领导在保证可靠性的同时也会汇集单点风险,并且选举领导人的过程也是费时费力的,所以,并非领导力越强越好。须要根据本身的业务领域特色在Leadership和Leaderless之间选择合适本身的算法。


从Leadership到Leaderless以此从强到弱的排序是:

1. Strong Leadership强领导:Raft

2. Leader driven领导人驱动:VRR和 Mutil-Paxos

3. Leader with Delegation有表明团的领导人:Ios

前面三个重视单个领导人的算法MultiPaxos,Raft 和 VRR的问题是:吞吐量将受到单个节点的限制。而Ios容许一个领导人动态地安全地委托其职责给系统中其余节点(表明团)。

4. Leader only when needed只有在须要时才有领导人:Hydra和Fast Paxos

5. Leaderless无领导人:Egalitarian Paxos和普通的Paxos

上述算法中,最小延迟的算法是VRR,最易于理解的是Raft,而对于广域网地区之间复制,冲突最少conflicts rare的是 Egalitarian Paxos; conflicts common是 Fast Paxos.

上述算法须要结合实际以及CAP理论与FLP综合判断选择。


当前,日益普遍使用的微服务架构会很天然地横向扩展到分布式系统,虽然微服务自己是无态的,可是它会操做有态数据,这些有态数据要么放在数据库中,要么放在缓存中,那么缓存或数据库进行横向扩展组成分布式系统时就须要使用上面这些算法,固然一些NoSQL数据库内部已经实现了这些算法,那么了解这些算法也能对咱们进行NoSQL选型有参考做用。

相关文章
相关标签/搜索