相关 CAP 理论一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能
CAP 理论指:
一致性(Consistency),数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本可用性(Availability),每次请求都能获取到正确的响应,但是不保证获取的数据为最新数据。分区容错性(Partition tolerance),分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务
对一个分布式计算系统来说,不可能同时满足以上三点,最多只能同时满足这三项中的两项。
- zookeeper 保证的是 CP
- 注册中心 eruka 实现的是 AP
Zookeeper入门关注点Zookeeper的数据模型基础命令权限控制watcher监听机制
Zookleeper 主要的概念: 文件系统数据结构 + 监听通知机制
数据模型在 zookeeper 中,所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。
整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头,可以自由的新增、删除znode,也可以在znode下新增、删除子znode。
节点属性:
| 属性名 | 属性 |
|---|---|
| cZxid | 创建节点时的事务ID |
| ctime | 创建节点时的时间 |
| mZxid | 最后修改节点时的事务ID |
| mtime | 最后修改节点时的时间 |
| pZxid | 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid) |
| cversion | 子节点版本号,子节点每次修改版本号加1 |
| dataversion | 数据版本号,数据每次修改该版本号加1 |
| aclversion | 权限版本号,权限每次修改该版本号加1 |
| ephemeralOwner | 创建该临时节点的会话的sessionID。(**如果该节点是持久节点,那么这个属性值为0) |
| dataLength | 该节点的数据长度 |
| numChildren | 该节点拥有子节点的数量(只统计直接子节点的数量) |
1.持久化节点
客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,将会永远。(服务器报废另说)
2.持久化顺序编号节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3.临时节点
客户端与zookeeper断开连接后,该节点被删除
4.临时顺序编号节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
5.Container节点(容器节点)
3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点 在未来会被Zookeeper自动清除,定时任务默认60s 检查一次
6.TTL节点
默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启,不稳定,过了TTL指定的时间时,被服务器删除。
客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点
- 如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应 的客户端将被通知如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构 的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。
注意:所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监 听即被移除。递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触 发一次。



