解决什么问题
➟Eureka是什么,在Spring Cloud中有什么用
➟Eureka的特性
➟Eureka为什么更合适做服务注册发现
Eureka简介
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务注册发现功能。原生的eureka,会包含AWS定制功能。
Eureka特性
➟ Eureka通过Jersey框架实现Rest接口(接口详见:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations);
➟ Eureka通过 Peer to peer(p2p) 机制,实现Eureka server多实例的高可用;
➟ Eureka所有网络通信都是基于Http(s)协议;
Eureka和Zookeeper的比较
➟ 根据CAP理论指出,CAP永远不可能同时满足,最多只能同时满足两个,提高其中任意两者的同时,必然要牺牲第三者。分布式系统不可能同时满足C(Consistency一致性)、A(Availablity可用性)和P(Partition Tolerance分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们需要权衡A和C。在此Zookeeper保证的是CP, 而Eureka则是AP。
➟Eureka更合适处理范围更广的网络分割故障。Eureka内置了心跳服务用于淘汰一些“濒死”的服务,节点会进入“自我保护模式”,同时保留那些“心跳死亡”的服务注册信息不过期,当宕机的服务器重新恢复后,Eureka会再次将其纳入到服务器集群管理之中。ZooKeeper下节点断开了,那么会将它们都从自己管理范围中剔除出去,外界就不能访问到这些节点了,即便这些节点本身是“健康”的,可以正常提供服务的,所以导致到达这些节点的服务请求被丢失了。Zookeeper在网络被分割严重时,可能会出现多个Leader的情况。
➟Eureka客户端缓存功能使得即便Eureka集群中所有节点都失效,或者不能访问任何一台Eureka服务器,依然可以通过客户端缓存来获取现有的服务注册信息。
➟ZooKeeper的一致性使得请求能得到一致的数据结果。在热部署或更新了服务配置之后,Eureka每个节点之间的更新会出现一定的时间差,使得部分外部访问到的是新的服务,而部分是老的服务。
➟由于ZooKeeper的CP机制,Leader节点的选取或者事务日志机制,使得设置与维护ZooKeeper服务相对比较困难,同时正确的设置与维护ZooKeeper服务本身也比较折腾,容易出错。相对而言Eureka更容易设置和维护,系统运行时健壮性更强。