ZooKeeper中的基本概念

ZooKeeper中的基本概念

  • 集群角色
  • 会话
  • 数据节点
  • 版本
  • watcher
  • ACL权限控制

集群角色

Leader,Follower,Observer

Leader服务器是整个Zookeeper集群工作中的核心
Follower服务器是Zookeeper集群状态的跟随者
Oberver服务器充当一个观察者的角色

Leader,Follower 设计模式
Observer 观测者设计模式

会话

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

节点

zk中节点有两类

  1. 集群中的一台机器称为一个节点
  2. 数据模型中的数据单元Znode,分持久节点和临时节点
    Zookeeper的数据模型是一棵树,树的节点就是Znode,Znode中可以保存信息

+----------+
| / |
| |
+----+-----+
|
|
|
| +-----------------+
| | /NameService |
+------------+ |
| | |
| +----+------------+
| |
| |
| | +------------------+
| | | |
| +------+ /Service1 |
| | | |
| | +------------------+
| |
| | +------------------+
| | | |
| +------+ /service2 |
| | |
| +------------------+
|
| +------------------+
| | |
+------------+ /Apps |
| | |
| +------------------+
|
|
|
|
|
| +------------------+
| | |
+------------+ /configure |
| |
+------------------+

版本

版本类型 说明
version 当前数据节点数据内容的版本号
cversion 当前数据节点子节点的版本号
aversion 当前数据节点ACL变更版本号

悲观锁和乐观锁
悲观锁又叫悲观并发锁,是数据库中一种非常严格的锁策略,具有强烈的排他性,能够避免不同事物对统一数据并发更新造成的数据不一致性,在上一个事务没有完成之前,下一个书屋不能访问相同的资源,适合数据更新竞争非常激烈的场景

乐观锁使用的场景会更多,悲观锁认为事务访问相同数据的时候一定会出现相互干扰,所以简单粗暴的使用排他访问的方式,而乐观锁认为不同事物访问相同资源很少出现相互干扰的情况,因此在事务处理期间不需要进行并发控制,当然乐观锁也是锁,他还是有并发的控制,对于数据库我们通常的做法是在每个表中增加一个version版本字段,事务修改数据之前先读出数据,当然版本号也顺势读出来,然后把这个读取出来的版本号加入到更新语句的条件中