• Eureka系列(九)Eureka自我保护机制


      因为本篇简文并不是自己总结的,而是当了下搬运工,所以直接直接附上原作者博客链接。

    参考链接:
      1.SpringCloud Eureka自我保护机制
      2.Spring Cloud Eureka 自我保护机制


    自我保护背景

      首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行。
      默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。


    自我保护机制

    官方对于自我保护机制的定义:

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

      自我保护机制的工作机制是:如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:
        1.Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
        2.Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。
        3.当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

      因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪


    解决Eureka界面显示自我保护机制信息

    web界面显示如下:image.png

    触发条件:
      Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。
      我们在单机测试的时候很容易满足心跳失败比例在 15 分钟之内低于 85%,这个时候就会触发 Eureka 的保护机制,一旦开启了保护机制,则服务注册中心维护的服务实例就不是那么准确了,此时我们可以使用eureka.server.enable-self-preservation=false来关闭保护机制,这样可以确保注册中心中不可用的实例被及时的剔除(不推荐)。
      自我保护模式被激活的条件是:在 1 分钟后,Renews (last min) < Renews threshold。
      这两个参数的意思:
        Renews threshold:Eureka Server 期望每分钟收到客户端实例续约的总数。
        Renews (last min):Eureka Server 最后 1 分钟收到客户端实例续约的总数。

    解决方式有三种:
      1.关闭自我保护模式(eureka.server.enable-self-preservation设为false),不推荐
      2.降低renewalPercentThreshold的比例(eureka.server.renewal-percent-threshold设置为0.5以下,比如0.49),不推荐
      3.部署多个 Eureka Server 并开启其客户端行为(eureka.client.register-with-eureka不要设为false,默认为true),推荐

    ps:我为自己的搬运行为感到可耻

  • 相关阅读:
    其实吧
    一个很SB的方法,来开始调一个刚启动就SB的程序
    今天真的很SB
    32位程序关闭路径重定向
    WinDbg神断点
    SQLMap用户手册【超详细】

    真有敢干的
    21.递归
    16.数字大小升降排序编写
  • 原文地址:https://www.cnblogs.com/liujunj/p/13401814.html
Copyright © 2020-2023  润新知