Zookeeper中的基本概念

集群角色

一般来说,有以下的角色:Leader,Follower,Observer

Leader服务器是整个Zookeeper集群工作机制中的核心 
Follower服务器是Zookeeper集群状态的跟随者
Observer服务器充当一个观察者的角色
 
一般来说,会用到以下的俩种的设计模式:
Leader,Follower 设计模式

Observer 观察者设计模式

会话

会话是指客户端和ZooKeeper服务器的连接,ZooKeeper中的会话叫Session,客户端靠与服务器建立一个TCP的长连接

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

数据结点

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

我们看下图:

Zookeeper中的基本概念_第1张图片

版本

在写代码的时候会使用到版本,当代码出现问题时,可以回滚到先前的版本。但是zookeeper的版本的含义和
SVN,GIT中的版本含义不一样。
zookeeper中的版本是用来记录节点数据,还有是可以记录节点的子节点列表,还有就是权限信息的修改次数
 如果一个节点的 version是1,表示的是从创建以来,只被修改了一次。可以利用版本来实现分布式中的锁服务。

如图:

版本类型

说明

version

当前数据节点数据内容的版本号

cversion

当前数据节点子节点的版本号

aversion

当前数据节点ACL变更版本号

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

相比悲观锁,乐观锁使用的场景会更多,悲观锁认为事务访问相同数据的时候一定会出现相互的干扰,所以简单粗暴的使用排他访问的方式,而乐观锁认为不同事务访问相同资源是很少出现相互干扰的情况,因此在事务处理期间不需要进行并发控制,当然乐观锁也是锁,它还是会有并发的控制!对于数据库通常的做法是在每个表中增加一个version版本字段,事务修改数据之前先读出数据,当然版号也顺势读取出来,然后把这个读取出来的版本号加入到更新语句的条件中,比如,读取出来的版本号是1,我们修改数据的语句可以这样写,update 某某表 set 字段一=某某值 where id=1 and version=1,那如果更新失败了说明以后其他事务已经修改过数据了,那系统需要抛出异常给客户端,让客户端自行处理,客户端可以选择重试。那么zookeeper中的版本有类似的应用。

watcher

事件监听器
ZooKeeper允许用户在指定节点上注册一些Watcher,当节点数据节点发生变化的时候,ZooKeeper服务器会把这个变化的通知发送给感兴趣的客户端
 
在下面的图中,俩个client都象zookeeper注册了事件监听器。当zookeeper中相关节点的数据发生了

变化的时候,那么zookeeper会把这个变化发送给相应的客户端。

Zookeeper中的基本概念_第2张图片

ACL权限控制

 一个ZooKeeper 的节点(znode)存储两部分内容:数据和状态,状态中包含ACL信息。创建一个znode 会产生一个ACL 列表
(1)列表中每个ACL 包括:
 ①权限:perms
 ②验证模式:scheme
(2)ZooKeeper 提供了如下几种验证模式:
 ①Digest:Client端由用户名和密码验证,譬如user:pwd
 ②Host:Client端由主机名验证,譬如localhost
 ③Ip:Client端由IP地址验证,譬如172.2.0.0/24
 ④World:固定用户为anyone,为所有Client端开放权限
 (3)权限许可集合如下,注意的是,exists操作和getAcl操作并不受ACL许可控制,因此任何客户端可以查询节点的状态和节点的ACL。ACL是Access Control Lists 的简写, ZooKeeper采用ACL策略来进行权限控制,有以下五种权限:
CREATE:创建子节点的权限
READ:获取节点数据和子节点列表的权限
WRITE:更新节点数据的权限
DELETE:删除子节点的权限
ADMIN:设置节点ACL的权限
(4)Znode ACL 权限用一个int 型数字perms 表示,perms 的5 个二进制位分别表示:
setacl、delete、create、write、read。
例如下面的例子:
 ① adcwr=0x1f
 ② ----r=0x1
 ③ a-c-r=0x15
 
这些权限管理类似信息系统中的权限管理。一个zk集群可能会服务于很多的业务,zk中的节点会保存很多信息,这些节点信息可能只会对相关的人员开放,保证数据的安全。
 




你可能感兴趣的:(zookeeper)