没有合适的资源?快使用搜索试试~ 我知道了~
深入浅出Zookeeper(二)基于Zookeeper的分布式锁与领导选举
0 下载量 188 浏览量
2021-03-03
13:02:39
上传
评论
收藏 437KB PDF 举报
温馨提示
本文来自于技术世界,本文结合实例演示了使用Zookeeper实现分布式锁与领导选举的原理与具体实现方法。如上文《Zookeeper架构及FastLeaderElection机制》所述,Zookeeper提供了一个类似于Linux文件系统的树形结构。该树形结构中每个节点被称为znode,可按如下两个维度分类Persistvs.EphemeralPersist节点,一旦被创建,便不会意外丢失,即使服务器全部重启也依然存在。每个Persist节点即可包含数据,也可包含子节点Ephemeral节点,在创建它的客户端与服务器间的Session结束时自动被删除。服务器重启会导致Session结束,因此Ep
资源推荐
资源详情
资源评论
深入浅出深入浅出Zookeeper(二)基于(二)基于Zookeeper的分布式锁与领导的分布式锁与领导
选举选举
Zookeeper特点
Zookeeper节点类型
如上文《Zookeeper架构及FastLeaderElection机制》所述,Zookeeper 提供了一个类似于 Linux 文件系统的树形结构。该树
形结构中每个节点被称为 znode ,可按如下两个维度分类
Persist vs. Ephemeral
Persist节点,一旦被创建,便不会意外丢失,即使服务器全部重启也依然存在。每个 Persist 节点即可包含数据,也可包含子
节点
Ephemeral节点,在创建它的客户端与服务器间的 Session 结束时自动被删除。服务器重启会导致 Session 结束,因此
Ephemeral 类型的 znode 此时也会自动删除
Sequence vs. Non-sequence
Non-sequence节点,多个客户端同时创建同一 Non-sequence 节点时,只有一个可创建成功,其它匀失败。并且创建出的节
点名称与创建时指定的节点名完全一样
Sequence节点,创建出的节点名在指定的名称之后带有10位10进制数的序号。多个客户端创建同一名称的节点时,都能创建
成功,只是序号不同
Zookeeper语义保证
Zookeeper 简单高效,同时提供如下语义保证,从而使得我们可以利用这些特性提供复杂的服务。
顺序性 客户端发起的更新会按发送顺序被应用到 Zookeeper 上
原子性 更新操作要么成功要么失败,不会出现中间状态
单一系统镜像 一个客户端无论连接到哪一个服务器都能看到完全一样的系统镜像(即完全一样的树形结构)。注:根据上文
《Zookeeper架构及FastLeaderElection机制》介绍的 ZAB 协议,写操作并不保证更新被所有的 Follower 立即确认,因此通
过部分 Follower 读取数据并不能保证读到最新的数据,而部分 Follwer 及 Leader 可读到最新数据。如果一定要保证单一系统
镜像,可在读操作前使用 sync 方法。
可靠性 一个更新操作一旦被接受即不会意外丢失,除非被其它更新操作覆盖
最终一致性 写操作最终(而非立即)会对客户端可见
Zookeeper Watch机制
所有对 Zookeeper 的读操作,都可附带一个 Watch 。一旦相应的数据有变化,该 Watch 即被触发。Watch 有如下特点
主动推送 Watch被触发时,由 Zookeeper 服务器主动将更新推送给客户端,而不需要客户端轮询。
一次性 数据变化时,Watch 只会被触发一次。如果客户端想得到后续更新的通知,必须要在 Watch 被触发后重新注册一个
Watch。
可见性 如果一个客户端在读请求中附带 Watch,Watch 被触发的同时再次读取数据,客户端在得到 Watch 消息之前肯定不
可能看到更新后的数据。换句话说,更新通知先于更新结果。
顺序性 如果多个更新触发了多个 Watch ,那 Watch 被触发的顺序与更新顺序一致。
分布式锁与领导选举关键点
最多一个获取锁 / 成为Leader
对于分布式锁(这里特指排它锁)而言,任意时刻,最多只有一个进程(对于单进程内的锁而言是单线程)可以获得锁。
对于领导选举而言,任意时间,最多只有一个成功当选为Leader。否则即出现脑裂(Split brain)
锁重入 / 确认自己是Leader
对于分布式锁,需要保证获得锁的进程在释放锁之前可再次获得锁,即锁的可重入性。
资源评论
weixin_38718413
- 粉丝: 9
- 资源: 946
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之70-climbing-stairs.c
- C语言-leetcode题解之68-text-justification.c
- C语言-leetcode题解之66-plus-one.c
- C语言-leetcode题解之64-minimum-path-sum.c
- C语言-leetcode题解之63-unique-paths-ii.c
- C语言-leetcode题解之62-unique-paths.c
- C语言-leetcode题解之61-rotate-list.c
- C语言-leetcode题解之59-spiral-matrix-ii.c
- C语言-leetcode题解之58-length-of-last-word.c
- 计算机编程课程设计基础教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功