当前位置: 首页 > news >正文

用Zookeeper实现分布式锁和选主

Zookeeper可以用来实现Distributed lock(分布式锁)和leader election(选主)。

分布式锁和选主虽然用在不同的场景,但是2者的机制是相同的。

Zookeeper官方文档上给出了一个recipes,介绍了如何实现分布式锁和选主,2种实现说明的步骤和风格完全不一样,但是本质是一样的。

这里先翻译一下recipes对2者的说明。

获得锁的步骤:

  • 1.调用create(),以"_locknode_/lock-"作为路径名,并且设置sequence和ephemeral标志
  • 2.在锁节点上,也即"_locknode_",调用getChildren(),但不带watch标志
  • 3.如果在步骤1中创建的路径名具有最小的后缀,则客户端获得锁,客户端退出协议
  • 4.如果客户端在步骤3中没有获得锁,则客户端调用exist(),带上watch标志,在比步骤1创建的路径名小的路径上。
  • 5.如果不存在,则跳到步骤2。如果存在存在,则等待路径名变化的通知,再跳转到步骤2。

Leader Election的伪代码:
假设ELECTION是应用选择的路径名。应用要变成leader,执行以下步骤:

  • 1.用"ELECTION/n_"作为路径名创建一个znode,设置SEQUENCE和EPHEMERAL2个标志。成功建立的znode,我们叫它做z。
  • 2."ELECTION"下所有的znode的集合我们称为C,i是z的序列号。
  • 3.watch节点"ELECTION/n_j的变化,j是满足j < i 和 n_j 是C中的一个znode这2个条件的最大序列号。

2者都是基于Zookeeper具有SEQUENCE和EPHEMERAL两个特性。所有的客户端都在同一个节点下创建子节点,序列号最小的客户端,获得锁或者称为leader,其他客户端watch比自己创建的节点序列号小的那个节点,一旦有变化再判断自己创建的节点是不是最小的,如果是自己获得锁或者称为leader。

相关文章:

  • 最近5年183个Java面试问题列表及答案[最全]
  • cloudbase-init 自动扩盘的副作用 - 每天5分钟玩转 OpenStack(154)
  • Android笔记--TCP Scoket(字符串收发)
  • HTML5 自定义属性 dataset
  • 一步一步学Python(2) 连接多台主机执行脚本
  • MySQL添加用户、删除用户与授权
  • C#中HttpWebRequest的用法详解
  • Curl命令使用解析大全
  • 【AUC】二分类模型的评价指标ROC Curve
  • 真是个信息爆炸的世界
  • Nginx 和 Apache 日志记录格式设置
  • sublime的使用技巧
  • 让技术不要成为“背锅侠”!
  • Tkinter,label内容随多选框变化
  • Android井字游戏(一)首页制作
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 0基础学习移动端适配
  • 2017 年终总结 —— 在路上
  • Android交互
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Java小白进阶笔记(3)-初级面向对象
  • Less 日常用法
  • Map集合、散列表、红黑树介绍
  • Rancher如何对接Ceph-RBD块存储
  • 大整数乘法-表格法
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 赢得Docker挑战最佳实践
  • 正则表达式小结
  • C# - 为值类型重定义相等性
  • zabbix3.2监控linux磁盘IO
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # Panda3d 碰撞检测系统介绍
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (HAL库版)freeRTOS移植STMF103
  • (二开)Flink 修改源码拓展 SQL 语法
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十一)c52学习之旅-动态数码管
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)用.Net的File控件上传文件的解决方案
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET CORE Aws S3 使用
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • @AliasFor注解
  • @EventListener注解使用说明
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [Apio2012]dispatching 左偏树
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C/C++]数据结构 栈和队列()
  • [CentOs7]图形界面
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备