顾小苑
摘要:本文对比探讨了分布式锁服务当中的Chubby和ZooKeeper系统,运用对比分析法,分别从系统所具备的特性,采用的一致性算法,客户端与主服务器之间的通信等几个方面作了对比。分析得出,作为商业的Chubby系统注重可靠性和可用性,而作为开源项目的ZooKeeper系统注重简单性和松耦合交互。两种服务在特性、通信等方面不同,但都采用Paxos一致性算法。
关键词:分布式锁 Chubby ZooKeeper
中图分类号:TP316.7 文献标识码:A 文章编号:1007-9416(2016)08-0081-02
在大型分布式文件系统中,系统必须具备高可用性、高可靠性以及数据一致性。为解决系统的可用性和可靠性,系统采用多副本的形式。但同时,也带来系统数据的一致性问题,为解决分布式环境下数据的一致性问题,Google云系统并没有直接开发一个直接实现包含了解决一致性问题的Paxos算法函数库,而是在Paxos算法的基础上设计了一个全新的锁服务Chubby。Chubby中涉及的一致性问题都由Paxos算法解决。Zookeeper是Hadoop的正式子项目,是一种用于提供配置信息服务、命名服务、分布式同步和组服务等的集中式协调系统。Zookeeper不仅解决了分布式锁的问题,其在本质上是一种分布式的小文件存储系统。
1 Chubby和ZooKeeper各自的特性对比
Chubby作为商业的云计算系统,一是系统必须具备高可用性和高可靠性,在保证此目标的基础上再考虑系统的吞吐量和存储能力;二是高扩展性:将数据存储在价格较为低廉的RAM,支持大规模用户访问文件;三是支持粗粒度的建议性锁服务:具备建议性的锁能够提高系统的性能;四是支持通报机制和支持缓存机制。而作为开源项目的ZooKeeper服务,其具有的特性与Chubby系统不同,一是简易:ZooKeeper的核心就是一个精简的文件系统,它提供一些简单的操作以及一些附加的抽象;二是易表达:ZooKeeper的原型是一个丰富的集合,它们是一些已建好的块,可以用来构建大型的协作数据结构和协议,例如:分布式对垒,分布式锁以及一组对等体的选举;三是松散耦合交互:ZooKeeper的交互支持参与者之间并不了解对方。
Chubby和ZooKeeper两种系统都提供分布式锁服务,但是两种系统的应用环境不同,系统设计的侧重点也不同,两种系统具有不同的特性。
2 Chubby和ZooKeeper中的一致性算法对比
2.1 Chubby中的Paxos算法
Paxos算法[1]是一种基于消息传递的一致性算法,用于解决分布式系统中的一致性问题。在paxos算法中,节点被划分为三种类型:proposers、acceptors和learners。其中proposers提出决议,acceptors批准决议,learners获取并使用已经通过的决议。Paxos算法在满足约束条件的基础上,可以将决议的通过分成如下两个阶段。一是准备阶段:proposers选择一个提案并将它的编号设为n,然后将它发送给acceptors中的一个“多数派”,acceptors收到后,如果提案的编号大于它已经回复的所有消息,则acceptors将自己上次的批准回复给proposers,并不再批准小于n的提案。二是批准阶段:当proposers接收到acceptors中的这个“多数派”的回复后,就向回复请求的acceptors发送accept请求,在符合acceptors乙方的约束条件下,acceptors收到accept请求后即批准这个请求。
为了减少决议发布过程中的消息量,acceptors将这个通过的决议发送给learners的一个子集,然后由这个子集中的learners去通知其他的learners。一般情况下,以上的算法过程就可以成功解决一致性问题,但是也有特殊情况,即陷入死锁后重新选举出一个president,仅允许president提出议案。
2.2 ZooKeeper中的 Zab协议
Zookeeper是以节点树(znode树)[2]组织的,ZooKeeper的设计思想是:保证对znode树的每一次修改都复制到ensemble(类似“多数派”)中的大部分机器上去。如果机器中小部分出故障了,那么至少有一台机器将会恢复到最新状态。其他的则保存着副本,直到恢复到最新状态。基于此,ZooKeeper采用以下设计保证数据的一致性流[3]。即顺序的一致性、原子性、单系统映像、容错性、合时性。
Chubby系统中所有的一致性问题都采用一致性算法解决,而ZooKeeper系统虽然应用Zab协议,并且在协议中运用技术保证数据的一致性流,但是在技术的具体实现上依然采用Paxos一致性算法。
3 客户端与服务器之间的通信过程对比
3.1 Chubby系统的通信协议
客户端和主服务器之间的通信是通过KeepAlive握手协议来维持的,KeepAlive握手协议通信过程如图1所示。
3.2 ZooKeeper中的会话状态
ZooKeeper客户端与ensemble表中的服务器尝试连接,一旦与Zookeeper服务器连接成功,服务器会创建与客户端的一个新的对话[4]。一个对话的生命周期中用不同的状态来表示ZooKeeper对象[5]的转变。其状态事物图如图2所示。
4 结语
本文重点分析比较了Chubby和ZooKeeper系统所具备的特性,采用的一致性算法,客户端与主服务器之间的通信等几个方面,尤其对两种系统具有的特性和同步算法进行了重点分析。研究了分布式锁服务中两种系统的异同点,得出:在分布式锁服务中,不同的云计算系统采用的一致性算法相同,但是应用于不同环境的分布式锁服务的设计特性和实现过程相异。
参考文献
[1]刘鹏,等.云计算(第二版)[M].北京:电子工业出版社,2011年:31-35.
[2]何慧虹,王勇,史亮.分布式环境下基于ZooKeeper服务的数据同步研究[J].信息网络安全,2015,09:227-230.
[3]李汝光,赵俊.基于ZooKeeper的分布式缓存的设计与实现[J].绵阳师范学院学报.2011(11).
[4]Tom White著,周傲英等译.Hadoop权威指南(中文版)[M].北京:清华大学出版社,2010年:394-416.
[5]刘芬,王芳,田昊.基于Zookeeper的分布式锁服务及性能优化[J].计算机研究与发展,2014,S1:229-234.