Eureka
2024-07-20 18:38:19 0 举报
AI智能生成
Eureka是一款高效实用的会议记录软件,可以帮助用户快速准确地记录会议内容。它可以自动识别并整理会议中的关键信息,包括与会人员、讨论话题、行动项等,并将其清晰地展示在会议记录中。此外,Eureka还具有语音识别功能,可以将录音内容实时转换为文字,进一步提高了记录效率。无论是企业内部会议还是与合作伙伴的谈判,Eureka都能为用户提供准确的会议记录,为决策提供有力支持。
作者其他创作
大纲/内容
EurekaServer和Client的启动流程
启动整体流程图
原理
源码
启动关键逻辑
源码
Client启动
流程图
关键点
从统一配置管理器中获取配置,保存到对象属性中
如果这两个参数为 false,代表eureka服务端以单机方式启动,方法将提前返回
如果eurekaClient 以普通方式启动: 初始化三个线程池
构造 client 与 server 网络通信的组件,初始化相关通信参数
拉取注册表核心逻辑,如果抓取失败了,则从备份注册表中拉取
配置
不会向任何其他的eureka server来注册
eureka.client.registerWithEureka=false
不会从其他的eureka server来抓取注册表
eureka.client.fetchRegistry=false
Client
服务注册
源码
流程图
关键信息
第一次注册要延迟40s注册
每个四十秒会检查一次实例信息是否有更新,如果有更新,再次将实例信息注册到服务端
服务发现
client抓取注册表
第一次启动
全量拉取注册表的信息
调用jersey client,发送http请求(http://localhost:8080/v2/apps),GET请求,调用eureka server的getApplications restful接口,获取全量注册表,缓存在自己的本地
后续拉取
原理图
后续每隔30S增量拉取注册表的信息,跟本地缓存进行合并
缓存的原理图
多级缓存
多级缓存过期机制
服务续约
流程
DiscoveryClient初始化的时候,会去调度一堆定时任务,其中有一个就是HeartbeatThread,心跳线程
默认是每隔30秒去发送一次心跳,每隔30秒执行一次HeartbeatTHread线程的逻辑,发送心跳
走的是EurekaHttpClient的sendHeartbeat()方法,http://localhost:8080/v2/apps/ServiceA/i-000000-1,走的是put请求
负责承接服务实例的心跳相关的这些操作的,是ApplicationsResource,服务相关的controller。
通过注册表的renew()方法,进去完成服务续约,实际进入AbstractInstanceRegistry的renew()方法
从注册表的map中,根据服务名和实例id,获取一个Lease<InstanceInfo>。更新一下lastUpdateTimestamp这个时间戳
lastUpdateTimestamp = System.currentTimeMillis() + duration(90)
相关配置
客户端心跳间隔时间
eureka.instance.lease-renewal-interval-in-seconds = 30
服务端剔除实例时间
eureka.instance.lease-expiration-duration-in-seconds = 90
Server
服务下线
原理图
流程
服务实例主动下线,
通知server进行注册表下线的功能
源码
服务剔除
流程
server每60s执行定时剔除任务
如果有没有发送心跳续约的实例,则将这个实例从注册表中剔除
官方承认的BUG
一个实例3min都没有发送心跳,才会被剔除,而不是1min30s。
关键代码
配置
服务失效定时剔除任务的间隔时间
eureka.evictionIntervalTimerInMs = 60 * 1000
服务失效 心跳阈值,配置为0则关闭分批下线的功能
eureka.renewalPercentThreshold = 0.85
自我保护
原理图
流程
eureka-sever如果在1min内,发现超过15%的大量服务实例下线了,
会认为是自身出了问题,这时不会将这些服务实例剔除
验证server端每分钟需要收到的总心跳数和阈值,阈值默认是心跳数*0.85。
服务实例个数 * (60 / 心跳时间间隔) * 0.85 = 每分钟最少的心跳次数。
配置
是否启动server自动保护机制
eureka.enableSelfPreservation = true
BUG
如果说有很多的服务实例都是故障下线的,摘除了。结果每分钟期望的心跳次数并没有减少,但是实际的服务实例变少了一些,就会导致实际的心跳次数变少,如果说出现较多的服务实例故障被自动摘除的话,很可能会快速导致eureka server进自我保护机制。
服务同步
源码
流程图
注册表同步
流程
server本身也是一个client,会在server启动的时候拉取其他server端的全量注册表
当拉取到注册表之后,将注册表中的所有应用的实例全部在本server注册一遍。
后台有定时任务每隔10分钟维护一个节点信息
同步实例状态
当eureka-client向某个server发起注册或者下线等等重要的通信动作时
完成自己的处理请求逻辑
将client信息同步到集群内其他节点
采用批处理
批处理思想
整体的流程图
概要版
明细1
明细2
spring-could结合
@EnableEurekaServer
触发了EurekaServerAutoConfiguration的执行
完成了原来BootStrap初始化和启动eureka server的几乎一模一样的所有的代码逻辑
@EnableEurekaClient
触发了EurekaClientAutoConfiguration的执行
完成了DiscoveryClient的构造和初始化,eureka client初始化和启动的流程
PS:spring boot启动直接就会执行start()方法,不要按照原来的40秒才去注
0 条评论
下一页