首先介绍一下CAP原则:
C:Consistency-数据一致性;
A:Availability-服务可用性
P:Partition Tolerance-服务对网络分区故障的容错性。
这三个特性在任何系统中不可能同时满足,最多同时满足两个,其中P是必须满足的。
- 简单来说eureka满足AP,zookeeper满足CP。
- zookeeper要求各个服务之间同步完成之后才会返回给用户结果,如果服务出现网络波动导致监听不到心跳,会立即从服务列表中剔除,服务不可用。
- eureka如果遇到网络故障,基于eureka的自我保护机制,不会立即剔除服务,虽然用户获取的服务不一定是可用的,但是至少可以获取到服务列表。用户访问服务列表后还可以利用重试机制,找到正确的服务。更符合分布式服务高可用的要求。
- eureka集群各个节点之间相互平等,zookeeper有主从之分
- 如果zookeeper集群中有服务宕机,会重新基于选举机制选出新的主节点,因此可能会导致整个集群因为选主而阻塞,服务不可用。
- eureka集群有服务宕机,因为各个节点之间是平等的,其他服务器不受影响。
- eureka中服务发现者是去主动地拉取服务,zookeeper服务发现者是基于监听机制。
- eureka中获取服务列表后会缓存起来,每隔30秒重新拉取服务列表。
- zookeeper是监听节点的信息变化,当服务节点信息发生变化的时候,客户端立即收到通知。