Eureka自我保护机制

介绍

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。这符合CAP理论中的AP(高可用性、分区容错性)

网络分区见博客:https://www.cnblogs.com/sunlong88/p/13180586.html

故障现象

当eureka的web界面出现了如下提示,则说明eureka进入了自我保护模式
在这里插入图片描述

自我保护模式的激活条件

在这里插入图片描述

  • Renews threshold:Eureka Server 期望每分钟收到客户端实例续约的总数
  • Renews (last min):Eureka Server 最后 1 分钟收到客户端实例续约的总数。

自我保护模式被激活的条件是:在 1 分钟后,Renews (last min) < Renews threshold
然后等待五分钟就会出现上面的故障现象,红色的提示信息

Renews threshold和Renews(last)的计算方式是什么?

Renews threshold的计算方式

Renews threshold 计算代码:

this.expectedNumberOfRenewsPerMin = count * 2;
this.numberOfRenewsPerMinThreshold = (int) (this.expectedNumberOfRenewsPerMin * serverConfig.getRenewalPercentThreshold());
// this.numberOfRenewsPerMinThreshold就是Renews threshold

变量介绍

  • count:表示服务的数量
  • serverConfig.getRenewalPercentThreshold():默认是0.85,可以通过eureka.server.renewal-percent-threshold进行配置

对应源码在AbstractInstanceRegistry类中的openForTraffic方法

public void openForTraffic(ApplicationInfoManager applicationInfoManager, int count) {
   this.expectedNumberOfRenewsPerMin = count * 2;
   this.numberOfRenewsPerMinThreshold =
           (int) (this.expectedNumberOfRenewsPerMin * serverConfig.getRenewalPercentThreshold());
    }

Renews(last min)的计算方式

Renews(last min)计算代码

this.expectedNumberOfRenewsPerMin = count * 2;
// Renews(last min)的值就是this.expectedNumberOfRenewsPerMin表示期望每分钟最大续约次数

数值2表示每分钟两个心跳

自我保护模式详细说明

默认情况下,当EurekaServer在一定时间内(默认90秒)没有接收到某个客户端实例的心跳,EurekaServer将会注销该实例。
但是如果Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否高于 85%,如果高于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

推荐指数⭐参考博客https://www.cnblogs.com/xishuai/p/spring-cloud-eureka-safe.html
推荐指数⭐⭐参考博客https://www.cnblogs.com/zhixiang-org-cn/p/11756764.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值