分布式系统主要的两个重要的方面是:// TODO 打磨 可扩展性和容错。

很多容错问题(不包括拜占庭问题)都可以通过复制来解决,但是复制引入了多个副本一致性问题。共识算法是解决一致性问题的一种方法。

共识算法本质上是基于复制状态机器。这里需要简单了解下什么是复制状态及机。

复制状态机,顾名思义:“复制了多个副本的状态机” 。 这里的状态机指的是确定有限状态机(Deterministic Finite Automaton, DFA)。有限好理解,即状态机的所有状态是有限的。确定指的是某个状态经过一个事件变成另一个确定的状态。也就是说状态机的下一个状态只跟状态机当前的状态和事件有关。这里举个例子:给 1这个状态做一个操作“加1”,得到的状态是确定的,即 2。而对。。// TODO 非确定状态机

Paxos是Lamport图灵奖大神设计的分布式共识算法,曾一度成为共识的同义词,但是也因其晦涩难懂和不易实现而“臭名昭著”。特别是很多实现最终变成了另一种未被证明过的共识算法。所以作者设计Raft的主要目标是易于理解和易于实现,其中可理解性为最最重要。很多设计选项最终都倾向选择可理解性。

Raft论文中不仅详细描述了Raft基本算法,还对成员变更、日志压缩、客户端交互等扩展内容进行了详细的讨论,极大减少了实现者的设计工作。 作者对设计可理解性用到的方法论进行了总结,主要包含以下两种:

1、问题分解(decomposition )。Raft分为:Leader Election 、Log Replication 、Safety,每一块可以单独解决、解释和理解。

2、简化状态空间,减少状态个数,消除不确定性(Random Election timeout除外,虽然增加了不确性,但是简化了状态空间,所以最终有更好的可理解性)。

这些方法是通用的解决复杂问题的方法,聪明人总能把复杂问题简单化。