Eureka深入理解总结

Eureka的一些概念:

Register:服务注册

当eureka client向eureka server注册时,它提供了自身的元数据,比如ip地址、端口、运行状况指示符URL、主页等。当eureka client启动的时候,会自动将自身的信息发送到eureka server。引入eureka-client的jar包,里面有个类DiscoveryClient,这个包含client向server注册的方法register()。服务注册并不是马上注册,跟踪源码,我们发现,服务注册会默认延迟40秒

public int getInitialInstanceInfoReplicationIntervalSeconds() {
    return configInstance.getIntProperty(
        namespace + INITIAL_REGISTRATION_REPLICATION_DELAY_KEY, 40).get();
 }
 

Renew:服务续约

eureka client 每隔30秒发送一次心跳来续约。通过续约来告知eureka server,这个client仍然在存在。没有出现异常,如果连续90秒,server没有收到来自client的续约,那么server将会从服务列表中,将其删除,建议不要更改续约时间。续约调用的也是DiscoveryClient类的renew()方法。服务端的续约是在eureka-core的InstanceResource类,接口方法为renewLease(),它是REST接口。

Fetch registries:获取服务注册列表信息

eureka client可以请求服务器server,获取服务注册列表信息,将其缓存在本地。客户端client会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期每隔30秒,会更新一次,可以通过修改参数eureka.server.responseCacheUpdateIntervalMs来修改时间。返回的服务列表信息,可能和客户端缓存的信息不一样,客户端会自动处理。由于某种原因,客户端不会自动更新的时候,客户端会重新获取整个注册表信息。客户端和服务器之间用json/xml格式进行通信。

cancle:服务下线

eureka client在程序关闭时向eureka 服务器发送取消请求。发送请求后,该客户端实例信息从服务器实例注册表中删除。该下线请求不会自动完成。它需要调用以下内容

DiscoveryManager.getInstance().shutdownComponent();

Eviction:服务剔除

在默认情况下,当eureka client连续90秒没有向eureka server发送续约,也就是心跳,eureka 服务器会将该服务实例从服务列表中剔除,即服务删除

Eureka 的自我保护模式
当一个新的Eureka Server出现时,它尝试从相邻节点获取所有实例注册表信息。如果从Peer节点获取信息时出现问题,Eureka Serve会尝试其他的Peer节点。如果服务器能够成功获取所有实例,则根据该信息设置应该接收的更新阈值。如果有任何时间,Eureka Serve接收到的续约低于为该值配置的百分比(默认为15分钟内低于85%,会统计服务的心跳比率,如果15分钟内心跳比率低于85%,就会进入自我保护模式),则服务器开启自我保护模式,即不再剔除注册列表的信息。

这样做的好处就是,如果是Eureka Server自身的网络问题,导致Eureka Client的续约不上,Eureka Client的注册列表信息不再被删除,也就是Eureka Client还可以被其他服务消费。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值