吊打面试官之zookeeper原理

1.Zookeeper特性分析

全局一致性、可靠性、顺序性、数据更新原子性、实时性
1.全局一致性
每一个server保存一份相同的数据副本,无论连接那个server,显示的数据都是一致的,这是最重要的特征。
2.可靠性
如果一台服务器接受,那么其他服务器接受
3.顺序性
按照顺序执行
4.数据更新原子性
一次更新要么成功,要么失败,不存在中间状态
5.实时性
zookeeper保证客户端在一个时间范围内获取服务器的更新信息,或者服务器失效信息

2.Zookeeper之分布式锁机制

zookeeper的锁分为两种:独占锁、控制时序锁

独占锁
1.要求所有应用首先去zk上创建节点/xxx
节点要求:临时节点、非序列化节点
2.谁创建成功,就获得文件访问权限
3.操作完成 断开zk连接
4.其他应用如果需要操作这个文件,就监听这个目录是否存在。
回到(1)

控制时序锁
1.要求所有应用首先去zk上创建节点/xxx000n 。节点要求:临时节点、序列化节点
2.按照序列号进行访问文件,序列小的先访问
3.操作完成 断开zk连接
4.其他应用操作这个文件,按序列号进行

3.集群选举

(1)全新选举

1、第一个节点启动,给自己投一票
2、然后和别的启动节点比较,发现没有其他节点,进入 looking(竞选状态)
3、第二个节点启动,给自己投一票,然后和第一个节点比较myid,数字大的,变成looking,小的那票给大的;小的变following。

当票数大于半数时,选举结束,节点变成leading之后的节点myid大于leading也没有办法,直接变成 following。

(2)非全新选举

对于运行正常的zookeeper集群,中途有节点down掉,需要重新进行选举时,选举过程就需要加入数据Id、服务器Id、逻辑时钟

数据Id:
数据的version就大,数据每次更新都会更新version

服务器Id:
就是我们要配置的myid

逻辑时钟:
这个值从0开始递增,每次选举对应一个值。如果
在同一选举中,这个值是一致的

这样选举的标准就变成:
1.逻辑时钟小的选举结果被忽略,重新投票
2.统一逻辑时钟后,数据id大的胜出
3.数据id相同的情况下,服务器id大的胜出

根据这个规则选出leader

4.ZooKeeper的工作原理

在zookeeper的集群中,各个节点共有下面3种角色和4种状态:

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

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

每个Server在工作过程中有4种状态:

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

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

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

OBSERVING:observer的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。

5.Leader和follower的工作流程

1.Leader工作流程

Leader主要有三个功能:

1.恢复数据;

2.维持与follower的心跳,接收follower请求并判断follower的请求消息类型;

3.follower的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。

PING消息是指follower的心跳信息;REQUEST消息是follower发送的提议信息,包括写请求及同步请求;

ACK消息是follower的对提议的回复,超过半数的follower通过,则commit该提议;

REVALIDATE消息是用来延长SESSION有效时间。

2.Follower工作流程

Follower主要有四个功能:

1.向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);

2.接收Leader消息并进行处理;

3.接收Client的请求,如果为写请求,发送给Leader进行投票;

4.返回Client结果。

Follower的消息循环处理如下几种来自Leader的消息:

1.PING消息:心跳消息

2.PROPOSAL消息:Leader发起的提案,要求Follower投票

3.COMMIT消息:服务器端最新一次提案的信息

4.UPTODATE消息:表明同步完成

5.REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息

6.SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

猜你喜欢

转载自blog.csdn.net/qq_42706464/article/details/108827879