最近在看raft算法,学习之余写篇文章将自己的一些理解记录下来,供大家参考。
一.前言
分布式系统的诞生,解决了许多企业应用的问题,但也有许多新的问题随之而来,多个服务之间如何保持数据一致性的问题便是其中之一,问题的产生总会有解决办法,经典的Paxos算法就是解决这一问题的,但由于Paxos算法太过复杂,实现起来也有难度,所以实际运用的系统比较少(如Chubby ,实现了Paxos算法,但与原始的Paxos算法有所差异,只能称为类 Paxos(Paxos-like),没有完整的理论支持,便有可能带来无法预知的问题);
Chubby 作者如此评价Paxos算法:
在Paxos算法描述和实现现实系统之间有着巨大的鸿沟。最终的系统往往建立在一个还未被证明的协议之上。
为可理解性而设计,这是斯坦福大学提出Raft算法的初衷,与Paxos算法相比,Raft算法的性能与作用和Paxos算法相同,但Raft算法更容易理解和实现。
二.问题模型
在说Raft算法之前,先说一下拜占庭将军问题,这是所有分布式一致性算法的模型,可以说拜占庭将军问题中囊括了所有分布式系统中可能出现数据一致性问题(个人理解)。
曾经的拜占庭国土辽阔,为了抵御来自各个方向的敌人,军队之间分隔很远,他们之间只能通过信使互相传递消息。一场新的战役即将爆发,有5支拜占庭军队要共同进退,5个