Spring Cloud系列教程(四):Eureka自我保护机制

一、初步认识Eureka

首先,Eureka服务注册与发现分为两个端:一个Eureka Client、一个Eureka Server,其实在Eureka Server注册中心集群条件下Eureka Server既是客户端也是服务端,相辅相成的,客户端就好比之前章节讲到的会员服务和订单服务,在Eureka Client启动的时候,会把当前的服务信息注册到Eureka Server上,默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个客户端服务实例的心跳Eureka Server将会移除该实例。但是当网络分区故障发生时,客户端服务实例Eureka Server之间无法正常通信,而客户端服务实例本身是正常运行的,只是因为网络不用而Eureka Server无法接收心跳包而已,此时不应该移除这个微服务,所以引入了自我保护机制,这是Eureka服务注册与发现中心所读独有的特性,像其他常见的注册中心ZookeeperConsul没有。
在这里插入图片描述

二、什么是Eureka保护机制

1. 官方解释: 自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。
2. 我的理解: 默认情况下,Eureka Client会定时的向 Eureka Server端发送心跳包,默认是30s发送一次,目的是告诉 Eureka Server当前客户端实例还处于存活状态,如果Eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发Eureka server的自我保护机制的 ,默认自我保护机制处于开启状态,比如在开发测试时,需要频繁地重启微服务实例客户端,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews thresholdRenews(last min),当Renews(last min)(最后一分钟收到的心跳数)小于Renews threshold(心跳阈值)的时候,如果某个服务实例宕机掉,触发保护机制,会出现红色的警告:
在这里插入图片描述

三、Eureka保护机制的目的

为了防止在一定时间内,Eureka ClientEureka Server在网络不同的情况下,Eureka Server误将Eureka Client服务剔除,这个机制是为了对服务进行保护;

四、如何关闭Eureka自我保护机制

Eureka自我保护机制默认是开启的,如果如果需要关闭自我保护机制,按照下述方式: enable-self-preservation: false 开关关闭掉,然后修改客户端和服务端相关参数,保证异常服务能及时剔除;

1. Eureka Server配置

注册中心关闭自我保护机制,修改检查失效服务的时间,以确保注册中心将不可用的实例及时正确剔除

  #Eureka自我保护机制
  server:
    #关闭eureka自我保护机制false(默认为true)
    enable-self-preservation: false
    # 配置Eureka Server清理无效节点的时间间隔(单位毫秒,默认60*1000毫秒,即60秒)
    eviction-interval-timer-in-ms: 2000

2. Eureka Client配置

减短客户端服务发送服务心跳给服务端的时间, 在开发测试时,将值设置设置小些,保证服务关闭后注册中心能及时踢出服务

    #表示eureka client间隔多久去拉取服务器注册信息,默认为30秒
    registry-fetch-interval-seconds: 10
##心跳检测与续约时间(测试环境和本地开发环境将值设置小一点,保证服务关闭后,注册中心能够及时踢出)
  instance:
    #eureka客户端需要多长时间发送心跳给eureka服务端,单位为秒(默认为30s),(客户端会按照此规则向Eureka服务端发送心跳检测包)
    lease-renewal-interval-in-seconds: 2
    #eureka服务端在接受到实例的最后一次发出的心跳后,需要等待多久才可以将此实力删除,单位为秒(默认为90s),超过时间则剔除(客户端会按照此规则向Eureka服务端发送心跳检测包)
    lease-expiration-duration-in-seconds: 2

五、开启和关闭Eureka保护机制的场景

Eureka Server和Eureka Client默认是开启自我保护机制

1. 开发环境关闭

当我们在使用微服务框架做项目开发的时候,如果注册中心是Eureka,因为会频繁的重启本地开发环境,调试和修改代码,但是不会频繁的重启Eureka Server,所以建议在测试环境、本地开发环境时关闭Eureka的自我保护机制,,如果触发了保护机制,则旧的服务实例没有被删除,这时请求有可能跑到旧的实例中,而该实例已经关闭了,这就导致请求错误,影响开发测试效率;

2. 生产环境开启

在微服务各个节点部署到生产环境了之后,建议开启Eureka自我保护环境,这一点还是比较重要的,因为在生产环境,并不会频繁的重启,而且有时在短时间内可能会发生服务与服务之间网络故障、重启Eureka Client客户端服务实例等其他原因导致通讯中断,所以一定要把自我保护机制打开,否则网络一旦终端,就无法恢复,导致误删除服务节点,造成生产故障;

六、SpringCloud系列教程

1. SpringCloud系列教程(五) : Spring Cloud系列教程(五) - 服务消费者Feign(Finchley版本)

SpringCloud教程汇总: Spring Cloud系列教程(汇总篇):专栏汇总篇(持续更新中)

在这里插入图片描述

发布了327 篇原创文章 · 获赞 230 · 访问量 79万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览