Eureka和Zookeeper两个的区别
首先来说说CAP定理
指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性(C)
在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A)
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容忍性(P)
以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。 多数分布式系统都分布在多个子网络。每个子网络就叫做一个区。
注意:CAP三者只能满足其二(不太准确,应该是在保证网络分区P的情况下,只能在C与A之间选一个,如果不是分布式系统,不存在P的情况下C与A都可以满足)
再来说说Zookeeper 的选举机制和半数机制
Zookeeper本质: 文件系统+ 通知机制
选举机制
三个核心选举原则:
(1)Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作;
(2)在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader;
(3)选出Leader之后,之前的服务器状态由Looking改变为Following,以后的服务器都是Follower。
半数机制
集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
举例详细说明一下
假如有5台服务器,id从1到5依次启动
(1)服务器1启动,发起一次选举:
服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成; 服务器1状态保持为Looking;
(2)服务器2启动,再发起一次选举:
服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2;
此时服务器1票数0票,服务器2票数2票,不够半数以上(3票),选举无法完成; 服务器1,2状态保持Looking;
(3)服务器3启动,发起一次选举。
与上面过程一样,服务器1和2先投自己一票,然后因为服务器3id最大,两者更改选票投给为服务器3;
此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数(3票),服务器3当选Leader。服务器1,2更改状态为Following,服务器3更改状态为Leading;
(4)服务器4启动,发起一次选举。
此时服务器1,2,3已经不是Looking状态,不会更改选票信息。选票信息结果:服务器3为3票,服务器4为1票。
此时服务器4服从多数,更改选票信息为服务器3;服务器4并更改状态为Following;
(5)服务器5启动,同4一样投票给3,此时服务器3一共5票,服务器5为0票;服务器5并更改状态为Following;
最终Leader是服务器3,状态为Leading;
其余服务器是Follower,状态为Following。
前面是一些准备知识,接下来总结区别
1.Zookeeper 重CP ,Eureka 重的是AP ,Zookeeper 数据是写入到Leader中,然后再由Leader 将数据同步到 Follwer 中,保证了数据一致性(C),但如果Zookeeper 某个节点挂掉时,会重新的选取Leader,在选取Leader的过程中有可能会导致选取时间过长(一般为30~120s), 整个注册中心就会处于一个瘫痪状态无法对外提供服务,而Eureka 看出了这一点,在设计时,就强调了CAP 中的A,在Eureka集群中,每个节点的地位都是一样的,任何节点挂掉后,剩下的节点都能对外提供服务,保证了A 。
2.Eureka作为Spring Could中的组件,后台Spring 提供了更加强大的技术支持。