集群角色、会话、数据节点、版本、watcher、ACL权限控制
集群角色:
Leader,Follower,Observer
Leader服务器是整个ZooKeeper集群工作机制中的核心。
Follower服务器是ZooKeeper集群状态的跟随者。
Observer服务器充当一个观察者。
Leader、Follow设计模式
Observer设计模式。
会话:
客户端和ZooKeeper服务器之间的连接,ZooKeeper中的会话叫Session,客户端依靠与服务器建立一个TCP长连接来维持一个Session,客户端在启动的时候首先会与服务器建立一个TCP连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能向ZK服务器发送请求并获得响应。
数据节点:
ZooKeeper中的节点有两类:
1.集群中的一台机器成为一个节点;
2.数据模型中的数据单元Znode,分为持久节点和临时节点
ZooKeeper的数据模型是一棵树,树的节点就是Znode。
版本:
version:当前数据节点数据内容的版本号。
cversion:当前数据节点子节点的版本号。
aversion:当前数据节点ACL变更版本号。
悲观锁和乐观锁:
悲观锁又称悲观并发锁,是数据库中非常严格的锁策略,具有强烈的排他性,能够避免不同事务对同一数据并发更新造成的数据不一致性,在上一个事务没有完成之前,下一个事务不能访问相同的资源,适合数据更新竞争非常激烈的场景。
乐观锁:悲观锁认为事务访问相同数据的时候一定会出现相互干扰,所以简单粗暴地使用排他访问的方式,而乐观锁认为不同事务访问相同资源是很少出现相互干扰的情况,因此在事务处理期间不需要进行并发控制,当然乐观锁也是排它锁,它还是有并发控制。对于数据库通常的做法是在每个表中增加一个version版本字段,事务修改数据之前先读数据,当然版本号也顺势读取出来,然后把这个读取出来的版本号加入到更新语句的条件中。
Watcher:监听器
ZooKeeper允许用户在指定节点注册一些Watcher,当数据节点发生变化时,ZooKeeper服务器会发送这些变化给感兴趣的客户端。
ACL权限控制:
Access Control Lists的简写,ZooKeeper采用ACL策略来进行权限控制。有以下权限:
CREATE:创建子节点的权限
READ:获取节点数据和子节点列表的权限
WRITE:更新节点数据的权限
DELETE:删除子节点的权限
ADMIN:设置节点ACL的权限