博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Consul实现选主
阅读量:6802 次
发布时间:2019-06-26

本文共 797 字,大约阅读时间需要 2 分钟。

Consul实现leader election的过程是这样的过程(这个过程主要翻译自):

  • 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实现的优雅。

转载地址:http://ldfwl.baihongyu.com/

你可能感兴趣的文章
简单优化容器服务
查看>>
TCP详解
查看>>
重学ES6 数组扩展(2)
查看>>
你会这道阿里多线程面试题吗?
查看>>
行云管家V4.9正式发布:监控全面提升,首页、主机详情大幅优化,新增大量实用功能.md...
查看>>
采用镜像部署LNMP 环境操作步骤
查看>>
不服?来跑个分!
查看>>
Python笔记 开发环境搭建
查看>>
ios logo 启动页大小
查看>>
(四)构建dubbo分布式平台-maven代码结构
查看>>
Vue插件从封装到发布
查看>>
扒一扒我们生活中常见的品牌小程序
查看>>
使用注解干掉大量if else和switch
查看>>
【本人秃顶程序员】实战并发-使用分布式缓存和有限状态机
查看>>
[MySQL光速入门]019 分别使用loop, while, repeat 来计算 从0加到100 答案
查看>>
浅析libuv源码-node事件轮询解析(2)
查看>>
SpringBoot使用Nacos配置中心
查看>>
CentOS6.x下自动安装本地和网络YUM源
查看>>
mysql基础知识之增删查改使用介绍
查看>>
C++11 提升Vector效能的技巧
查看>>