eureka 总结

eureka
服务注册与发现, 通过心跳机制续约包活,结合 ribbon 实现负载均衡,集群节点相互复制,相互守望


Register 
EurekaClient 注册到 EurekaServer
EurekaClient 会发送自己元数据( ip, port, 服务名称),EurekaServer 会将其添加到服务注册列表ConcurrentHashMap 里


Renew 
EurekaClient 默认每 30 秒发送心跳给 EurekaServer 续约包活,
EurekaServer 将 EurekaClient 心跳中的时间戳更新到服务列表,如果 EurekaServer 90 秒都没收到某个EurekaClient 的续约,就会将该服务从服务列表剔除(Eviction)


Get Registry 
EurekaClient 默认每 30 秒从 EurekaServer 获取服务注册列表并更新缓存


Cancel 
EurekaClient 服务的下线


Make Remote Call
EurekaClient 服务间进行远程调用,比如通过 RestTemplate + Ribbon 或 Fegin


Replicate 
EurekaServer 集群节点之间同步服务注册列表

特性
1.AP
非强一致, 要求客户端支持负载均衡及失败重试

2.对等复制
每个节点都接受写操作, 节点之间相互同步数据

数据冲突问题
通过比较节点数据的版本号 lastDirtyTimestamp 来同步最新的数据

3.Zone, Region
默认数据同步只会发生在 Region 下面的多个 Zone 之间, 跨 Region 不会同步

4.self preservation
eureka server 收不到服务心跳有两种情况,一种是个别服务挂了,就走服务续约失效剔除的机制
如果 Eureka Server 默认90秒没有接收到某个微服务实例的心跳,Eureka Server 将会剔除该实例

收不到心跳还有一种情况就是微服务实例正常,但由于网络分区故障没收到心跳,这种情况就不应该剔除服务,所以就有了自我保护机制,如果在 15 分钟内超过 85% 的客户端节点都没有正常的心跳,Eureka Server 自动进入自我保护机制, 就会关闭服务续约失效剔除的机制

优点
1.java 语言开发, 便于 java 团队排查问题
2.跟 Zuul, ribbon 整合的比较好


一个服务启动后最长可能需要 90s 才能被其它服务感知到 -- 3处缓存
1.EurekaServer 对服务列表做了 30s response cache 缓存

2.Eureka Client 对 EurekaServer 返回的服务列表做了 30s 本地缓存

3.Ribbon 从 Eureka Client 本地获取服务列表 缓存 30s

问题
服务已经下线, eureka 返回的信息还在
1.应用实例异常挂掉没有请求 eureka 服务下线,需要等 eureka 的 evictionTask 去剔除
evictionTask 的时间间隔可以调小一点, 默认 60s, 可以调到 5s
eureka.server.eviction-interval-timer-in-ms

2.网络分区故障导致自我保护模式开启,需要等自我保护模式退出, 恢复租约失效剔除功能
开发测试环境可以关闭自我保护模式
eureka.server.enable-self-preservation=false
生产环境可以修改配置,增加触发自我保护的门槛
//# 默认0.85
eureka.server.renewalPercentThreshold=0.49 
//# 默认30
eureka.instance.leaseRenewalIntervalInSeconds=10 

3.应用实例正常关闭成功请求 eureka 服务下线,需要等 eureka 的 rest api 的 response cache 缓存过期才能更新
可以关闭
eureka.server.user-read-only-response-cache=false
或者调整过期时间
eureka.server.response-cache-auto-expiration-in-seconds=60

服务上线后, eureka client 未能及时获取到
可以适当提高拉取服务列表的频率
eureka.client.registry-fetch-interval-seconds=5


EurekaClientConfigBean
eureka.client 配置类

EurekaInstanceConfigBean
eureka.instance 配置类

LeaseManager
注册微服务实例接口, 用于服务注册, 服务注销, 服务续约, 服务续约过期剔除

LookupService
eureka client 从 eureka server 获取微服务实例的接口
---------------------------------------------
InstanceInfo 注册的服务实例信息
---------------------------------------------
instanceId 实例 id
app 应用名
hostName 主机名称
ipAddr ip 地址
port 端口号
securePort https 的端口号
------------------------
status 实例状态
------------------------
UP 可以接受请求
DOWN 不接受请求, 健康检测失败或服务下线了
STARTING 启动中, 暂不接受请求
OUT_OF_SERVICE 暂定服务
UNKNOWN
------------------------
leaseinfo 租约信息
lastUpdatedTimestamp 状态信息最后更新时间
lastDirtyTimestamp 实例信息最新过期时间, 用于多节点之间同步数据
---------------------------------------------

---------------------------------------------
LeaseInfo 租约信息
---------------------------------------------
// Client settings
// 续约间隔时间, 默认 30s
renewalIntervalInSecs 
// 续约有效时长, 默认 90s
durationInSecs 
// Server populated
// 注册时间
registrationTimestamp 
// 最后一次续约时间
lastRenewalTimestamp 
// 服务实例被剔除时间
evictionTimestamp 
// 服务实例上线时间
serviceUpTimestamp 
---------------------------------------------
eureka 主主集群
相互注册, 相互守望, 相互复制
7001 注册到 7002, 7002 注册到 7001, 通过心跳续约保活, 每个节点相互复制服务列表

1.配置文件
application-8761.properties
server.port=8761
eureka.instance.hostname=Eureka8761
eureka.client.serviceUrl.defaultZone=http://admin:002310@Eureka8762:8762/eureka
----------------------------------
application-8762.properties
server.port=8762
eureka.instance.hostname=Eureka8762
eureka.client.serviceUrl.defaultZone=http://admin:002310@Eureka8761:8761/eureka

2.eureka 客户端配置
eureka.client.serviceUrl.defaultZone=http://admin:002310@Eureka8761:8761/eureka, http://admin:002310@Eureka8762:8762/eureka

3.启动
java -jar springcloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=8761
java -jar springcloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=8762


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叫我三师弟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值