Eureka与Zookeeper都是目前主流的服务注册中心,关于这两个注册中心如何去选择?我们就需要明白什么是CAP原则了。
首先来看一张图:
CAP定理:
指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可同时获得,但是三者又会存在交集。
Consistency(C):在分布式系统中的所有数据备份,在同一个时刻是否同样的值(也就是所有的节点在同一时间的数据完全一致,因此节点越多,数据同步的时间就越久)
Availability(A):当负载压力过大时,集群整体是否还能够响应客户的请求(服务一直可用,而且响应时间是正常的)
Partition tolerance(P):分区容错性,也就是高可用性,一个节点崩了,并不会影响其他节点的使用(100个节点,挂了几个,不会影响服务,而且节点越多容错性越高)
我们了解了C、A、P的定义后那我们来分析分析为什么不能同时满足三者:
1.C和A同时满足:
C要保证数据一致,也就是需要同步数据到各个节点需要时间,但是也要保证在正常的响应时间内(A),那么就只能减少节点因此P无法满足。
2.C和P同时满足:
C要保证数据一致,也就是需要同步数据到各个节点需要时间,但是节点(P)也多,因此数据(C)同步需要时间,那么就不能保证正常响应(A)请求了
3.A和P同时满足:
节点多(P),又要在正常的时间内响应(A),那么也就不能保证数据的一致性了(A)
zookeeper和eureka如何选择:
Zookeeper:CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足
Eureka:AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化
根据需求自行选择
结论:
一般我们分布式系统中必须满足的是高可用性(P),所以C和A只能二选一
而在数据敏感的行业中:比如银行之类的对数据要求比较高所以选择zookeeper,而在一些电商行业人流比较大的情况下就需要选择Eureka来确保服务的可用性了。