SpringCloud2020 学习笔记(十五)Spring Cloud Eureka 自我保护机制 关闭

2021-12-07 15:34:06 浏览数 (1)

SpringCloud2020 学习笔记(十五)Spring Cloud Eureka 自我保护机制

  • 我使用spring boot 2.2.2
  • 我使用spring cloud Hoxton.SR1
  • 我使用spring cloud alibaba 2.1.0.RELEASE
  • 一.说人话就是
  • 二.官方对于自我保护机制的定义:
  • 三.自我保护机制的工作机制是:
  • 四.自我保护开关
  • 五.重启测试
  • 六.生产环境建议不要关闭自我保护

我使用spring boot 2.2.2

我使用spring cloud Hoxton.SR1

我使用spring cloud alibaba 2.1.0.RELEASE

为什么使用这个三个版本,是有讲究的;spring boot 2.2.2,spring cloud Hoxton.SR1,spring cloud alibaba 2.1.0.RELEASE

一.说人话就是

eureka关闭了自我保护机制后,遇到网络波动等不可控因素导致微服务心跳没及时响应时,会立即从eureka中剔除微服务,相反,eureka打开了自我保护机制,微服务还能有时间缓冲一下,待心跳从新连接上后,继续提供服务

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

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

三.自我保护机制的工作机制是:

如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:

1.Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。 2.Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。 3.当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

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

四.自我保护开关

Eureka自我保护机制,通过配置 eureka.server.enable-self-preservation 来打开(true默认)/禁用(false)自我保护机制,默认打开状态,建议生产环境打开此配置。

在eureka服务端操作

代码语言:javascript复制
  server:
    #关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false
    #续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
    eviction-interval-timer-in-ms: 2000

完整yml配置

代码语言:javascript复制
server:
  port: 7001


eureka:
  instance:

    #eureka服务端的实例名称
    #hostname: localhost
    hostname: eureka7001.com

  client:

    #false表示不向注册中心注册自己。
    register-with-eureka: false

    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false

    service-url:

      #设置与Eureka Server交互的地址查询服务和注册服务都要依赖这个地址
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

      #单机就是7001自己
      #defaultZone: http://eureka7001.com:7001/eureka/

      #集群指向其它eureka
      defaultZone: http://eureka7002.com:7002/eureka/
  server:
    #关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false
    #续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
    eviction-interval-timer-in-ms: 2000

在eureka客户端操作

代码语言:javascript复制
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2

完整yml配置文件

代码语言:javascript复制
server:
  port: 8001

spring:
  application:
    name: cloud-payment-service

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
    url: jdbc:mysql://localhost:3306/springcloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: cn.cookily.springcloud.entities    # 所有Entity别名类所在包

eureka:
  client:
    #表示是否将自己注册进eurekaServer 默认为true
    register-with-eureka: true
    #是否从eurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      #单机版
      #defaultZone: http://localhost:7001/eureka
      # 集群版
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
  instance:
    instance-id: payment8001 #注册中心看到的实例名
    prefer-ip-address: true     #访问路径可以显示IP地址
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2

五.重启测试

1.先启动eureka7001

2.在启动payment8001

3.我们人为模拟下payment8001失联(我们直接关闭这个服务)

六.生产环境建议不要关闭自我保护

项目地址: https://github.com/cookily/cloud2020.git

0 人点赞