用Zookeeper实现分布式锁和选主

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: Zookeeper可以用来实现Distributed lock(分布式锁)和leader election(选主)。 分布式锁和选主虽然用在不同的场景,但是2者的机制是相同的。 Zookeeper官方文档上给出了一个recipes,介绍了如何实现分布式锁和选主,2种实现说明的步骤和风格完全不一样,但是本质是一样的。

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。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
4月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
4月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
8天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
存储 运维 NoSQL
分布式读写锁的奥义:上古世代 ZooKeeper 的进击
本文作者将介绍女娲对社区 ZooKeeper 在分布式读写锁实践细节上的思考,希望帮助大家理解分布式读写锁背后的原理。
|
3月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
58 2
|
3月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
60 1
|
3月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
56 0
|
4月前
|
Java
分布式-Zookeeper-分布式锁
分布式-Zookeeper-分布式锁
|
4月前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)
|
6月前
|
监控 NoSQL Java
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决
分布式锁实现原理问题之ZooKeeper的观察器(Watcher)特点问题如何解决

热门文章

最新文章