码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-30 14:19:59      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:图片   sel   html   设置   超过   with   cimage   alt   shu   

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

参考链接:
??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界面显示如下:技术图片

触发条件:
??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:我为自己的搬运行为感到可耻

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

标签:图片   sel   html   设置   超过   with   cimage   alt   shu   

原文地址:https://www.cnblogs.com/liujunj/p/13401814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!