注册中心选型:ZooKeeper vs Nacos vs Eureka
面试官问候选人小李:"你们团队在做技术选型时,为什么选了 Nacos 而不是 ZooKeeper?"
小李说:"因为 Nacos 是阿里开源的,文档多..."面试官追问:"那 ZooKeeper 的问题是什么?Nacos 比 ZooKeeper 好在哪?"
小李答不上来。
【面试官心理】 这道题我用来考察候选人的技术选型能力。能从 CAP 理论、一致性模型、运维复杂度、生态集成等多个维度分析选型的候选人,说明他有架构视野。这种候选人在我这里是 P7 的潜力股。
一、三种注册中心定位 🔴
1.1 概览对比
1.2 一致性光谱
二、ZooKeeper:CP 的分布式协调器 🟡
2.1 核心优势
2.2 核心劣势
2.3 适用场景
- 分布式锁:需要强一致锁的场景
- 配置管理:需要配合 Apollo 等配置中心
- Master 选举:需要强一致选主的场景
- Hadoop 生态:Hadoop、Kafka、Storm 等组件原生支持
三、Nacos:AP + CP 双模式的注册中心 🟡
3.1 核心优势
3.2 核心劣势
3.3 Nacos vs ZooKeeper
3.4 Nacos 2.0 的性能优势
四、Eureka:AP 的自我保护注册中心 🟡
4.1 核心优势
4.2 核心劣势
4.3 自我保护机制
Eureka 的自我保护机制防止网络分区时误删健康实例:
自我保护的问题:
五、综合对比表 🔴
5.1 核心维度对比
5.2 生产环境对比
六、选型决策树 🟡
6.1 决策流程
6.2 按场景选型
6.3 按团队能力选型
七、生产避坑 🟡
7.1 ZooKeeper 的坑
- 单机部署的隐患:单机 ZooKeeper 无法容忍任何故障
- 写入压力过大:高并发写入场景下 Leader 成为瓶颈
- Session 超时配置:心跳间隔和超时时间要配合好
- 数据量限制:不适合存储大量数据(最大 1MB/节点)
7.2 Nacos 的坑
- gRPC 端口未开放:Nacos 2.0 需要开放 9848 端口
- Distro 数据不一致:AP 模式下可能读到过期数据
- 命名空间隔离:不同环境要用不同命名空间
- 数据量过大:单节点超过 100 万实例后性能下降
7.3 Eureka 的坑
- 已停止维护:继续使用有安全风险
- 自我保护误判:网络抖动时可能保护已下线实例
- 无配置中心:需要配合 Spring Cloud Config
- 客户端缓存:可能读到 30 秒前的数据
💡
如果你的团队使用 Spring Cloud Alibaba,Nacos 是最自然的选择。如果你的团队有 Dubbo 背景,Nacos 也是首选。如果你的场景需要强一致(分布式锁、选主),ZooKeeper 是更可靠的选择。
⚠️
Eureka 2.0 已经停止维护,生产环境不建议新项目使用 Eureka。Netflix 已经将 Eureka 捐赠给 Apache,但短期内不会有大的改进。建议迁移到 Nacos。
八、迁移方案 🟢
8.1 ZooKeeper 到 Nacos
8.2 Eureka 到 Nacos
【面试官心理】 注册中心选型是考察架构能力的关键问题。能从 CAP 理论、一致性模型、运维复杂度、生态集成等多个维度分析选型的候选人,说明他有架构视野。这种候选人在我这里是 P7 的潜力股。