SpringCloud Eureka自我保护机制介绍及配置

概述:谈到Eureka的自我保护机制时,我们需要知道其中一些客户端和服务端的概念。比如客户端的心跳发送时间间隔、服务续约时间;服务端的服务剔除时间间隔、阈值更新时间间隔。

客户端心跳发送时间间隔(eureka.instance.lease-renewal-interval-in-seconds):当Eureka客户端服务注册到服务端后,客户端会每固定间隔时间会向Eureka服务端发送心跳请求,用来通知Eureka服务端自己服务在正常运行中。

客户端服务续约时间(eureka.instance.lease-expiration-duration-in-seconds):当客户点最后一次发送心跳后,在该服务续约时间内如果没有再向服务端发送心跳链接,则服务器端可以对该服务进行剔除操作。

服务端的服务剔除时间间隔(eureka.server.eviction-interval-timer-in-ms):服务器在每固定间隔时间内会对客户端发送心跳情况进行检查,如果发现存在如上续约时间内,没有再次发送心跳链接的服务端,会对其在服务端内存中进行剔除操作。

阈值更新时间间隔(renewalPercentThreshold) : 服务器更新单位时间内接受心跳数与上次单位时间内的心跳总数的阈值因子值(系统默认配置的因子值为0.85)的间隔时间,默认为15分钟。(本次单位时间接受总数/上次单位时间接受心跳总数)

如上的默认配置时间都可以在org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean 源码中查看。

在了解了上述概念之后,正常情况下Eureka服务端也会按上面情况去运行,当个别客户端在续约时间未发送心跳,在服务端间隔时间内被扫描出来的客户端将会被剔除。但是如果在上面阈值更新时间间隔内统计出新的阈值因子比默认配置的0.85大的时候,Eureka就认为本台EurekaServer节点可能网络出现故障,当做自身问题进行做出处理,EurekaServer在该场景下将不会在去剔除客户端服务信息,对自己机制做出调整,此过程则为Eureka的自我保护机制。(当然也存在可能真的是Eureka客户端服务节点真的都挂了,调用将会出现失败情况)

一、在Eureka控制台页面配置展示服务端IP信息

Eureka客户端实例id: eureka.instance.instance-id,在没有配置的情况下在Eureka控制台默认展示为“服务器名:应用名称:端口”,我们可以通过SpringBoot配置文件对该展示项进行配置调整:我们修改为 ${spring.cloud.client.ip-address}:${server.port} 用ip和端口进行展示。配置文件如下:

server:
  port: 80 #服务端口
spring:
  application:
    name: cloud-order-service #服务名称
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka1.com:7001/eureka/
  instance:
    prefer-ip-address: true #使用ip进行注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务ID
    lease-renewal-interval-in-seconds: 5 #发送心跳间隔时间 秒
    lease-expiration-duration-in-seconds: 10 # 服务续约时间 10秒内没有发送心跳(宕机)

配置前和配置后访问Eureka的控制台页面如下:

 

二、配置Eureka客户端心跳连接时间、服务续约时间配置

在EurekaClient客户端配置文件中通过 eureka.instance.lease-renewal-interval-in-seconds 配置项进行配置心跳间隔时间。默认30秒

在EurekaClient客户端配置文件中通过 eureka.instance.lease-expiration-duration-in-seconds 配置项进行配置服务续约时间。默认 90秒

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka1.com:7001/eureka/
  instance:
    prefer-ip-address: true #使用ip进行注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port} #向注册中心注册服务ID
    lease-renewal-interval-in-seconds: 5 #发送心跳间隔时间 秒
    lease-expiration-duration-in-seconds: 10 # 服务续约时间 10秒内没有发送心跳(宕机)

三、Eureka服务端关闭自我保护以及配置服务剔除时间间隔

在EurekaServer服务端配置文件中通过 eureka.server.enable-self-preservation 配置项进行配置开启关闭Eureka自我保护机制。默认ture

在EurekaServer服务端配置文件中通过 eureka.server.eviction-interval-timer-in-ms 配置项进行配置服务剔除扫描间隔时间。默认 15分钟

eureka:
  instance:
    hostname: eureka1.com
  client:
    register-with-eureka: false #是否将自己注册到注册中心上
    fetch-registry: false #是否从Eureka上获取注册信息
    service-url:
      defaultZone: http://eureka1.com:7001/eureka/
  server:
    eviction-interval-timer-in-ms: 20000 #服务剔除间隔
    enable-self-preservation: false #关闭自我保护机制

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值