Eureka底层原理与Eureka获取服务实例慢的原因及相关调优

Eureka的基本概念

  1. Register——服务注册
    当Eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址、端口、运行状况指标的Url、主页地址等信息。

  2. Renew——服务续约
    Eureka Client 在默认的情况下会每隔30秒发送一次心跳来进 行服务续约。通过服务续约来告知Eureka Server该Eureka Client仍然可用,没有出现故障。正常情况下,如果Eureka Server在90秒内没有收到Eureka Client的心跳,Eureka Server会将Eureka Client实例从注册列表中删除。注意:官网建议不要更改服务续约的间隔时间。

  3. Fetch Registries——获取服务注册列表信息
    Eureka Client从Eureka Server获取服务注册表信息,并将其缓存在本地。Eureka Client会使用服务注册列表信息查找其他服务的信息,从而进行远程调用。该注册列表信息定时(每30秒)更新一次,每次返回注册列表信息可能与Eureka Client的缓存信息不同,Eureka Client会自己处理这些信息。如果由于某种原因导致注册列表信息不能及时匹配,EurekaClient会重新获取整个注册表信息。EurekaServer缓存了所有的服务注册列表信息,并将整个注册列表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。EurekaClient和Eureka Server可以使用JSON和XML数据格式进行通信。在默认的情况下,Eureka Client使用JSON格式的方式来获取服务注册列表的信息。

  4. Cancel——服务下线
    Eureka Client在程序关闭时可以向Eureka Server发送下线请求。发送请求后,该客户端的实例信息将从Eureka Server 的服务注册列表中删除。该下线请求不会自动完成,需要在程序关闭时调用以下代码:
    DiscoveryManager .getInstance().shutdownComponent() ;

  5. Eviction——服务剔除
    在默认情况下,当Eureka Client连续90秒没有向Eureka Server发送服务续约(即心跳)时,EurekaServer会将该服务实例从服务注册列表删除,即服务剔除。

Register服务注册

服务注册,即Eureka Client向Eureka Server提交自己的服务信息,包括IP地址、端口、ServiceId等信息。如果Eureka Client在配置文件中没有配置ServiceId,则默认为配置文件中配置的服务名,即${spring.application.name}的值。

当Eureka Client启动时,会将自身的服务信息发送到Eureka Server。这个过程其实非常简单,现在来从源码的角度分析服务注册的过程。

在工程的Maven 的依赖包下,找到eureka-client-1 .6.2.jar包。在com.netflix.discovery 包下有一个DiscoveryClient类,该类包含了Eureka Client向Eureka Server注册的相关方法。其中,DiscoveryClient 实现了EurekaClient 接口,并且它是一个单例模式,而EurekaClient 继承了LookupService接口。它们之间的关系如图5-4所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰克说

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值