Raft——一种易理解的一致性算法(二)

2019-01-08  本文已影响0人  月敢为你忘缺

本文为RAFT一致性算法论文的译文,原文是《In search of an Understandable Consensus Algorithm (Extended Version)》,作者为 Diego Ongaro 和 John Ousterhout 。

3 Paxos 的缺陷

在过去的十年中,Leslie Lamport 的 Paxos 协议几乎成为一致性的代名词:这种协议被广泛地用于教授一致性算法,同时也是多数一致性的实现的起点。首先,Paxos 定义了能够在单个决策中(例如某个复制日志条目)达成一致的协议。我们称这个子集为单一决策 Paxos(single-decree Paxos )。随后,Paxos 结合多个前述协议的实例,达成一系列决策(multi-Paxos),如一个日志条目。 Paxos 能够确保安全性和活跃度,并且支持集群成员的调整。他的正确性已被证明,并且在通常情况下都是有效的。

然而,Paxos 有两个明显的缺陷:

此外,Paxos 的体系结构不利于在实际应用中构建系统;这是单一决策分解(single-decree decomposition)的另一个结果。例如,独立地选择日志条目的集合并将它们合并到有序日志中几乎没有任何好处,这只会徒增复杂性。围绕着一个日志,设计一个新条目有约束地被有序追加到的系统更加简单有效。另一个问题是,Paxos 在内核中使用对称的 P2P 方法(尽管它最终针对性能优化提出了弱形式的领导结构)。这种方式在只需要做一个决策的简单情景中很有效,但是实际应用中只有少数系统使用这种方式。当需要做出一系列的决策时,更简单快速的方法是,选举一个 leader,让 leader 协调做出决策。

因此,实际应用中的系统与 Paxos 几乎没有相似之处。每个实现过程始于 Paxos,当发现实现它过于困难时,便开发出一套完全不同的体系结构。这非常耗时而且容易出错,并且 Paxos 的难于理解又加剧了这个问题。Paxos 的公式也许利于证明它的正确性,但是实际实现与 Paxos 的差别如此之大,以至于这些证明并没有多大价值。如下来自 Chubby 作者的这段话做出了诠释:

Paxos 算法的描述与现实世界系统的需求有着巨大差异。。。系统的最终实现将会基于未被证明的协议。

由于这些问题的存在,我们得出结论:Paxos 不适用于构建系统或用于教学。鉴于一致性在大规模软件系统中的重要性,我们决定尝试设计一个能够替代 Paxos 的更好的一致性算法。这项研究的成果便是 Raft。

4 易于理解的设计

在设计 Raft 时我们有几个目标:

在设计 Raft 的过程中,我们需要在大量的备选方案中做出选择。在这些情况下,我们基于易理解性权衡备选方案:解释备选方案时的难度(例如,方案的状态空间有多复杂,是否有些许微妙的含义),读者完整的理解方案的方法和含义的难度。

我们意识到这种分析方式有很强的主观性,但是我们使用了两项普适的技术来解决这个问题:

上一篇 下一篇

猜你喜欢

热点阅读