zookeeper 内部原理

一、请求、事务和标示符

1、读操作请求:zookeeper 服务器会在本地处理请求,所以zookeeper在处理以只读请求为主要负载时,性能会很高,我们还可以增加更多的服务器到zookeeper集群中,这样可以处理更多的读请求。

2、写操作请求:zookeeper 服务器会将请求转发给leader, leader执行相应的请求,并形成状态的更新,称为一个事务。例如:一个客户端提交了一个对/z节点的setData请求,setData将会改变该znode节点数据信息,并会增加该节点的版本号。

3、zookeeper 集群以事务方式运行,并确保所有的变更操作以原子方式被执行,同时不会被其他事务所干扰。事务是幂等的

4、当leader 产生一个事务,就会为该事务分配一个标示符(zookeeper 会话id),可以在leader所指定的follower执行。

二、群首选举

1、设置leader的目的是为了对客户端所发起的zookeeper状态变更进行排序,包括 create 、setdata,delete操作。 leader 将每一个请求转换为一个事务,将这些事务发送follow,确保集群按照群首确定的顺序接受并处理这些事务。

2、每个服务器启动后进入looking状态,这些服务器会进行通信选举一个群首,在选举过程中胜出的服务器进入leading状态。而集群中其他服务器将进入follering状态。

当一个服务器进入looking状态,就会发送向集群中每个服务器发送一个通知消息,该消息中包括该服务器的投票信息,投票信息中包含 : 服务器标示符(sid)和最近执行的事务的(zxid)信息。

投票规则:

1:  获得其他服务器的投票信息(voteid,votezxid)。

2:  如果(voteZxid > myZxid)或 (votezxid = myzxid 且 voteID > mysid ),保留当前的投票信息。

3:  否则,修改自己的投票信息

三、状态更新的广播协议

当接受到一个写请求操作后,follow会将请求转发给群首,群首将探索性地执行该请求,并将执行结果以事务的方式对状态更新进行广播。通过(Zab 协议)

1、Zab (zookeeper 原子广播协议) :  

广播模式 : leader向follower发送一个消息,当一个follower 接受到消息后,回响应leader一个ack消息,leader 会发送消息通知follower 提交。

恢复模式: leader 崩溃时,进入恢复模式。

四、观察者 : 另一类服务器

1、观察者不参与选举过程 

2、作用: 提高读请求请求的可扩展性,可以进行跨多个数据中心的部署

五、服务器与会话 : 

客户端和zookeeper服务器的连接,zookeeper中的会话叫session,客户端靠与服务器建立一个tcp的长连接来维持一个session,客户端在启动的时候首先会与服务器建立一个tcp连接,通过这个连接,客户端能够通过心跳检测和服务器保持有效的会话,也能向zk服务器发送请求并获得响应。

六、服务器与监视点 (事件监听器): 服务器实现了监视点管理器,它负责管理当前被注册的监视点列表,并负责触发。

七、客户端: 在客户端库中(zookeeper 和 clientcnxn)

八、序列化: 对于网络传输和磁盘保存的序列化的消息和事务。 zookeeper使用了hadoop中的jute来做序列化的

九、ACL策略

1: create 创建子节点的权限

2:    read  获得子节点数据和子节点列表的权限

3:    write 更新节点数据的权限

4:    delete 删除子节点的权限

5:    admin  设置节点acl的权限

猜你喜欢

转载自kayak2015.iteye.com/blog/2299810