我的另外3篇文章分别介绍了Zookeeper,etcd,consul是如何实现分布式锁和选主的。本文想比较一下Zookeeper、etcd、consul内部机制有哪些不同,他们实现锁和选主的方式相同和不同。

Zookeeper提供了临时节点,sequence,和变更通知。利用Zookeeper的这3个特性实现了按照sequence的顺序依次获取锁和成为主。

etcd没有临时节点的概念,但是通过租约的方式提供了类似的功能。etcd没有sequence的概念,但是提供了全局递增的序列号revision,通过判断每个key的revision,也可以实现类似的sequence功能。提供多键条件事务(类似etcdv2的Compare-and-Swap)。虽然提供的机制不同与Zookeeper,但是实现的锁方式和选主方式与zookeeper非常类似,也是按照key建立时间依次获得锁和成为主。

consul也没有临时节点的概念,但是有session的概念,通过session也可以实现临时节点的功能。consul没有提供sequence的功能,类似于etcd也提供了modifyindex,这种全局递增的序号。consul的接口类对外暴露了cas(check-and-set)的语意(似于etcdv2),与此同时对外直接暴露了锁的语意。提供了与etcd相同的机制,额外还提供了锁的机制。所以基于consul不需要考虑怎么实现锁,只需要考虑实现选主。官方文档中给出的选主的实现,是基于锁机制的,所以consul的选主不同与zookeeper和etecd。Zookeeper和etcd的实现可以避免群惊现象。但是consul提供类似于etcd的机制,所以也可以不基于锁的来实现选主,也可以实现出类似于etcd的选主实现。

总结,zookeeper、consul、etcd实现锁和选主时依赖自身的多个机制,但是有最核心的机制,比如zookeeper的sequence机制,etcd的revision和多键条件事务,consul的index、cas和锁,以上这些特性归根结底是3个系统的consistency的特性的一种表现。

Zookeeper,etcd,consul内部机制和分布式锁和选主实现的比较相关推荐

  1. Redis事务机制和分布式锁

    Redis事务机制 严格意义来讲,Redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的:Redis的事务实质上是命令的集合,在一个事务中要么所有命令都被执行,要么所有事物都不执行. ...

  2. ZooKeeper入门(四)实现分布式锁

    首先是引入pom依赖: <dependency><groupId>com.101tec</groupId><artifactId>zkclient< ...

  3. ZooKeeper(四) 使用Redis RedissonLock 实现分布式锁

    本章将介绍使用RedissonLock 在SpringBoot 工程中实现分布式锁. 项目工程文档目录: │ pom.xml //maven 依赖文件 ├─src │ ├─main │ │ ├─jav ...

  4. CP模式(ZK)的分布式锁分析

    目录 JAVA的锁 死锁 分布式锁 CP模型的分布式锁 zk分布式锁的原理 zk节点操作 zk分布式锁代码实现 CP模式分布式锁总结 JAVA的锁 锁是用来控制多个线程访问共享资源的方式,一般来说,一 ...

  5. 技术分享| 基于 Etcd 的分布式锁实现原理及方案

    1. 为什么选择 Etcd 据官网介绍,Etcd 是一个分布式,可靠的 Key-Value 存储系统,主要用于存储分布式系统中的关键数据.初见之下,Etcd 与 NoSQL 数据库系统有几分相似,但作 ...

  6. redis分布式锁的安全性及与zookeeper的对比

    上篇 网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词"Redis 分布式锁"随便到哪个搜索引擎上去搜索一下就知道了.这些文章的思路大体相近,给出的实现算法也 ...

  7. 关于分布式锁的面试题都在这里了|Reids分布式锁|ZooKeeper分布式锁

    我今天班儿都没上,就为了赶紧把这篇文章分布式锁早点写完.我真的不能再贴心了. 边喝茶边构思,你们可不要白嫖了! 三连来一遍? 引言 为什么要学习分布式锁? 最简单的理由就是作为一个社招程序员,面试的时 ...

  8. 分布式锁的3种实现(数据库、缓存[redis]、Zookeeper)

    锁是开发过程中十分常见的工具,在处理高并发请求的时候和订单数据的时候往往需要锁来帮助我们保证数据的安全. 一.分布式锁的场景 场景1.前端点击太快,导致后端重复调用接口.两次调用一个接口,这样就会产生 ...

  9. 分布式锁用Redis还是Zookeeper?

    为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景. 作者:jianfeng来源:石杉的架构笔记|2019-07-16 09:22 为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场 ...

最新文章

  1. ueditor集成实例php,Laravel框架集成UEditor编辑器的方法图文与实例详解
  2. 启用Gzip压缩(IIS)提高客户端网站访问速度
  3. 一步一步写二叉查找树
  4. 【图文解释】快速排序算法
  5. BZOJ3083: 遥远的国度(树链剖分)
  6. Java程序员面试时要注意的一些问题
  7. 数据结构【插入操作具体代码的实现】
  8. Google Earth 和MS Virtual Earth:虚拟地球简介
  9. 每日一练(8)—— 野指针
  10. html输入框间隔,input间的间距和文字上下居中
  11. ideahtml里面没有提示_抖音上爆火的苹果充电提示音,安卓手机也可以设置了!!...
  12. BitMEX将调整Impact Notional和Index Price Protection两个参数
  13. windows下搭建SSH隧道内网映射
  14. 十年.十大经济金融事件
  15. 高德地图加载白屏问题No implementation found for long com.autonavi.amap.mapcore.MapCore.nativeNew
  16. 计算机连接打印机没有dot4,Windows无法连接到打印机错误消息0x00000214
  17. Roboastere 地盘功率限制(大方向)(RM论坛同步更新,同ID,头像)
  18. Java并发编程|第二篇:线程生命周期
  19. 《C语言程序设计》江宝钏主编-习题8-4-复制字串!!!
  20. buctoj周赛(5)逃离(三分+思维)

热门文章

  1. python unix时间戳转换成时间_关于python:将unix时间戳字符串转换为可读日期
  2. redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理
  3. linux 查看语言环境_Linux语言环境版本查看shell脚本
  4. Nginx优化、服务器状态模块(--with-http_stub_status_module 的安装使用)
  5. oracle 作业 断开原因,解惑 | Oracle JOB 异常中断原因分析
  6. linux系统如何创建python文件_linux如何运行python脚本
  7. htmlcss网页设计代码案例_网页设计案例|定价表版块设计方案鉴赏
  8. jmeter响应断言使用_十二、Jmeter断言-响应断言、Json断言和Beanshell断言
  9. Linux系统的日志管理
  10. 计算机网络:第三章 数据链路层