zookeeper 是一个apache 开源的分布式协调服务,具有如下分布式一致性特性:
1.顺序一致性:从同一个客户端发起的事务请求,最终会严格按照发起顺序应用到zookeeper中去
2.原子性:所有事务请求的处理结果在整个集群的所有节点上是一致的
3.单一视图:客户端连接zookeeper集群中的任何节点,看到的数据模型都是一致的
4.可靠性:被成功执行的事务请求所引起的服务器端状态变化会被一直保留下来,除非有别的事务对其进行了修改
5.实时性:最终一致性
一般的主要用途:配置管理、发布订阅、分布式锁、负载均衡等功能
zookeeper 技术细节:
1. 数据模型:类似于unix文件系统的树状层次结构,每一个节点称为znode,znode上可以保存数据,同时也可以创建子节点
2.事务id:对于每一个事务请求,zookeeper会为其分配一个全局唯一的事务id zxid,一般为64位的数字。
3.节点特性:zookeeper中,节点类型分为临时节点、永久节点、顺序节点,在节点创建过程中可以随意组合,组合后的节点类型为以下4种:1
持久节点
持久顺序节点
临时节点:该节点的生命周期与创建节点 的session有关,session失效,该节点也就会被自动删除
临时顺序节点:
常用命令:
1. create 创建节点
2.get /path :获取对应path的数据和状态信息
cZxid:创建节点的事务id
mZxid:节点最后一次被更新的事务id
pZxid:该节点的子节点列表最后一次被更新的事务id,这里需要注意 子节点内容变更并不影响pzxid
cversion:当前数据节点子节点的版本号
aclVersion:当前数据节点acl变更版本号
dataVersion:当前节点数据内容的版本号
zookeeper 中version版本的概念用来控制分布式系统中数据的原子性操作,例如对于dataVersion来说,每一个更新数据的请求中携带的版本号和当前数据节点的最新版本号做比对,如果版本不匹配,则抛出异常,反之,则更新成功,版本加1
zookeeper 提供watch机制,用以对感兴趣的节点或者操作增加watcher监听,在对应事件发生时,返回一个事件通知,zookeeper中的watcher接口定义了一个标准的事件处理器,定义了事件通知的相关逻辑,包含keeperState、EventType 两个枚举类
ACL:访问控制列表,用以实现对数据节点的权限控制,包含 权限模式(ip、digest、world、super)、授权对象ID、权限(C、A、R、W、A 5种)
权限模式和授权对象的对应关系
权限模式 授权对象ID
ip 一个ip地址或者ip段,例如 192.168.1.2 或者192.168.0.1/24
digest 自定义,通常是username:base64(sha- 1(username:password)),计算方式参见DigestAuthenticationProvider.generateDigest 方法
world anyone
super 与digest模式一致
例如:digest 模式权限控制例子