本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Netflix Eureka 目录汇总
-
eureka server启动以及初始化
-
eureka client启动以及初始化
-
服务注册
3.1 可重入读写锁-读锁
-
服务发现
4.1. 全量抓取注册表
4.2. 注册表多级缓存机制
4.3. 注册表多级缓存过期机制(主动、定时、被动)
4.4. 增量抓取注册表
4.4.1. 一致性Hash对比机制 4.4.2. 可重入读写锁-写锁 -
服务续约
-
服务下线
-
服务故障自动感知及服务实例自动摘除
-
自我保护机制
-
Eureka Server集群注册表同步及高可用
-
Eureka Server集群注册表同步使用的三层队列批处理机制
-
spring-cloud-netflix-eureka-server注解式启动注册中心
-
spring-cloud-netflix-eureka-client注解式启动服务实例
Netflix Eureka 时间间隔简要
服务注册(延迟40秒执行注册逻辑)
服务发现-
读写缓存-定时过期(180秒)
只读缓存-被动过期(30秒(整30秒))
定时抓取增量注册表(30秒)
定时删除超过3分钟的服务实例变更记录(30秒)
服务续约(30秒)
服务下线
服务故障自动感知及服务实例自动摘除(感知:90秒(BUG:90 * 2秒);摘除:60秒)
自我保护机制
每分钟期望的续约次数 & 每分钟期望的续约次数阈值(15分钟)
MeasuredRate renewsLastMin(60秒)
Eureka Server集群信息更新(10分钟)
spring-cloud-eureka-client注解式启动服务实例
自动装配EnableAutoConfiguration
org.springframework.cloud:spring-cloud-netflix-eureka-client:2.2.1.RELEASE
./META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration,\
org.springframework.cloud.netflix.eureka.reactive.EurekaReactiveDiscoveryClientConfiguration,\
org.springframework.cloud.netflix.eureka.loadbalancer.LoadBalancerEurekaAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfiguration
EurekaClientAutoConfiguration
EurekaClientConfigBean,从application.yml中,将配置项读取出来,通过EurekaClientConfigBean对外提供所有的eureka client相关的配置项的读取。实现的就是EurekaClientConfig接口。
EurekaInstanceConfigBean,同理,加载application.yml中的服务实例相关的配置项。
EurekaClientAutoConfiguration,完成DiscoveryClient的构造和初始化,eureka client初始化和启动的流程,全部在DiscoveryClient中的。EurekaDiscoveryClient,对eureka原生的DiscoveryClient进行了一层封装,实现eureka的DiscoveryClient接口。
EurekaAutoServiceRegistration,将InstanceInfoReplicator组件里面的服务注册的逻辑,进行了一定的封装。在这里提供了服务注册的一些方法。
生命周期接口SmartLifecycle
EurekaAutoServiceRegistration implements AutoServiceRegistration, SmartLifecycle, Ordered, SmartApplicationListener
原生的eureka client的注册里,eureka client启动之后,要延迟40秒,才会去完成注册。EurekaAutoServiceRegistration,里面包含了一个start()方法,在这个spring boot启动之后,直接就会执行start()方法,一启动,直接就去执行注册。
EurekaRegistration包含了一些组件,EurekaClient、ApplicationInfoManager之类的组件。
ApplicationInfoManager.setInstanceStatus()调用的时候,会通知自己所有的注册的监听器,状态发生改变。DiscoveryClient.initScheduledTasks()方法的时候,会给ApplicationInfoManager注册一个监听器,在DiscoveryClient初始化的时候就会调用注册监听器,通知InstanceInfoReplicator.onDemandUpdate()方法。
调用DiscoveryClient.register()方法,完成一个服务的注册。
@EnableEurekaClient
@EnableEurekaClient,其实没什么用。完全可以不实用,只需要导入spring-cloud-netflix-eureka-client包就可以了。
SpringBoot项目启动的时候,会扫描加载所有jar包下的META-INF/spring.factories文件内配置的EnableAutoConfiguration,通过自动装配机制注入启动netflix-eureka-client所需要的一切。
通过自动装配机制触发EurekaClientAutoConfiguration类的执行,完成从application.yml中读取配置,完成DiscoveryClient的初始化和启动,通过自己额外加的一些代码,一启动,直接触发一次register()服务注册,向eureka server完成一次注册。