Eureka与Zookeeper作为注册中心的区别
请对比Eureka(AP原则)和Zookeeper(CP原则)作为服务注册中心的区别。为什么Spring Cloud默认推荐Eureka而不是Zookeeper?在什么场景下应该使用Zookeeper?
回答
小字辈
核心区别:CAP选择
| 特性 | Eureka | Zookeeper |
|---|---|---|
| CAP | AP(可用性+分区容错性) | CP(一致性+分区容错性) |
| 一致性 | 最终一致性 | 强一致性(ZAB协议) |
| 设计目标 | 服务发现(高可用优先) | 分布式协调(一致性优先) |
Eureka(AP原则):
- 节点对等,无主从之分
- 各节点互相注册,心跳同步服务列表
- 网络分区时,各节点保留自己的服务列表继续工作(可用性优先)
- 可能不一致(A节点有服务S,B节点没有)
- 自我保护机制:心跳丢失超过85%时不再剔除服务(防止误杀)
Zookeeper(CP原则):
- Leader-Follower架构,写请求由Leader处理
- 网络分区时,如果Leader在少数派分区,整个集群停止写服务(一致性优先)
- 使用ZAB(Zookeeper Atomic Broadcast)协议保证强一致性
- 服务注册是临时节点,会话超时则自动剔除
为什么Spring Cloud推荐Eureka:
- 服务发现对可用性要求高于一致性(宁可返回旧的服务列表,也不能让服务不可用)
- Eureka天然适合微服务注册中心(节点对等,运维简单)
- Zookeeper的Leader选举期间服务不可用,不适合高可用的注册中心
- Eureka的自我保护机制在网络故障时仍有服务能力
何时使用Zookeeper:
- 分布式锁、分布式协调、配置管理(强一致性需求)
- 服务数量较少且对一致性要求高的场景
- Dubbo老版本默认使用Zookeeper(Dubbo支持多种注册中心)
当前趋势:Nacos支持AP/CP切换,比Eureka功能更全面,逐渐成为主流。