Zookeeper简介,原理及应用

2019-11-12

Zookeeper简介,原理及应用

之前在实习的时候用到了Elasticsearch,看了看它内部的实现原理,发现ES自己实现了一套分布式一致性解决方法,觉得还挺有意思的。学习过程中很多资料都提到了Zookeeper,想起来大三的时候就在hadoop里看到的Zookeeper组件但是一直不知道它是干嘛的,最近不是特别忙就研究一下Zookeeper。

简介

ZooKeeper是一个高可用的一致性协调框架,用来为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。这些功能实现起来非常复杂,但Zookeeper可以提供给开发者性能高效,功能稳定的服务。

Zookeeper原理

ZooKeeper为了高可用的一致性协调,实现了一种通用的一致性算法ZAB(ZooKeeper Atomic Broadcast)

ZAB是在Fast Paxos算法基础上进行了扩展改造而来的,另一种一致性算法Raft也和ZAB非常类似,所以为了弄懂Zookeeper实现原理,我们比较这三种分布式一致性算法(Paxos,raft和ZAB)的异同:

Paxos

首先,我们来介绍一下Paxos算法,Lamport大神在1990年提出的这个基于消息传递且具有高度容错特性的一致性算法,他提出了三种Paxos算法:Basic Paxos,Multi Paxos和Fast Paxos。Basic Paxos只能对一个值形成决议,决议的形成至少需要两次网络来回,所以一般只用来进行理论研究;Multi Paxos和Fast Paxos则对它进行一系列的改动,使更适合直接应用在实际项目中。

Basic Paxos

Paxos算法运行在允许宕机故障的异步系统中,不要求可靠的消息传递,可容忍消息丢失、延迟、乱序以及重复。它利用大多数 (Majority) 机制保证了2F+1的容错能力,即2F+1个节点的系统最多允许F个节点同时出现故障。

Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner):

Paxos算法通过一个决议分为两个阶段:

Multi Paxos

原始的Paxos算法只能对一个值进行决议,而且每次决议至少需要两次网络来回,在实际应用中可能会产生各种各样的问题,所以不适合直接应用在实际工程中。因此,Multi Paxos解决了这一问题,可以连续确定多个值并提高效率,基于Basix Paxos主要做了如下改进:

所以Multi Paxos的实际过程是:首先进行Leader选举,利用Basic Paxos来实现。选出Leader后,只由Leader来提交Proposal,如果Leader出现宕机,则重新选举Leader,在系统中仅有一个Leader可以提交Proposal。

Multi Paxos通过改变Prepare阶段的作用范围至后面Leader提交的所有实例,从而使得Leader的连续提交只需要执行一次Prepare阶段,后续只需要执行Accept阶段,将两阶段变为一阶段,提高了效率。

Fast Paxos

在之前提到的Paxos协议中,消息最后到达Learner一般都要经历 Client–>Proposer–>Acceptor–>Learner 总共3个步骤;为了更快的让消息到达Learner,可以跳过Proposer这一步,直接将请求发送给Accepter,由Leader在中间进行检查。

ZAB

基于Paxos,Zookeeper实现了ZAB算法,个人感觉ZAB和Multi Paxos更像一点。

ZAB的算法流程为:

Raft

Raft算法是因为该作者觉得Paxos太难以理解了,所以就提出了Raft,一定程度上也可以看作是Paxos的一种改进。它强化了leader的地位,把整个协议可以清楚的分割成两个部分,并利用日志的连续性做了一些简化: (1)Leader在时。由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。

算法演示:(这个演示很简单明白,就不用文字讲了)

Raft

主要区别

由于Paxos偏理论,Raft和ZAB又都是基于他实现的,他们在整体思路上有一些地方还是挺像的,但细节上有些不同,所以我们主要比较这两种算法,下面是我总结的几个区别:

Zk基本特性

Zookeeper在设计了一套分布式一致性算法后,提供了一系列的基本特性,供开发者使用:

Zk主要应用

点击查看评论

所有文章