连载中 18/20

ZK 还是 etcd:云原生时代的协调服务选型

2026-07-04 · 2636 阅读 · 0 评论 · 0 赞

先把协议账算平

第 15 篇在锁视角选过一轮,本篇把镜头拉到基础设施视角:到底养不养一个协调服务,养谁。先算协议账——ZAB 与 Raft 在能力上半斤八两:都是 Leader 主写、过半提交、任期制防脑裂、日志复制保安全(第 9、13 篇已对照过)。差异在工程气质:ZAB 为 ZooKeeper 深度定制,外界复用不了;Raft 作为通用共识算法被工业界大规模复用(etcd、TiKV、Consul、CockroachDB),实现多、资料多、可验证性强。协议账打平之后,选型天平真正压下来的三块砝码是:数据模型、时代生态、运维成本。

功能账:细节气质的差异

两家功能清单高度重合——强一致 KV、Watch 变更、临时性(会话/租约)、选主与锁——差异在气质。ZooKeeper 是树形命名空间,目录层级天然表达从属关系(/services/order/provider-1),但子节点数量多了 getChildren 全量拉取笨重;etcd 是扁平 key 空间加范围查询,prefix range 一次拿一批,配合 MVCC 修订号还能查任意历史版本——「这个 key 上个月是什么值」只有 etcd 秒答。Watch 的成色上一系列已经对比过:一次性续订对流式订阅,后者省一个数量级的代码。gRPC 对 HTTP/2 多路复用也让 etcd 在连接利用率上占优。

时代账:生态绑定才是主战场

ZooKeeper 生于 2008 年的 Hadoop 时代,Java 加 JVM,撑起了 Kafka(早期)、HBase、HDFS、Dubbo、Solr 的元数据底座——大数据与 RPC 的老栈里 ZK 躲不掉。etcd 生于 2013 年的 CoreOS,Go 加 gRPC,2014 年成为 Kubernetes 的存储内核——云原生栈里 etcd 是空气。由此推出本篇最实用的结论:选型往往不是「选谁」,而是「你已经在用谁」。跑在 K8s 上的团队,etcd 集群已经在机房里了,复用它做锁与选主是零增量成本(注意容量与压力别拖累 K8s 本身);Kafka、Dubbo 老栈团队,ZK 就在旁边,顺手用;绿地新项目、云原生优先,直接 etcd。

运维账:各自的家务事

两家的运维家务清单各有各的琐碎。ZooKeeper:JVM 调优(堆大小、GC 选型直接影响会话误判率,第 11 篇的红线)、事务日志与快照的磁盘规划、集群扩缩容要逐台滚动重启;ZNode 数据量一大,启动恢复慢。etcd:MVCC 历史不清理会膨胀,要定期 compaction(压缩修订历史)加 defrag(碎片整理),磁盘 IO 抖动直接威胁 Raft 心跳——官方反复强调 etcd 对磁盘延迟敏感,ssd 起步。好消息是两家的托管服务都已成熟(各大云的注册配置中心产品),愿意花钱换省心的话,家务清单可以整张外包。规模参考:3 节点起步扛日常,5 节点扛半数单点故障与滚动升级,更大规模说明用法该反思(协调服务不该扛业务数据)。

维度ZooKeeperetcd
共识协议ZAB(定制)Raft(通用,实现众多)
数据模型树形层级,getChildren 全量扁平 key + range,MVCC 历史可查
Watch一次性,触发即失效流式,断点可重放
技术栈Java + JVM(2008)Go + gRPC(2013)
生态绑定Hadoop / Kafka / Dubbo 老栈K8s / 云原生新栈
运维重点JVM 调优、快照日志管理compaction / defrag、磁盘延迟
托管服务各云均有各云均有,K8s 系更顺

收束成一句决策口诀:老栈用 ZK,新栈用 etcd,都为了锁才引入的话——先回去看第 16 篇,确认真的绕不开再养。协调服务是基础设施级的投入,它的正确性红利要叠在「低频高危」的场景上才划算。下一篇把系列里所有反面教材集结成册:七个生产事故,条条都有前文伏笔。

503

10 年全栈工程师 · 503咖啡馆主理人

#ZooKeeper#etcd#选型#Raft#ZAB#云原生#运维

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 5 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞