In Search of an Understandable Consensus Algorithm
6.5840/6.824 Lab与笔记汇总
本文为笔者阅读论文In Search of an Understandable Consensus Algorithm过程中的随笔记录,较为随意,希望能为大家提供一点理解上的帮助
1 Introduction
一致性算法允许一组机器作为一个连贯的群体工作,可以在一些成员的失败时仍保持正常运行。Paxos一直占着一致性算法的主导地位,但是它非常难以理解,而且为了支持实际系统,它的架构需要进行复杂的修改。
本文提出的Raft则是一种容易理解的一致性算法。Raft采用了特殊的技术来改善可理解性,包括分解(Raft将一致性的关键元素拆分为leader election、log replication和safety)和状态空间缩减(Raft降低了不确定性的程度以及服务器相互不一致的方式)
Raft在许多方面与现有的一致性算法相似,但也有一些新颖的特点:
- Strong leader:Raft使用比其他一致性算法更强的领导形式,比如日志条目只从leader流向其他服务器
- Leader election:Raft使用随机计时器来选择leader
- Membership changes:Raft的更改集群中服务器集的机制使用了一种新的联合一致性方法,其中两个不同配置的大多数服务器会重叠,这允许集群在配置更改期间继续正常运行
2 Replicated state machines
复制状态机用于在分布式系统中提供容错。复制状态机通常使用replicated log实现,如下图。每个服务器都存储一个log,其中包含一系列命令,服务器中的状态机会按顺序执行这些命令。由于每个log都以相同的顺序包含相同的命令,因此每个状态机都会处理相同的命令序列,最终的输出也相同。
一致性算法的工作之一就是保持replicated log的一致性,server中的一致性模块会从客户端接收命令,并将命令追加到log中。它会与其他server的一致性模块交互,确保每一个log的命令序列都一致。正确复制命令后,每个server的状态机都会按照log中的命令顺序处理它们,然后将输出返回给客户端。
实际系统中的一致性算法通常具有以下属性:
- 它们会确保在非拜占庭条件(每个节点均遵循协议)下的安全性,包括网络延迟、分区和丢包、重复和重新排序
- 只要集群中的大多数服务器都可以运行并且可以相互通信以及与客户端通信,它们就可以正常工作
- 它们不依赖于时间来确保日志的一致性
- 只要大多数集群中的服务器响应了单轮远程过程调用,命令就可以完成;少数慢速服务器不影响整体系统性能
3 What’s wrong with Paxos?
第一个缺点是Paxos非常难以理解。
Paxos的第二个问题是它没有为构建实际系统提供良好的基础。Lamport的描述主要是关于single-decree的Paxos;他勾勒了multi-Paxos的可能方法,但许多细节被遗漏了。
结论就是,Paxos既没有为系统构建也没有为教育提供良好的基础。
4 Designing for understandability
Raft使用了两种普遍适用的技术,第一种是众所周知的问题分解方法(只要可能,就将问题分解成可以相对独立地解决、解释和理解的单独部分),如Raft中,分离了leader election、log replication、safty和membership changes。第二种方法是通过减少要考虑的状态数量来简化状态空间,使系统更加连贯,并尽可能消除不确定性。
尽管在大多数情况下,我们试图消除非确定性,但在某些情况下,非确定性实际上提高了可理解性。特别是,随机方法引入了非确定性,但它们倾向于通过以类似的方式处理所有可能的选择来减少状态空间。本文使用随机化来简化Raft的leader election算法。