摘要:
1、研究背景(Context):
随着分布式体系结构的出现,越来越多的分布式应用将面临数据一致性问题。目前,除ZooKeeper之外,尚未有一个成熟、稳定的解决方案被应用到大型系统上。作为最成熟、稳定和公认的解决方案,ZooKeeper的核心协议是Zab协议。与Zab相似的复杂的Raft协议,已经有很多研究来帮助我们理解它的复杂性和正确性,但是对Zab的研究却很少。Zab尚未被从一阶逻辑和集合论的形式化方法角度分析整个设计的正确性,且对于工程师来说很难更直观地理解其复杂的过程。
2、目的(Objective):
我们的研究目标是通过类似的协议的异同,帮助理解Zab协议的过程;再利用一阶逻辑和集合论的形式化角度规约Zab协议;最后通过相应的模型检查器来验证其设计中应满足的基本性质,从而补充一个关于Zab协议形式化的基础研究,帮助大家进一步理解该协议。
3、方法(Method):
通过对比类似的协议Raft、Paxos和Zab之间的异同,以帮助我们掌握这些复杂的协议过程,再使用Lamport提出的TLA+来帮助我们从一阶逻辑和集合论的角度理解Zab协议,并通过相应的模型检查器TLC来验证其设计中应满足的基本性质,从而得出结论。
4、结果(Result&Findings):
由于本文的重点在于规约和理解协议,因而只验证了三个基本但关键的性质,包括(1)领导者节点每个周期的唯一性(2)所有的提交事务必在所有跟随节点中。(3)提出但未提交的事务只在领导者节点上。验证结果符合设计的预期,这说明Zab协议的设计满足其规约的正确性,且通过TLA的规约,可以直观帮助工程师理解其过程。文章的局限在于尚未对其公平性以及更多深层次的数据一致性相关的性质进行更深层的研究。
5、结论(Conclusions):
我们对Zab协议、Raft协议和Paxos协议进行了比较,更好地理解了Zab协议的设计。借助TLA+的一阶逻辑和集合论,对Zab协议的工作流程进行了尽可能详细、准确的描述。我们还对流程进行了建模,并根据规范提取了三个基本但关键的属性。然后,我们在TLA+的IDE中使用了模型检验器TLC对它们进行了验证。最终,通过结果,我们可以看到这三个基本性质是满足的。这项基础研究可以作为Zab协议在形式化方法角度的一个补充。此外,该方法不仅可以帮助理解一些复杂的协议,而且可以发现设计的早期阶段的错误。