一、请求、事务和标示符
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的权限