Eureka的自我保护机制

Tips:生产环境中不建议关闭 Eureka 的自我保护模式

什么是保护模式

  保护模式,主要用于一组客户端 和 Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server 将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务实例。

  当我们在 Eureka Server 服务首页中,看到有如下这段提示,则说明此时 Eureka Server 已经进入了保护模式。
在这里插入图片描述

Eureka Server 为什么会进入保护模式

  默认情况下,如果 Eureka Server 在一定时间内没有收到某个微服务实例的心跳,Eureka Server 便会将该实例注销。 (默认是90s)

  但是 当网络分区发生故障(延迟、卡顿、拥挤)时,微服务与 Eureka Server 之间是无法正常通信的,在这种情况下微服务本身其实是健康的,本来是不应该注销这个服务的,此时 Eureka 便会通过 “自我保护模式” 来解决这个问题。

  Eureka 的自我保护机制,就是 CAP 原则中的 AP 分支。即满足:可用性分区容错性

CAP 原则又称 CAP 定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

如何禁用自我保护

  在 Eureka 中,自我保护模式默认是 开启 的。此处也只是来演示一下如何关闭。生产环境中是不建议关闭 Eureka 的自我保护模式

1.Eureka Server 端操作

添加如下配置信息:

eureka:
  server:
    #关闭自我保护机制,保证不可用服务被及时剔除
    enable-self-preservation: false
    #清理无效节点的时间间隔,默认60000毫秒,即60秒 (此处时间间隔设置为2s)
    eviction-interval-timer-in-ms: 2000

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

此时,在启动 Eureka Server 时,便会看到一条鲜明的提示信息。
在这里插入图片描述

2. Eureka Client 端操作

添加如下配置信息:

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

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

到此处,配置就已经全部完成。

3.测试结果

在这里插入图片描述
  这种情况下,我们手动将该微服务停止,Eureka Server 便会在 2s 超时过后,将其移除服务。不会给它任何的机会,当遇到网络 延迟、卡顿、拥挤 时,这种操作显然是不友好的。

所以大多数情况下,还是建议不要关闭 Eureka 的自我保护模式。


博主写作不易,加个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

我不能保证所写的内容都正确,但是可以保证不复制、不粘贴。保证每一句话、每一行代码都是亲手敲过的,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值