etcd 实战课
唐聪
腾讯云资深工程师,etcd 活跃贡献者
28449 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 28 讲
开篇词 (1讲)
etcd 实战课
15
15
1.0x
00:00/00:00
登录|注册

23 | 选型:etcd/ZooKeeper/Consul等我们该如何选择?

etcd和Consul提供了简易的事务能力,ZooKeeper只提供了版本号检查能力
etcd实现了RBAC的权限校验,ZooKeeper和Consul实现了ACL
etcd和Consul支持线性读,ZooKeeper不支持
ZooKeeper的Watch特性有更多的局限性
etcd和Consul支持范围查询和监听
Consul提供了常用key-value操作
ZooKeeper的层次模型中的每个节点叫Znode
etcd是扁平的key-value模型
etcd和 ZooKeeper的健康检查机制和能力有限
Consul提供了服务发现的框架和分布式的健康检查机制
Consul提供了直接使用的分布式锁
etcd和ZooKeeper未提供原生的分布式锁、Leader选举支持
Gossip协议的基本工作原理
Client、Server、Gossip协议、Raft共识算法
读行为和共识算法与etcd不同
Leader节点、Follower节点、Observer节点
Raft共识模块、日志模块、boltdb持久化存储
基于复制状态机实现
如果选用etcd,又该怎么做
如何选型合适的分布式协调服务,设计跨可用区、地区的容灾方案
其他比较
Watch特性比较
数据模型比较
健康检查、服务发现
并发原语
Consul
ZooKeeper
etcd
思考题
重点特性比较
基本架构及原理
etcd/ZooKeeper/Consul选择对比

该思维导图由 AI 生成,仅供参考

你好,我是唐聪。
在软件开发过程中,当我们需要解决配置、服务发现、分布式锁等业务痛点,在面对etcdZooKeeperConsulNacos等一系列候选开源项目时,我们应该如何结合自己的业务场景,选择合适的分布式协调服务呢?
今天,我就和你聊聊主要分布式协调服务的对比。我将从基本架构、共识算法、数据模型、重点特性、容灾能力等维度出发,带你了解主要分布式协调服务的基本原理和彼此之间的差异性。
希望通过这节课,让你对 etcd、ZooKeeper、Consul 原理和特性有一定的理解,帮助你选型适合业务场景的配置系统、服务发现组件。

基本架构及原理

在详细和你介绍对比 etcd、ZooKeeper、Consul 特性之前,我们先从整体架构上来了解一下各开源项目的核心架构及原理。

etcd 架构及原理

首先是 etcd,etcd 我们知道它是基于复制状态机实现的分布式协调服务。如下图所示,由 Raft 共识模块、日志模块、基于 boltdb 持久化存储的状态机组成。
以下是 etcd 基于复制状态机模型的写请求流程:
client 发起一个写请求(put x = 3);
etcdserver 模块向 Raft 共识模块提交请求,共识模块生成一个写提案日志条目。若 server 是 Leader,则把日志条目广播给其他节点,并持久化日志条目到 WAL 中;
当一半以上节点持久化日志条目后,Leader 的共识模块将此日志条目标记为已提交(committed),并通知其他节点提交;
etcdserver 模块从 Raft 共识模块获取已经提交的日志条目,异步应用到 boltdb 状态机存储中,然后返回给 client。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式协调服务是构建分布式系统的关键组件,选择合适的服务对业务至关重要。本文从多个维度对比了etcd、ZooKeeper、Consul这三种服务的架构、原理和功能特性。在共识算法方面,etcd基于Raft算法确保数据一致性,Consul采用Gossip协议和Raft共识算法,支持多数据中心容灾,而ZooKeeper使用Zab协议可能返回stale data。在并发原语、健康检查、服务发现、数据模型、Watch特性、多数据中心等方面,三者也有各自的特点和限制。Consul提供了原生的分布式锁、健康检查、服务发现机制支持,对多数据中心的支持也是其亮点。最后,根据业务需求和技术特点选择合适的分布式协调服务至关重要。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《etcd 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 金时
    线性读和强一致读有什么区别?

    作者回复: 没区别,强一致性也叫线性一致性

    2021-09-01
    2
  • kkxue
    我觉得pingcap的这个方案可行: https://github.com/etcd-io/etcd/issues/11357 https://pingcap.com/blog-cn/geographic-data-distribution-traffic-and-latency-halved/ "这里我们引入了一个新概念 Group,每一个 Raft 节点都有一个对应的 Group ID,拥有相同 Group ID 的节点即在同一个数据中心中。既然有了每个 Raft 节点的 Group 信息,Leader 就可以在广播消息时在每一个 Group 中选择一个代理人节点(我们称为 Follower Delegate),将整个 Group 成员所需要的信息发给这个代理人,代理人负责将数据同步给 Group 内的其他成员"
    2021-03-15
    10
  • 骑着🚀看银河
    按照这个比较ETCD并没有胜出啊,反而Consul是最佳选择,哈哈哈
    2022-03-17
    1
    5
  • 残天噬魂
    额,老师这么一比较,我感觉除了语言契合度之外,consul就应该是第一选择啊,哈哈
    2021-12-31
    3
  • kkxue
    还有这个方案就是直接将不同数据中心的延时降低!如同local datacenter,传闻google做到了
    2021-03-15
    2
    2
  • 初学者
    关于同城双az高可用,有一些问题想和老师探讨一下: 如果我想采用2+2部署方案,也就一个集群4个节点平均部署到两个机房,这样的好处是一个az跪了,能保证另一个az肯定有节点上的数据是完整的,坏处是任何一个az挂了,服务就立即不可用,要有一个手动恢复的流程,我这里想请教一下老师,当前etcd只发现一种通过force-new-cluster的参数也通过某一个节点的数据恢复集群,有什么优雅的方式知道正常的az中两个节点中哪个节点数据最新? 像zk这种,我完全可以在正常az中新扩容一个新节点,修改集群member配置信息,然后在正常的az中恢复出一个3节点的集群,而且也只能新扩容的节点需要复制集群数据,etcd好像不支持这种玩法。
    2021-12-09
    1
  • Fis.
    3AZ的或者3地域的直接跨区域部署就行了,就是时延需要考虑及优化,双AZ的比较复杂。 方案1:etcd集群2+1部署,引入全局仲裁服务,自己做一个agent,根据仲裁服务的信息,管理etcd节点升主或降备,破坏了原有raft协议 方案2:两个etcd集群,开发专门的数据同步工具或者开源make mirror,主备集群模式。两个集群revision无法一致 方案3:区域1主集群,区域2部署3个learner,故障时区域2升主。 上面几种方案那种更好呢?还有其他好的方案吗?
    2021-12-24
  • mckee
    etcd一般可以采用同一个region下跨可用区部署,最好每个可用区部署一台
    2021-11-17
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部