在分布式领域中像zokeerper,etcd,这些应用都需要选主算法来选定主服务器,为什么eureka却不需要呢。
CAP
在解释之前我们需要先了解下分布式领域的CAP理论,
- C - Consistency 一致性
- A - Availability 可用性
- P - Partition tolerance 分区容忍性
CAP的理论提出这三者不可兼得,而p分区容忍性显然是不可或缺的。
P
分区容忍性 表示分布式系统在一部分服务不可用时依然可以向外提供服务。
这显然是分布式应用的基础,所以只能在a和c上做文章了
C
一致性 意思是,写操作之后的读操作,必须返回该值
要实现这一功能,那必须在写后同步到其它节点才算写入成功,这无疑降低了性能,也就是失去了A 可用性
A
可用性 其实就是高可用,关注程序的性能,响应时间
要保证高可用必然要丢弃数据的一致性
eureka为什么选择ap,这跟他的功能有关,他只专注于服务注册和发现,并不会出现数据的竞态条件:
竞态条件 有同时多个线程竞争同一数据,可能会发生数据不正确的问题
如图:每个client只会向一个eureka server注册,所以并不会出现数据竞态条件,eureka server只需要将其它节点的数据来取过来就好,并不会出现在别的节点拉取到和自己不一致的数据的问题。
就算出现了,数据不一致问题,比如一个client宕机后重启链接了其它节点。因为是用于服务注册,只要覆盖就旧数据就好了。
eureka保证的是最终一致性,最终所有eureka server中的数据会保持一致。
所以因为eureka专注于服务注册发现,可用放弃C来保证A,同时也不需要复杂的选举算法。性能也要高于etcd和zokeerper。