Eureka心跳健康检查机制

  • 运行心跳健康检查机制的目的是为了删除Eureka服务器注册表中不可访问的微服务。
  • 心跳是由Eureka客户端发送给Eureka服务器的,让服务器了解其状态
  • 心跳机制需要在微服务嵌入一个客户端,用来发送心跳,但是客户端本身必须确定其自身为健康状态
  • Eureka服务器必须为客户端公开一些REST操作以让其发布心跳。

自我保护机制

EurekaServer不会将EurekaClient服务及时剔除

  • 保护模式主要用与一组EurekaClient客户端和EurekaServer之间存在网络分区场景下的保护。
  • 一旦进入保护模式,EurekaServer将会保护其注册表中的服务,不再删除服务注册表中的数据,也就是不会注销任何微服务

什么是自我保护模式

  • 默认情况下如果EurekaServer在一段时间内(默认90s)没有接受到某个微服务的心跳,那么就会判断这个微服务已经死亡,然后在服务注册表中注销该微服务。
  • 但是当网络分区发生故障(延时、卡顿、拥挤)时,微服务与EurekaServer无法正常通信,但微服务本身是健康的,那么就不应该注销这个微服务。
  • 此时Eureka将会开启自我保护模式来解决这个问题----当EurekaServer节点在短时间内丢失过多客户端时,就会开启自我保护模式,不再注销任何微服务

EurekaServer服务端配置自我保护和剔除无心跳微服务等待时间:

eureka:
	...
	server:
    	# 关闭自我保护机制,保证不可用服务及时剔除
		enable-self-preservation: false
    	# 设置剔除间隔毫秒:2秒内微服务没有心跳就剔除,默认是90s的
		eviction-interval-timer-in-ms: 2000

EurekaClient客户端配置心跳发送间隔和剔除微服务心跳等待时间:

eureka:
	...
	instance:
    # Eureka客户端向服务端发送心跳时间的间隔,单位为秒(默认是30秒)
		lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳后等待时间的一个上限,单位为秒(默认是90秒),超市将剔除服务
		lease-expiration-duration-in-seconds: 2