ZooKeeper分布式协调服务

一. 什么是zookeeper

ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。后来,Apache ZooKeeper 成为 Hadoop,HBase 和其他分布式框架使用的有组织服务的标准。

二. zookeeper能提供哪些功能

1. 统一配置管理

      创建一个配置Node, 所有客户端订阅Node的变化,并处理因变化推送的数据;

2.统一命名服务

www.abc.com域名下多台机器IP保存在Node当中,客户端订阅该节点,可以获取最新的IP列表;

3. 分布式锁

使用临时顺序节点实现; A、B、C三个客户端都去创建TEST节点, 节点ZXID最小者即可获取到锁,获取到锁查的客户端处理完毕后,关闭连接后,临时节点删除; 次ZXID小者获取到锁,如此类推;

4. 集群管理

使用临时节点创建; A、B、C客户端去创建临时节点A1, B1, C1,三个客户端监听他们共同的父节点GroupMember; 三个客户端任意一个宕机,其他两个节点即可感知到;

三. zookeeper有哪些角色

1. leader(领导者): 负责进行投票的发起和决议,更新系统状态

2. learner(学习者):

    A. follower(跟随者): 用于接受客户端请求并想客户端返回结果,在选主过程中参与投票

   B.observer(观察者):可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

3. client(客户端):请求的发起方;

四. zookeeper工作原理

1. Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

2.为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

3. 每个Server在工作过程中有三种状态:

LOOKING:当前Server不知道leader是谁,正在搜寻

LEADING:当前Server即为选举出来的leader

FOLLOWING:leader已经选举出来,当前Server与之同步

五. 读写机制

1. 多个server组成的集群

2. 一个leader,多个follower

3. 每个server保存一份数据副本

4. 全局数据一致

5. 分布式读写

6. 写请求由leader实施, follower收到写请求要转发给leader;

六。Zookeeper 的保证

1. 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

2. 数据更新原子性,一次数据更新要么成功,要么失败

3. 全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的

4. 实时性,在一定事件范围内,client能读到最新数据

你可能感兴趣的:(ZooKeeper分布式协调服务)