zookeeper小结

1Zk抽象模型
Zk提供了一种树形结构的命名空间

2、节点类型:
永久节点:不会因为会话结束或者超时而消失;
临时节点:如果会话结束或者超时就会消失;
有序节点:会在节点名的后面加一个数字后缀,并且是有序的。

3、监听器
为一个节点注册监听器,在节点状态发生改变时,会给客户端发送信息。

4、zookeeper主从部署
并不是像mysql那样,主节点写, 从写节点负责读。
ZooKeeper 中,读操作和写操作都可以在任何节点上执行,而不是局限于特定的主节点或从节点。
所有的节点都能处理客户端的读写请求。然而,一般情况下,客户端的读请求通常被发送到当前的
Leader节点,而写请求必须经过Leader节点处理。


zk应用

1、服务注册与发现API

服务注册与发现要提供的功能有以下几点
1、服务注册
2、服务实例的获取
3、服务变化的通知机制

服务下的节点,设计成临时节点,如果服务断掉了不能用,直接剔除。这就是一致性。

2、zookeeper设计一个队列

1、queue永久节点,queue节点下面创建n个节点,这n个永久节点都是queue的直接子节点,并且是有序。


使用下面方法操作队列。
1、zk的create命令,在/queue下面创建一个顺序znode。因为znode的后缀数字是/queue里面,
现有znode最大后缀数字加1,所以该znode对应的队列元素处于队尾

2、拿到所有的子节点,遍历里面的元素,相当于挨个从尾部取数据。
3、拿到所有的子节点,遍历第一个元素,然后删除第一个元素。

3、zookeeper的队列实现分布式锁

1、创建一个锁目录/lock
2、当一个客户端需要获取锁时,在/lock下创建临时的且有序的子节点

3、客户端获取/lock下的子节点列表,判断自己创建的子节点是否为当前子节点列表中序号最小的子节点,
如果是则认为获得锁;否则监听自己的前一个子节点,获得子节点的变更通过后重复此步骤直至获得锁

4、执行业务代码,完成后,删除对应的子节点


会话超时
如果一个已经获得锁的会话超时了,因为创建的是临时节点,所以该会话对应的临时节点会被删除,其他会话就可以获得锁了。
可以看到,这种实现方式不会出现数据库的唯一索引实现方式释放锁失败的问题

监听:
一个节点未获得锁,只需要监听自己的前一个子节点

4、zookeeper集群leader的选举

选举逻辑:最靠前的节点就是leader,和分布式的锁的实现很类似,都是通过队列,最先进来的,成为leader,断开的节点自然会退出队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值