基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关系的数据,接收观察者的注册,一旦数据发生变化,zookeeper负责通知已经在zookeeper上注册的那些观察者做出相应的反应,
服务器(服务提供方)启动时去注册信息(其实都是创建临时节点),
作用:存数据 通知
数据模型:
Zookeeper数据模型结构与linx文件系统很类似,整体上可以看作是一颗树,每个节点称做一个znode,每个节点默认存储1兆数据,每个节点都可以通过其路径唯一标识
Zookeeper接收请求处理流程: 请求---日志----持久化---更新datatree
读数据是从内存读取
底层原理
1.采用了原子广播协议(zab)来保证内部数据一致性(分布式带来数据不一致问题)
2.投票选取机制,通过pk选取,首先pk数据谁是最新(zxid),相对情况比较myid(开发定义)
Zab协议(理论)-----》zookeeper(实现)
Zab协议原理:
- leader 领导者选举机制
- Ack过半机制
- 2PC两阶段提交机制
- 预提交 用来占资源
- Ack(过半机制)
- 提交
4.同步机制
集群投票,每个zookeep都有自己的投票箱,先给自己投,再按照上面的规则投
原子性:强一致性,弱一致性,最终一致性
强一致性:是指在在数据同步的时候加锁,请求访问时先等数据同步完,然后在解锁
最终一致性:是指读数据的时候,隔断时间就会读数据,查看数据是否一致。
弱一致性:读的数据可能不一致,不会隔断时间读数据
特点:
1)Zookeeper:一个领导(leader),多个跟随者(Follower)组成的集群
2)集群中只要有半数以上节点存活,zookeeper集群就能正常服务
3)全局数据一致:每个server保存一份相同的数据剧本,client无论连接到哪个servier,数据都是一致的
4)更新请求的顺序进行,来自同一个client的更新请求按照发送顺序依次执行
5)数据更新原子性,一次数据更新要么成功,要么失败