著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP。
Zookeeper:
集群节点为主从关系,注册以主节点为主,在一个设备上完成,这样可以提高分区容错性,同时具备数据一致性。主节点以复制的方式将数据同步到从节点,当同步数据量大时,服务不可用,性能降低,所有放弃了服务可用性。
Eureka:
集群节点间发送心跳包,如果某个节点发送心跳包而其他节点没有收到,Eureka会将该节点做服务保护,从而提高分区容错性。集群节点是平等的,服务可以从任何一个节点提供,所以具备服务可用性,而放弃了数据一致性(这里并不是完全放弃数据一致性,而是放弃数据的强一致性,保留数据的最终一致性。举个栗子:淘宝购物服务如果同时接受两个订单,那么较晚的订单将被告知售罄。)。
其他不同如下:
- | Zookeeper | Eureka | - |
---|---|---|---|
CAP | CP | AP | |
Dubbo集成 | 支持 | - | |
Spring Cloud集成 | 支持 | 支持 | |
使用接口(多语言支持) | 提供客户端 | http语言 | zk跨语言支持较弱 |
watch支持 | 通过订阅监听来实现 | 通过轮询的方式来实现 | watch支持:客户端监听服务端的变化情况 |
集群监控 | - | 运维人员通过metrics收集并报警度量信息达到监控的目的 |