Zookeeper 是最早流行的开源分布式协调服务框架之一,同时也提供了分布式配置中心的功能。Zookeeper 以高可用、一致性和可靠性著称,但是需要用户自己来开发实现分布式配置的功能。
Eureka 是 Netflix 开源的服务注册中心,被广泛应用在 Spring Cloud 微服务架构中。它提供了易于使用的 REST API 和 Web 界面,并支持基于 Region 和 Zone 的服务分组和负载均衡。
设计哲学
- Zookeeper 的设计哲学是 "CP",即保证一致性和分区容错性。使用了 ZAB 协议来保证集群中的数据强一致性。因为他是一个分布式协调组件,一致性很重要,
- Eureka 的设计哲学是 "AP",即保证可用性和分区容错性。他采用了一种更为宽松的一致性模型,支持最终一致性。因为他就是为了做注册中心的,可用性更重要。
性能
- Eureka:由于其设计重点放在高可用性和可伸缩性上,对于大规模的服务发现场景,Eureka 可以更快地响应服务注册和发现请求。
- Zookeeper:他主要是分布式协调组件,最终保证的是一致性,那势必就会牺牲一部分的性能(可用性)。
客户端交互
- Eureka:客户端需要定期向 Eureka 发送心跳来维持注册状态,并从 Eureka 获取服务列表。
- Zookeeper:客户端可以设置监听器来监控数据节点的变化,当这些节点发生变化时,Zookeeper 会通知客户端。
其他区别
| 对比项 | Eureka | Zookeeper |
| CAP | AP | CP |
| 健康检查 | Client Beat | Keep Alive |
| 负载均衡 | Ribbon | — |
| 一致性算法 | Gossip | ZAB |
| 雪崩保护 | 有 | 无 |
| 访问协议 | HTTP | TCP |
| Spring Cloud 集成 | 支持 | 支持 |
| Dubbo 集成 | 不支持 | 支持 |
| K8s 集成 | 不支持 | 支持 |
说这么多,该怎么选择呢?
建议 “专业的事,交给专业的人做”,Eureka 是专门做注册中心的,所以他的各种保护机制、一致性保证、监控等都会更加专注一些。