在谈这个问题之前我们先看一下CAP原则:C(Consistency)-数据一致性;A(Availability)-服务可用性;P(Partition tolerance)-服务对网络分区故障的容错性,这三个特性在任何分布式系统中不能够同时满足,最多同时满足俩个,并且P(分区容错性)是一定要满足的.
1. Eureka 满足AP(服务可用性和容错性) Zookeeper 满足CP(数据一致性和容错性)
Eureka 满足AP,可用性,容错性.当因网络故障时,Eureka的自我保护机制不会立即剔除服务,虽然用户获取到的服务不一定是可用的,但至少能够获取到服务列表,用户访问服务列表时还可以利用重试机制,找到正确的服务.更服务分布式服务的高可用需求
Zookeeper 满足CP,数据一致性,服务容错性.数据在各个服务间同步完成后才返回用户信息,而且如果服务出现网络波动导致监听不到服务心跳,会立即从服务列表中剔除,服务不可以.
2. Eureka集群各节点平等,Zookeeper集群有主从之分
Zookeeper 如果ZK集群中有服务宕机,会重新进行选举机制,选择出主节点,因此可能会导致整个集群因为选主而阻塞,服务不可用
Eureka 集群中有服务宕机,因为是平等的各个服务器,所以其他服务器不受影响
3. Eureka 的服务发现者会主动拉取服务,Zookeeper 服务发现者是监听机制
Zookeeper 是监听节点信息变化,当服务节点信息变化时,客户端立即就得到通知
Eureka 中获取服务列表后会缓冲起来,每隔30秒重新拉取服务列表



