精华内容
下载资源
问答
  • Eureka自我保护机制

    2018-07-31 09:33:07
    在生产环境中,可能由于网络原因导致服务心跳超时等等,可以使用Eureka的自我保护机制,它不会删除已经因为长时间没收到心跳而应该过期的服务 具体配置: application.properties #关闭eureka自我保护机制,修改...

    在生产环境中,可能由于网络原因导致服务心跳超时等等,可以使用Eureka的自我保护机制,它不会删除已经因为长时间没收到心跳而应该过期的服务

    具体配置:

    application.properties

    #关闭eureka自我保护机制,修改检查失效服务的时间
    eureka.server.enable-self-preservation=false
    #减少心跳时间
    eureka.instance.lease-expiration-duration-in-seconds=10
    eureka.instance.lease-renewal-interval-in-seconds=3

    它默认是打开的,测试环境要关闭,生产环境打开

    展开全文
  • 主要介绍了浅谈Spring Cloud Eureka 自我保护机制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 深度解析Eureka的自我保护机制

    千次阅读 2020-11-25 21:31:44
    原创不易,转载请注明出处 文章目录1.自我保护机制介绍2.实现原理3.源码解析总结 1.自我保护机制介绍 2.实现原理 3.源码解析 总结

    原创不易,转载请注明出处


    1.自我保护机制介绍

    在这里插入图片描述

    想必用过eureka 的同学都在eureka web控制台见过这么一行大红字,我现在还能想起来第一次用eureka 出现这个的心里的那种感觉,什么东西,这么显眼,然后就很懵逼,立马搜了一下这个是什么鬼,就搜到说eureka自我保护机制触发了,说是 “eureka 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,eureka 会将这些实例保护起来,让这些实例不会过期”(需要注意这句话的前半部分,我们这篇文章将用源码推翻它),其实就是某段时间内收到心跳数量低于期望心跳数量85%,就会触发这个自我保护机制,这个时候,服务实例将不会被过期。

    2.实现原理

    一个核心原理:实际收到的心跳 小于 我心里能接受的最小心跳数 ,这个时候就会触发eureka 自我保护机制

    两个概念(都很好理解):

    1. 一个是期望心跳数期望心跳数与服务实例多少是有关系的,比如说我注册表中有10个实例,然后每30s发送一次心跳(也就是续约),那么我这个每分钟期望心跳数就是 10 * 2 ,也就是我期望收到 20个心跳。
    2. 还有一个是我心里能接受的最小心跳数,网络环境这么复杂,你总不能让这些实例的心跳一个都不少吧,所以这里就出现了一个心里能接受的最小心跳数(心跳数阈值),它的计算方式就是 期望心跳数 * 0.85 (这个0.85 是默认的,是不是与上面那个85% 就对起来了)

    有了 期望心跳数最小心跳数阈值,我们现在还差的是啥?
    那就是统计收到的心跳数
    比如说我专门有个计数器,然后以一个时间单位为一个窗口,就是统计每分钟收到的心跳次数(续约次数),其实光有收集当前分钟心跳数的计数器还不够,总不能拿当前分钟的心跳数与心里能接受的最小心跳数 做比较吧,那分钟开始的时候,肯定会触发这个自我保护机制(毕竟分钟开始的时候,没收到多少心跳)
    这个时候一个计数器就不够了,还得需要一个,一个用于统计当前分钟收到的心跳数量一个用于存储上一分钟收到的心跳数,然后拿上一分钟收到的心跳数 与 心里能接受的最小心跳数 做比较,然后小于心里能接受的最小心跳数,就触发自我保护机制。
    有了2个心跳计数器,还不够,还缺一个定时器,然后每分钟执行一次将 当前分钟收集到的心跳数存储上一分钟这个计数器上,然后将当前分钟计数器清0,表示开启新一轮的计数。

    到这里,其实大体上就已经讲清楚了,但是还有几个点

    1. 最开始的时候期望心跳数是怎么出来的?
    2. 服务注册,服务下线 这个期望心跳数是怎样变化的?

    现在解答一下:

    1. 最开始的时候,eureka server 启动会去其他server节点上拉取注册表,如果拉到注册表的话,遍历注册表里面的实例信息,然后挨个 按照注册的方式 注册到本机的注册表上,它会有一个返回一个注册多少实例count ,接着就是按照这个count *2 初始化的。
    2. 服务注册的时候,期望心跳数 +2 ,我多一个实例,一个实例每分钟默认发送2个心跳,这个时候就会+2 。服务下线的时候 期望心跳数 -2,然后心里能接受的最小心跳数 也会重新算一遍。
      好了,以上就是eureka 自我保护机制的实现原理了,只不过我用自己的话将代码翻译了一遍,如果还是不能明白,可以看一下第4节的那张图。接下来我们就要看一下源码了

    3.源码解析

    3.1期望心跳数我心里能接受的最小心跳数

    先看一下关于 期望心跳数我心里能接受的最小心跳数 变量的定义
    在 eureka-core 项目的注册表抽象类AbstractInstanceRegistry 中定义了这两个变量
    在这里插入图片描述
    接着看下初始化,服务注册,服务下线 期望心跳数我心里能接受的最小心跳数 变动。

    3.1.1 初始化

    eureka server在启动的时候,会进行初始化,它会到其他server 节点上同步一下注册表,然后注册到自己本地的注册表中,这个时候会返回一个同步数量count,后面注册表中的这两个变量会根据这个count计算出来
    在这里插入图片描述
    先是同步注册表,返回同步实例的数量。
    在这里插入图片描述
    接着就是调用注册表的 openForTraffic 方法,初始化这两个变量,改变applicationInfoManager 为up状态,完成注册表 初始化之后的动作
    这里期望心跳数 直接就是同步实例数量*2 ,我心里能接受的最小心跳数期望心跳数 * 0.85(默认是0.85)

    3.1.2 服务注册

    在注册表抽象类AbstractInstanceRegistry 中的register方法中
    在这里插入图片描述
    可以看到 期望心跳数 +2 ,然后 我心里能接受的最小心跳数 重新算了一遍。

    3.1.3 服务下线

    这个是在注册表抽象类AbstractInstanceRegistry 的实现类PeerAwareInstanceRegistryImpl中的cancel 方法做的处理
    在这里插入图片描述
    它这里有个很大的问题就是这个+2 和-2 直接写死了,如果我心跳间隔改变了,这个时候不是30s发一次心跳了,变成了1分钟一次,然后eureka 就会一直处于自我保护机制中。

    3.2 关于计数器

    3.2.1 计数器初始化

    eureka server 启动的时候,会执行一堆初始化,这个是在EurekaBootstrap中的,之后就是创建注册表,在注册表抽象类AbstractInstanceRegistry的构造方法中创建了这个计数器。
    在这里插入图片描述
    然后再初始化最后面调用了一下注册表的openForTraffic 方法,初始化期望心跳数我心里能接受的最小心跳数 这两个变量,改变applicationInfoManager 为up状态,完成注册表 初始化之后的动作,就在注册表 初始化之后的动作里面启动了计数器。
    在这里插入图片描述
    先来看下 MeasuredRate 这类中关键的几个成员变量:
    在这里插入图片描述
    它的start 方法其实就是启动这个定时任务
    在这里插入图片描述
    它这里是1分钟执行一次,就是sampleInterval 这个成员决定的,这个成员实在创建这个对象的传过来的,然后就是1分钟。
    看下这个画红框的代码,其实就是将 当前分钟收集到的心跳数存储上一分钟这个计数器 lastBucket上,然后将当前分钟计数器 currentBucket清0,表示开启新一轮的计数。

    3.2.2 心跳计数

    其实每收到一个心跳(续约),都会给currentBucket 这变量自增1,我们看一下代码
    在这里插入图片描述
    在这里插入图片描述

    3.3 关于自我保护模式的判断

    在这里插入图片描述
    在这里插入图片描述
    上面就是就是自我保护模式的判断了,很清楚。

    3.4 eureka web中那行大红字

    在resource 的header.jsp中有这么几行
    在这里插入图片描述
    先是调用注册表的isBelowRenewThresold 方法判断是不是触发了自我保护机制
    在这里插入图片描述
    要想显示那行触发自我保护机制的大红字,需要 系统启动了5分钟以上,而且触发了自我保护机制,其实还需要isSelfPreservationModeEnabled 这个参数是true,这样子才会显示这个触发自我保护的大红字

    3.5 触发自我保护对过期下线的影响

    在注册表 postInit方法中,其实还启动一个定时任务,扫描那些过期的实例,然后进行服务下线动作,这里主要是介绍触发自我保护对过期下线的影响,不会深入剖析服务扫描下线这一堆的东西
    在这里插入图片描述
    这个定时任务是1分钟执行一次的。
    在这里插入图片描述
    进入这个evict 方法中。
    在这里插入图片描述
    如果触发了自我保护机制就不往下走了,其实下面就是扫描注册表中所有的实例信息,然后看看过没过期,过期就走服务下线逻辑。我们来看下这个isLeaseExpirationEnabled方法的实现。
    在这里插入图片描述
    如果没有启用这个自我保护机制的话,直接通过,走下面服务扫描过期的逻辑。如果启用了,还用判断 收到的心跳数大于期望最小心跳数 ,这个时候才能继续往下走,如果是小于的话,就是触发自我保护机制了,就不会再往下走了,也就是不会再扫描下线过期的实例。

    4.一张图

    在这里插入图片描述

    总结

    本篇文章主要是介绍了eureka自我保护机制的实现原理,不管是语言描述,还是代码剖析,都已经很明了了。我没有找到所谓的 15分钟内
    心跳失败比例小于85% 就是触发自我保护机制,在源码中,我只分析出 你上一分钟心跳数 低于 期望心跳数的85% 就会触发自我保护机制,我不知道他们所谓的15分钟是哪里的,我只相信源码出真知,然后这里还发现计算期望心跳数 的硬编码问题,如果你心跳间隔改变了,不是30s了,就很容易出现bug。

    展开全文
  • 主要介绍了SpringCloud Eureka自我保护机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 文章目录eureka 自我保护机制关闭自我保护机制呢。 eureka 自我保护机制 如果出现下面红色框内 信息,说明eureka 开启了自我保护机制。 在默认情况下eureka会自动开启自我保护机制 关闭自我保护机制呢。 yml文件中...

    eureka 自我保护机制

    如果出现下面红色框内 信息,说明eureka 开启了自我保护机制。
    在这里插入图片描述

    在默认情况下eureka会自动开启自我保护机制

    在这里插入图片描述

    关闭自我保护机制呢。

    yml文件中配置

    eureka:
    
          # 禁用eureka 自我保护机制  false  表示关闭 默认是ture 表示 开启
      server:
        enable-self-preservation: false 
    
    
    展开全文
  • eureka自我保护机制

    2020-03-24 11:34:00
    并不是很理解,就此学习一下eureka的自我保护机制。 renewal-percent-threshold 从这个配置说起,从字面角度来说就是心跳的百分比临界值。我们都知道所有的服务都需要去向eureka服务器进行注册,并且维持心跳。这个...

    在eureka项目中看到一个配置:renewal-percent-threshold。并不是很理解,就此学习一下eureka的自我保护机制。

    renewal-percent-threshold

    从这个配置说起,从字面角度来说就是心跳的百分比临界值。我们都知道所有的服务都需要去向eureka服务器进行注册,并且维持心跳。这个字段大概率和这个心跳的频率有关。

    先来看下eureka的自我保护机制:一种针对网络异常波动的安全保护措施。eureka server在运行期间会去统计心跳失败的比例,在15分钟内是否低于85%。若低的话,eureka会将实力保护起来,让这些实例不会过期。当然若这个服务确实下线了的话,就会发生调用失败的问题,这里的话就是需要靠熔断机制来解决此问题了。

    划重点:85%其实就是renewal-percent-threshold的默认值。

    再来看下eureka保护机制的实际计算过程:

    打开eureka的地址,在右上角能看到两个字段,分别是Renews threshold,Renews(last min)

    Renews threshold = count * 2 * renewal-percent-threshold
    
    //count是服务的注册数量,2是因为每30s一个心跳。
    
    

    也就是说在一分钟内renews(eureka收到的心跳)低于Renews threshold,就会进入自我保护机制。

    后续

    eureka和zooKeeper的集群管理

    展开全文
  • Eureka 自我保护机制

    2020-07-11 20:54:30
    自我保护机制是一种应对网络异常的安全保护措施。它的架构哲学是宁可保留不健康的微服务,也不轻易注销健康的微服务。 Eureka在运行期间会统计全部服务总体的心跳失败的比例,在15分钟内是否低于85%。如果低于,则...
  • 深入理解Eureka自我保护机制

    千次阅读 2018-10-11 10:58:45
     Eureka自我保护机制 ​自我保护开启条件 自我保护阀值的计算 自我保护阀值的计算公式 自我保护逻辑 自我保护开关 开发环境配置   Eureka注册中心中各个Eureka-Server节点都是平等的,没有ZK中角色的概念...
  • 【SpringClould】 eureka 的自我保护机制.pdf
  • 本文基于SpringCloud-Dalston.SR5 ...自我保护机制:默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务
  • 自我保护机制过程: 在都使用默认值的情况下,客户端每30s续约一次,服务端每60s扫描一次超过90s还没有续约的客户端,正常情况下(没开启自我保护)就会剔除。 但是配置开启了自我保护之后,他在检查时,还会判断一...
  • 主要介绍了spring cloud中微服务之间的调用以及eureka的自我保护机制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 在什么环境开启自我保护机制 本地环境: 建议本地环境禁止自我保护机制。 生产环境: 建议开启自我保护机制 2.设置 2.1 eureka服务端设置(只增加保护代码) eureka: server: ##测试时关闭,自我保护...
  • eureka的自我保护机制

    2018-12-20 22:42:54
    默认情况下 eureka在一定时间内没接收到某个服务的心跳时(默认...自我保护机制"来防止这种情况: 当eurekaservice在一段时间内失去过多客户端(服务)时,他就会进入保护模式,会保护服务的注册信息,也不会注销服务...
  • Eureka的自我保护机制

    千次阅读 2018-10-12 15:48:10
    Eureka的自我保护机制是为了防止误杀服务。当注册中心发生故障,服务不能够正常的续约,但是服务运行正常,默认情况下,Eureka会将超过90s未续约的服务进行移除。这样做明显不合理,所以Eureka提供了一个自我保护...
  • Eureka自我保护机制 默认情况下,EurekaClient会定时向EurekaServer端发送心跳,如果EurekaServer在一定时间内没有收到EurekaClient发送的心跳,便会把该实例从注册服务列表中剔除(默认是90秒),但是在短时间内丢失...
  • eurake的自我保护机制

    千次阅读 2020-03-11 13:54:28
    EMERGENCYI EUREKA MAY ...在开发中我们因为经常关停服务所以会很容易触发eureka的自我保护机制,当服务未按时进行心跳续约时,Eureka会统计服务实例最近15分钟心跳续约的比例是否低于了85%。在生产环境下,因为网络...
  • Eureka心跳健康检查机制 运行心跳健康检查机制的目的是为了删除Eureka服务器注册表中不可...自我保护机制 EurekaServer不会将EurekaClient服务及时剔除 保护模式主要用与一组EurekaClient客户端和EurekaServer之间
  • #关闭自我保护机制,保证不可用服务被及时踢除 enable-self-preservation: false eviction-interval-timer-in-ms: 2000 #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒) lease-renewal-...
  • 在Eureka Server中配置关闭自我保护机制 #关闭自我保护机制 默认开启 eureka.server.enable-self-preservation=false 如果想及时剔除失效的eureka服务除了关闭⾃我保护机制外,可以调低eureka的⼼跳值 eureka-...
  • Eureka Server自我保护机制配置,默认为true开启。 eureka: server: enable-self-preservation: true
  • Eureka的自我保护机制浅谈

    千次阅读 2018-10-23 14:00:01
    自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:  Eureka Server...
  • 文章目录springcloud源码之eureka初始化+服务剔除+自我保护机制eureka初始化eureka服务剔除eureka自我保护机制总结 springcloud源码之eureka初始化+服务剔除+自我保护机制 eureka初始化 @Import...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,876
精华内容 11,550
关键字:

自我保护机制