Eureka
Winn~
这个作者很懒,什么都没留下…
展开
-
Eureka如何实现自我保护机制
1、AbstractInstanceRedistry的evict方法的isLeaseExpirationEnable方法先判断当前心跳是否小于期望心跳 2、如果当前心跳小于期望心跳,压根不让摘除服务实例;如果当前心跳大于期望心跳,才可以摘除部分实例 3、期望心跳是怎么算的呢?numberOfRenewPerMinThreshold 4、AbstractInstanceRegistry的updateRenewPerMinThreshold方法中,期望的服务实例个数*(60/发送心跳的时间间隔)*0.85 5、原创 2021-04-07 10:47:59 · 163 阅读 · 0 评论 -
服务实例是否宕机的后台检查线程任务
1、自动检查服务实例是否宕机的入口:EurekaBootStrap的registry.openForTraffic() 2、PeerAwareInstanceRegistryImpl的openForTraffic()方法 3、在最后一行中有一行super.postInit()方法 4、启动定时任务,每隔60s执行一次 5、在定时任务中,首先先获取补偿时间,然后在通过System.currentTimeMills()>(lastUpdateTimestamp+duration+additionalLea原创 2021-04-07 10:48:10 · 266 阅读 · 0 评论 -
eureka 服务下线
1、入口:EurekaClient的shutdown方法,实现类为DiscoveryClient的shutdown方法 2、取消各种定时任务:同步服务实例、心跳机制、缓存刷新机制 3、发送http请求到服务端取消注册 4、InstanceResource的cancelLease方法接收请求 5、执行AbstractInstanceRegistry的internalCancel方法,完成一些技术,并从存储Lease的map中移除服务实例 6、在recntCanceledQueue添加取消的服务实例 7、更新e原创 2021-04-07 10:48:17 · 251 阅读 · 0 评论 -
eureka client的心跳机制
1、在DiscoveryClient中的initScheduledTasks()方法中创建heartbeatTask心跳定时任务,每隔30s执行一次 2、执行renew()续约方法,通过eurekaTransport向eureka server发送http请求, 3、在eureka core的InstanceResource的renewLease方法中接口来自客户端的服务续约请求,进行相应的续约计数,并更新续约时间戳 4、DiscoveryClient更新最后成功的心跳时间戳lastSuccessfulHe原创 2021-04-01 10:23:49 · 343 阅读 · 0 评论 -
Eureka server的多级缓存机制
1、两级缓存:readOnlyMap是一个ConcurrentMap 、readwriteCacheMap是一个叫LoadingdCahce的一个数据结构 2、getValue时先从readOnlyCacheMap读取,没有的话,从readWriteCacheMap读,在没有的话从注册表读 3、主动过期readWriteCacheMap缓存:服务实例状态变化、服务实例注册、服务下线、服务状态删除 4、定时过期:在readWritCacheMap构建的时候,就设置有效时间为180s, 5、定时任务getCac原创 2021-04-01 10:21:24 · 400 阅读 · 0 评论 -
eureka 如何实现增量抓取
1、定义一个名为recentlyChangeQueue的ConcurrentLinkedQueue, 2、往recentlyChangeQueue放入数据的数据结构中包含放入时间的值 3、设置一个定时任务,每隔30s执行一次:将在recentlyChangeQueue超过3分钟的实例移除掉 4、eureka client每隔30s抓取一个增量注册表,返回最近3分钟内发生变化的实例 5、将抓取到的Application放入本地Applications这样一个数据结构 6、将抓取过来的所有apps生成一个has原创 2021-04-01 10:19:46 · 183 阅读 · 0 评论 -
服务实例InstanceInfo的实例化过程
(1) 使用构造器模式实例化InstanceInfo (2) 先获取一个InstanceInfo.Builder(使用静态内部类实现一个构造器) (3) 从EurekaInstanceConfig读取各种配置信息 (4) 最后builder.setXXX().build()原创 2021-04-01 10:18:19 · 299 阅读 · 0 评论 -
Eureka服务端如何完成注册
1、从ReplicationConcurrencyTest的单元测试方法testReplicationWithRegistrationAndUpdateOnDifferentServers看进去 2、Applicationde 的addInstance方法接收post请求,会传入一个InstanceInfo对象 3、在InstanceInfo获取各种配置信息, 4、进入registry.register()方法进行服务注册 5、在PeerAwareInstanceRegistryImpl中的register原创 2021-04-01 10:17:21 · 204 阅读 · 0 评论 -
Eureka client第一次启动如何全量抓取注册表
1、DiscoveryClient第一次启动时,在DiscoveryClient的构造方法中调用fetchRegistry这个方法抓取全量注册表 2、判断是增量抓取还是全量抓取(getAndStoreFullRegistry) 3、从config中获取要从哪拉取注册表的地址,发送http请求拉取注册表 4、将拉取到的注册表存储到AtomicReference<Applications>中,Applications是一个类的数据结构,里面有一个ConcurrentLinkedQueue<Ap原创 2021-04-01 10:16:04 · 234 阅读 · 0 评论 -
Eureka client初始化过程
(1) 初始化代码在EurekaClient的子类DiscoveryClient的构造方法中 (2) 读取ApplictionInfoManager、EurekaClientConfig、TransportConfig中的配置内容,并根据配置初始化了一些监视器 (3) 初始化心跳和缓存刷新的线程池, (4) 创建缓存刷新任务,并定时调度;创建发送心跳任务,并定时调度(发送心跳任务只需要更新lastSuccessfulHeartbeatTimeStamp时间戳) (5) 注册ApplicationInfoMa原创 2021-04-01 10:14:44 · 176 阅读 · 0 评论 -
Eureka-client服务注册流程
(1) 在eureka-client中只负责构造InstanceInfo对象的各种信息 (2) 在eureka-core中的PeerEurekaNode中的register方法 (3) 在eureka-client中把每一个注册请求封装成InstanceRePlIcationTask任务 (4) 在eureka-client中的EurekaHttpClient中的register方法中调用 (5) 在eureka-client-jersey2中AbstractJersey2EurekaHttpClient中原创 2021-04-01 10:12:36 · 290 阅读 · 0 评论 -
Eureka-core初始化工程
EurekaBootStrap 监听器 contextInitialized(): (1) initEurekaEnvironment:初始化环境,把各种配置参数设置到ConfigurationManager中 (2) InitEurekaServerContext:初始化上下文, ① 获取DefaultEurekaServerConfig,内容来自ConfigurationManager, ② 初始化ApplicationInfoManager和EurekaClient ③ 初始化每个实例的注册信息原创 2021-04-01 10:11:06 · 144 阅读 · 0 评论 -
源码:Euraka-client服务注册流程
在eureka-client中只负责构造InstanceInfo对象的各种信息 在eureka-core中的PeerEurekaNode中的register方法 在eureka-client中把每一个注册请求封装成InstanceRePlIcationTask任务 在eureka-client中的EurekaHttpClient中的register方法中调用 在eureka-client-jersey2中AbstractJersey2EurekaHttpClient中registe方法,通过jerseyC.原创 2020-12-30 10:46:25 · 158 阅读 · 0 评论 -
源码:Eureka-core 初始化工程
代码在EurekaBootStrap的contextInitialized()方法 initEurekaEnvironment:初始化环境,把各种配置参数设置到ConfigurationManager中 initEurekaServerContext:初始化上下文 获取DefaultEurekaServerConfig,内容来自ConfigurationManager 初始化ApplicationInfoManager和EurekaClient 初始化每个实例的注册信息(PeerAwareInstance.原创 2020-12-30 10:43:17 · 117 阅读 · 0 评论