简介
https://github.com/Netflix/eureka
简单使用
工作原理
**
服务端(中介)
Eureka Server作为一个开箱即用的服务注册中心,提供的主要功能包括:服务注册、心跳检测、服务发现(向client提供服务注册表)、服务剔除、服务下线等
需要注意的是,Eureka Server同时也是一个Eureka Client,在不禁止Eureka Server的客户端行为时,它会向它配置文件中心的其他Eureka Server进行拉取注册表、服务注册和发送心跳等操作。
自我保护机制
eureka. server. enab1e-se1f-preservation=true
固定时间内大量实例被注销,可能会严重威胁整个微服务架构的可用性。触发自我保护机制后行为发生改变:
如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
- Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
- Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
- 当网络稳定时,当前实例新的注册信息会被同步到其它节点中
因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪
服务集群**
eureka server可以集群部署,多个节点之间会进行(异步方式)数据同步,保证数据最终一致性。
- 多个Eureka Server之间通过P2P复制的方式完成服务注册表的同步
- 某台服务器宕机,Eureka不会有类似于ZooKeeper的选举leader的过程
客户端(提供者、消费者)
服务提供者、服务消费者
Eureka Client是一个Java客户端,用于简化与Eureka Server 的交互。Eureka Client会拉取、更新和缓存Eureka Server中的信息。因此当所有的Eureka Server节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,只是当服务有更改的时候会出现信息不一致,此时调用到已下线服务会导致请求失败,只能依靠consumer端的容错机制来保证。Register:服务注册
服务提供者启动时,会通过Eureka Client向Eureka Server注册信息,提供自身的元数据,比如IP地址、端口、运行状况指示符URL、主页等,Eureka Server 会存储该服务的信息,Eureka Server内部有二层缓存机制来维护整个注册表Renew:服务续约
Eureka Client会每隔30秒发送一次心跳来续约。通过续约来告知Eureka Server该Eureka Client运行正常,没有出现问题。Eviction:服务剔除
默认情况下,如果Eureka Server在90秒内没有收到Eureka Client的续约,Server端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。Cancel:服务取消
Eureka Client在程序关闭时向Eureka Server发送取消请求。发送请求后,该客户端实例信息将从Eureka Server的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:GetRegisty:获取注册列表信息
Eureka Client 从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与Eureka Client的缓存信息不同,Eureka Client自动处理。
如果由于某种原因导致注册列表信息不能及时匹配,Eureka Client 则会重新获取整个注册表信息。Eureka Server缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka Client和Eureka Server可以使用JSON/XML格式进行通讯。
在默认情况下Eureka Client使用压缩JSON格式来获取注册列表的信息。Remote Call:远程调用
当Eureka Client从注册中心获取到服务提供者信息后,就可以通过Http 请求调用对应的服务;服务提供者有多个时,Eureka Client客户端会通过Ribbon(Eureka 集成了Ribbon)进行负载均衡。AP与CP
CAP理论指的是 一致性(Consistency) ,可用性(Availability), 分区容错性(Partition tolerance) ,在分布式中,网络是不可控的,所以首先要保证 P ,然后在A和C之间做选择,要么AP ,要么CP。
Eureak选择AP 保证了可用性,降低了一致性( Nacos 默认 AP ,可以 CP和AP可以切换 , Zookeeper 就是 CP ; Redis AP)深究
Eureka是通过REST接口对外提供服务的缓存的机制
Eureka还实现了二级缓存来保证即将对外传输的服务信息服务同步机制
服务同步是Server节点之间的数据同步。分为启动时同步,运行时同步参考
https://segmentfault.com/a/1190000021284890(https://segmentfault.com/u/maomao_5d7218aed983f)
https://github.com/Netflix/eureka
http://www.360doc.com/content/20/0425/10/43093483_908245846.shtml
https://zhuanlan.zhihu.com/p/88385121