连载中 18/20

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

2026-07-04 · 2639 阅读 · 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)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10101 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9873 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9294 阅读 · 21 评论 · 287 赞