zk学习

本文详细介绍了ZooKeeper的四种节点类型,包括ephemeral临时节点、persistent持久化节点等,探讨了ZooKeeper的选举机制、数据一致性保证、观察者模式及分布式锁实现原理。同时,文章还讨论了ZooKeeper的API、并发写入处理、数据字段限制等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.zk中有ephemeral临时节点、persistent持久化节点、ephemeral顺序节点、persistent顺序节点 四种节点
2.ephemeral临时节点的删除由两种方式触发:a.主动删除 b.session过期
3.zk采用的是简化的paxos协议,使用zab协议(zookeeper原子广播协议)。在仲裁模式(quorum)下,新节点加入、重启时候为LOOKING状态,若没有leader则发起提议 将自己的sid,zxid(时间戳+计数器)发送给所有server;收到别人的提议后,会对比自己的sid、zxid,若别人的zxid>自己的zxid || (别人的sid>自己的sid && 别人的zxid == 自己的zxid)则修改本地的提议,若相反则不修改。保持一段时间后,则发送本地存的提议给其他服务,当其他服务收到提议自己的提议,且提议数量>=n/2 + 1时候则选举自己为Leader
为了保持数据一致性,使用了两阶段提交,第一阶段是zk收到写入请求后发送给其他服务器,当有一半以上的服务器接收后再提交commit
4.zk使用观察者模式,zk的watch是one time triger,注册watch后可能存在丢失消息的情况;watch会观察到5种事件:a.节点创建 b.节点删除 c.节点数据修改 d.子节点改变 e.session事件(例如SESSIONLOSS)
watch只要注册了,就删除不了,除非触发了、或者session过期和关闭
5.如果集群中所有服务都观察某个节点,可能会存在惊群效应;可以通过顺序临时节点去解决,节点的值是递增的,服务都观察比自己小的那个节点状态,而子节点中最小的那个可以获得锁|选取为主
例如 /lock-1 /lock-2 /lock-3 其中/lock-1可以获取到锁,创建/lock-2的节点观察/lock-1,创建/lock-3的节点观察/lock-2
6.服务在session断开时候会收到事件,在watch的回调处理中必须要关注session事件;sessionloss时候,群首节点需要挂起群首的操作避免脑裂在。
7.创建分布式锁,在服务重启后可能session还未超时,此时去创建锁失败(因为是之前自己创建的,所以可以在锁的内容上写入serverid,读取下内容再判断下),否则会死锁
8.api提供 create、delete、exists、setdata、getdata、getchildren
9.并发写可以通过version,判断版本号解决
10.与服务端断连后,不要去创建新的zk链接,zk客户端会去做
11.zk可以通过multiop的方式支持事务操作
12.串行的写入顺序,zk是保序的,并发的写zk不保序
13.zk的节点数据字段传输限制为1MB,zk不适合做大规模存储、大数据量存储;适合做分布式锁、存储meta信息、分布式协作、统一配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值