Eureka与Zk
一、先说说CAP
C(一致性)、A(高可用)、P(分区容忍)
1. 一致性
读操作获取到最新的写结果
2. 高可用
非故障节点在用户可接受的时间内返回可以接受的结果(不接受超时或错误)
3. 分区容错
部分服务可以不可用,但系统必须正常对外提供服务
三者不可得兼,但分布式系统必须保证分区容错P,所以只能是CP或者AP
二、zk(CP)
zk保证了数据一致性,意味着丢失了可用性。
线上的机器网络不稳定是常有的事,master在宕机后,zk将花很长的时间(30s~120s)
用在重新选举上,并且在选举期间,zk集群不可用。
2n+1台server,只要有n+1台就可以使用。也就是说,少于一半集群就无效了
三、Eureka(AP)
Eureka集群的各个节点都是平等的,通过长连接来维持心跳。
几个节点挂掉后,不会影响正常的节点。客户端发现节点连接失败,会自动切换到其他
正常节点,只要集群中有一个节点还在,就能保证服务可用(可用性),只不过数据可能不
是最新的(不保证一致性)。此外,Eureka还提供了自我保护机制,如果在15分钟内超过85%
的节点没有心跳,Eureka会认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
1. 不会注册列表中移除因为长时间没有心跳而过期的服务
2. 依然会接受新的注册请求,只不过不会同步到其他节点
3. 网络恢复后,当前实例新的注册信息将同步到其他节点
每一步脚印都要扎得深一点!