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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
4月前
|
存储 负载均衡 算法
深入浅出Zookeeper源码(七):Leader选举
对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
168 6
|
1月前
|
微服务
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
18 0
|
8月前
|
存储
zookeeper的leader选举原理和底层源码实现超级详解 2
zookeeper的leader选举原理和底层源码实现超级详解
50 1
|
8月前
|
算法 Apache 文件存储
zookeeper的leader选举原理和底层源码实现超级详解 1
zookeeper的leader选举原理和底层源码实现超级详解
64 1
|
11月前
|
运维 网络协议 Apache
Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
126 0
|
11月前
|
调度 Apache 数据库
Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析
Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析
136 0
|
11月前
|
Apache 数据库
Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略
Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略
190 0
|
11月前
|
Apache
Apache ZooKeeper - Leader 选举 如何保证分布式数据的一致性
Apache ZooKeeper - Leader 选举 如何保证分布式数据的一致性
100 0
|
11月前
|
算法 网络协议 Apache
Apache ZooKeeper - 选举Leader源码流程深度解析
Apache ZooKeeper - 选举Leader源码流程深度解析
93 0
|
11月前
|
Java Apache
Apache ZooKeeper - Leader Election使用场景
Apache ZooKeeper - Leader Election使用场景
57 0