Eureka源码解析(六)—EurekaServer自我保护机制

EurekaServer自我保护机制

  • Eureka的自我保护机制的意义在于当EurekaServer由于自身发生网络故障等原因无法接收到EurekaClient端发送的心跳(续约)时,不会将未收到心跳(续约)请求的服务下线,虽然这样短时间内可能造成EurekaServer维护的注册列表信息不是完全准确的,但保证了EurekaServer可用性。主要通过expectedNumberOfRenewsPerMin,numberOfRenewsPerMinThreshold这两个值判断是否进入自我保护模式,当每分钟收到的心跳数量小于期望收到的心跳数量,EurekaServer便会进入自我保护模式,不会剔除任何一个服务,直到心跳回复正常后退出自我保护模式

  • EurekaServer有多处会进行计算expectedNumberOfRenewsPerMin,numberOfRenewsPerMinThreshold这两个值,但其实计算方法基本都是一样的,这里主要看一下服务注册和服务下线的时候,EurekaServer如何计算这两个值

  • 服务注册

    if (this.expectedNumberOfRenewsPerMin > 0) {
        // Since the client wants to cancel it, reduce the threshold
        // (1
        // for 30 seconds, 2 for a minute)
        // 每分钟期望收到的心跳(续约)次数增加两次
        this.expectedNumberOfRenewsPerMin = this.expectedNumberOfRenewsPerMin + 2;
        // 每分钟期望最小心跳(续约 )次数 = 修改后的expectedNumberOfRenewsPerMin * 默认的0.85
        this.numberOfRenewsPerMinThreshold =
            (int) (this.expectedNumberOfRenewsPerMin * serverConfig.getRenewalPercentThreshold());
    }
  • 服务下线

    // EurekaServer自我保护机制
    synchronized (lock) {
        if (this.expectedNumberOfRenewsPerMin > 0) {
            // Since the client wants to cancel it, reduce the threshold (1 for 30 seconds, 2 for a minute)
            // 每分钟期望收到的心跳(续约)次数减少两次
            this.expectedNumberOfRenewsPerMin = this.expectedNumberOfRenewsPerMin - 2;
            // 每分钟期望最小心跳(续约 )次数 = 修改后的expectedNumberOfRenewsPerMin * 默认的0.85
            this.numberOfRenewsPerMinThreshold =
                (int) (this.expectedNumberOfRenewsPerMin * serverConfig.getRenewalPercentThreshold());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值