Zookeeper和Consul在实现leader election时的区别

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

Zookeeper和Consul都可以在分布式系统中用来做选主(leader election),但是两个的实现是有区别的。

首先,我们来看看Zookeeper的实现方式。用Zookeeper实现leader election可以参看另外的一篇文章,这里就不再重复了。

接下来,我们看看Consul实现leader election的过程是这样的过程(这个过程主要翻译自Consul的文档):

  • 1.所有客户端都竞争操作一个key,比如这个key是service//leader。
  • 2.所有客户端创建一个session,创建成功后每个客户端都会获得一个sessionid。
  • 3.所有想成为leader的客户端都试图去更新这个key,并且所有客户端都acquire=这个请求参数。acquire是consul在kv存储的api上扩展的功能。acquire的意思是获取更新这个key的锁,session是我们步骤2中每个客户端各自创建的session。如果请求返回true,则这个客户端获得了锁,并且成功的更新了这个key,称为了leader。如果返回false,则其他客户端获得了锁。
  • 4.如果没有获得锁,则watch这个key,如果这个发生变化,并且这个key中session信息为空,则所有当前没有客户端获得锁,重复步骤3获取锁。

比较Zookeeper和Consul实现leader election的方式,我们可以看出,Zookeeper提供sequence这种特性,而Consul本身就提供了锁的特性。我们可以基于sequence的特性,分别构建分布式锁和选主(2者本质是相同的)。Consul利用锁机制实现选主。

Zookeeper的选主是利用了sequence的特性保证同时连接上来的多个客户端都分配一个不重复序号。大家按序号的大小,从小到大依次称为leader。因为每个客户端watch的是比自己序号小的那个节点,当leader失效时,只有一个备选会收到通知。也就是不会出现群惊现象。

Consul保证同时连接上来的多个客户端只有一个可以获得锁,其他客户端不会获得锁。但当前leader失效时,所有其他的客户端都会收到通知,再一起来竞争锁。从这一点来说没有Zookeeper实现的优雅。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
5月前
|
Java Spring
Eureka与Zookeeper的区别
     著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。 由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡,在此Zookeeper 保证的是CP, 而Eureka则是AP。
|
5月前
|
存储 负载均衡 算法
深入浅出Zookeeper源码(七):Leader选举
对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
170 6
|
2月前
|
微服务
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
26 0
|
9月前
|
存储
zookeeper的leader选举原理和底层源码实现超级详解 2
zookeeper的leader选举原理和底层源码实现超级详解
51 1
|
9月前
|
算法 Apache 文件存储
zookeeper的leader选举原理和底层源码实现超级详解 1
zookeeper的leader选举原理和底层源码实现超级详解
72 1
|
10月前
|
数据库
基于数据库与基于ZooKeeper分布式锁的区别
分布式锁是在分布式系统中用于实现多个节点之间的互斥访问共享资源的一种锁机制。它可以确保在分布式环境中的并发操作不会导致数据不一致或冲突。
66 1
|
10月前
|
负载均衡 Cloud Native 数据可视化
zookeeper、nacos与Eureka的详细区别介绍
Zookeeper、Nacos和Eureka都是常见的服务注册与发现框架,它们在分布式系统中起着至关重要的作用。虽然它们的目标都是实现服务的注册和发现,但在设计和功能上存在一些区别。下面我将详细介绍它们的特点和区别。
732 0
|
11月前
|
Kubernetes 流计算 容器
FLINK ON K8S 基于Zookeeper和基于K8S原生HA的区别
FLINK ON K8S 基于Zookeeper和基于K8S原生HA的区别
221 1
|
12月前
|
Apache 容器
Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
357 0
|
12月前
|
运维 网络协议 Apache
Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
127 0