5月30日 20:13
Zookeeper、Etcd 和 Consul 有什么区别?该怎么选?
Zookeeper、Etcd 和 Consul 都能做分布式协调,但出发点不一样。Zookeeper 更像协调原语库,擅长临时节点、顺序节点、Watcher、分布式锁和老牌 Java/大数据生态;Etcd 是强一致 KV,Raft、revision、租约和 Watch 更贴近 Kubernetes 控制面;Consul 把服务发现、健康检查、多数据中心和 KV 打包在一起,适合微服务治理。
追问
Consul 是 AP 还是 CP?
不能简单说 Consul 全部是 AP。服务发现依赖 Gossip,读到的信息可能短暂滞后;Server 集群和 KV 一致读依赖 Raft,更接近 CP。
Zookeeper 和 Etcd 的 Watch 有什么差别?
Zookeeper 的 Watch 是一次性通知,触发后需要重新注册。Etcd Watch 基于 revision,可以从指定版本继续消费事件,但要处理 compaction 后版本过旧的问题。
为什么 Kubernetes 选 Etcd?
Etcd 的 Raft KV、revision、租约和 gRPC API 更符合 Kubernetes 的对象存储与控制循环模型。Zookeeper 数据模型更偏传统中间件生态。
老系统要不要迁到 Etcd?
如果只是为了技术更新,通常不值得。临时节点、顺序节点、ACL、Watcher 语义都要重做,只有控制面重构时才值得评估。
三者性能怎么比较才靠谱?
按读写比例、值大小、Watcher 数量、磁盘 fsync 和网络延迟压测。不要只看单机 benchmark。