springCloud学习三之Eureka健康检查

本文详细介绍了Eureka Server的自我保护模式,该模式在面临网络故障时防止微服务误注销。当每分钟续约数量低于85%客户端总数时,Eureka会启动保护机制。此外,文章还提到了如何关闭自我保护以及Spring Boot 2.x Actuator监控应用的配置和使用。
摘要由CSDN通过智能技术生成

默认情况下,Eureka Server在一定时间内,没有接收到某个微服务心跳,会将某个微服务注销(90S)。但是当网络故障时,微服务与Server之间无法正常通信,上述行为就非常危险,因为微服务正常,不应该注销。

Eureka Server通过自我保护模式来解决整个问题,当Server在短时间内丢失过多客户端时,那么Server会进入自我保护模式,会保护注册表中的微服务不被注销掉。当网络故障恢复后,退出自我保护模式。

思想:宁可保留健康的和不健康的,也不盲目注销任何健康的服务。

自我保护触发


客户端每分钟续约数量小于客户端总数的85%时会触发保护机制

自我保护机制的触发条件: (当每分钟心跳次数( renewsLastMin ) 小于 numberOfRenewsPerMinThreshold 时,并且开启自动保护模式开关( eureka.server.enable-self-preservation = true ) 时,触发自我保护机制,不再自动过期租约。) numberOfRenewsPerMinThreshold = expectedNumberOfRenewsPerMin * 续租百分比( eureka.server.renewalPercentThreshold, 默认0.85 ) expectedNumberOfRenewsPerMin = 当前注册的应用实例数 x 2

为什么乘以 2:

默认情况下,注册的应用实例每半分钟续租一次,那么一分钟心跳两次,因此 x 2 。

服务实例数:10个,期望每分钟续约数:10 * 2=20,期望阈值:20*0.85=17,自我保护少于17时 触发。

剔除:

AbstractInstanceRegistry

public void evict(long additionalLeaseMs) {

logger.debug(“Running the evict task”);

if (!isLeaseExpirationEnabled()) {

logger.debug(“DS: lease expiration is currently disabled.”);

return;

}

此代码意思:if中判断为true,不走此逻辑,走下面的剔除。如果if为false。走此逻辑,不剔除。

PeerAwareInstanceRegistryImpl

@Override

public boolean isLeaseExpirationEnabled() {

if (!isSelfPreservationModeEnabled()) {

//如果打开自我保护,不进入此逻辑。

// The self preservation mode is disabled, hence allowing the instances to expire.

return true;

}

return numberOfRenewsPerMinThreshold > 0 && getNumOfRenewsInLastMin() > numberOfRenewsPerMinThreshold;

}

关闭


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值