Eureka的自我保护机制浅谈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32635069/article/details/83305855

转载请标记出处:
https://blog.csdn.net/qq_32635069/article/details/83305855
1、 定义
自我保护模式是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。
2、 工作机制
自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:
 Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
 Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。
 当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
3、 优点
Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪。
自我保护模式的架构哲学就是:宁可放过一个,绝不可错杀一千
4、 问题
在安全模式下,Eureka不会即使的剔除掉不可用的节点,所以会造成访问不可用节点的问题,出现Connection Refuse
5、 解决方案
由服务订阅者添加重连或断路器来解决此问题,无论服务有没有被及时的剔除,订阅端配置Ribbon的重试机制都是必须的
引入ribbon包后,默认会自动开启ribbon重试机制. 自己需要配置ribbon的超时时间,只有ribbon的超时时间小于hystrix的超时熔断时间时,才会进行重试.(ribbon默认会对当前服务实例重试一次,然后对下一个服务实例重试一次)
配置样例:
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
MaxAutoRetries: 1 #同一台实例最大重试次数,不包括首次调用
MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数,不包括首次调用
OkToRetryOnAllOperations: false #是否所有操作都重试
6、 推荐
在开发模式下,关闭自我保护模式
eureka.server.enable-self-preservation=false
在生产环境下,开启自我保护模式
eureka.server.enable-self-preservation=true
7、 相关配置问题

  • Eureka是否应该配置自身:
    a) 此配置中可以配置自身,但是Eureka在做同步时,会过滤掉自身的url
    Eureka.client.serviceUrl.defaultZone: http://localhost:8080/eureka/
    b) 这两个属性的配置
    register-with-eureka: false
    fetch-registry: false
    默认是false,即Eureka Server的内置的Eureka client 不会开启
    register-with-eureka 是否注册自身到server。适用于当前的server还会处理一些其余的http请求
    fetch-registry 是否拉去服务信息。适用于当前的server端还会对其余服务进行http请求;若开启还有一点特殊的是,Eureka client会先于server的初始化,那么client拉去的服务实例列表会被即时同步到当前server上,否则只能通过其余Server以增量的方式同步过来,但是通过心跳续约的话,也最多30秒,就会同步
  • Eureka的对象注册:
    不会二次传递,并且注册的方向是单向的,举个栗子:有3个Eureka,分别为a、b、c , a向b中注册,b向c中注册,c向a中传递,那么当有服务实例D向a中注册时,D会注册到a中,并会传递到b中,但是c中不会有,这说明是服务实例不会二次传递,并且传递方向是单向的
  • Eureka的服务健康程度的接口
    netflix的eureka-client提供了HealthCheckHandler接口,用来对获取服务实例的健康状态
  • 手动下线服务实例
    格式为 /eureka/apps/{application.name}/
    样例:DELETE操作剔除实例LAPTOP-B0AJUIK3:product-service:8990
    http://localhost:8081/eureka/apps/PRODUCT-SERVICE/LAPTOP-B0AJUIK3:product-service:8990

猜你喜欢

转载自blog.csdn.net/qq_32635069/article/details/83305855
今日推荐