微服务 – Spring Cloud – Eureka自我保护机制

258 次浏览次阅读
没有评论

自我保护是什么?

自我保护是一种针对网络异常波动的安全保护措施,自我保护能使 Eureka 集群更加的健壮、稳定的运行。

因为 Eureka 客户端会定时的向 Eureka 服务端 发送心跳检测包,默认 30 秒发送一次。发送目的是为了通知 Eureka 服务端 你好,老六。我还在,别删我!。如果超过 90 秒(默认 90 秒),服务端没有收到 Eureka 客户端发送的心跳包,就会认为  My son, you are dead! 我要把你踢出去! 但是如果短时间内丢失了 Eureka 客户端发送的心跳包,Eureka 服务端便会触发自我保护机制。而且 Eureka 服务端的自我保护机制是默认开启的。触发自我保护机制会出现红色字体警告:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

为什么要有自我保护机制?

其实说白了,如果因为网络波动的原因导致的,丢失大量心跳包,直接剔除服务,并不妥当。因为服务可能并没有挂掉。这个时候 Eureka 启动自我保护机制,就会把当前的服务注册信息保护起来。生产环境中非常有用。在生产环境中轻易的剔除某个服务,会导致服务性能下降,甚至是宕机,丢失数据。

场景

开发测试场景下,可以将心跳时间缩短。可以保证服务关闭后能够得到及时的剔除

生成环境下,需要开启自我保护机制。防止服务轻易的被剔除

关闭 Eureka 的自我保护机制

Eureka 服务端的配置

  server:
    enable-self-preservation: false # 禁用自我保护机制
    eviction-interval-timer-in-ms: 2000 # 2 秒钟 

Eureka 客户端配置:

eureka:
  instance:
    # Eureka 服务端 在收到最后一次心跳后等待的时间上限,单位为秒(默认是 90 秒),超时提出服务
    lease-expiration-duration-in-seconds:2
    # Eureka 客户端向服务端发送心跳的时间间隔 单位为秒(默认 30 秒)lease-renewal-interval-in-seconds: 1
正文完
 0
评论(没有评论)