eureka自我保护机制
eureka自我保护机制
保护模式主要用于一组客户端和eureka server之间存在网络分区场景下的保护,一旦进入保护模式,erueka server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务
简而言之:某时刻某一个微服务不可用了,eureka不会立即清理该服务,依旧会对该服务的信息进行保存
如果在eureka server的首页看到以下这段提示,则说明eureka进入了保护模式:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
为什么会产生eureka自我保护机制
为了防止eureka client可以正常运行,但是eureka server网络不通情况下,eureka server不会立刻将eureka client服务剔除
什么是自我保护模式
默认情况下,如果eureka server在一定时间内没有接收到某个微服务实例的心跳,eureka server将会注销该实例(默认90s)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与eureka server之间无法正常通信,以上行为可能变得非常危险了,因为微服务本身其实是健康的,此时本不应该注销这个微服务。eureka通过自我保护模式来解决这个问题:当eureka server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式
默认情况下eureka client定时向eureka server端发送心跳包,如果eureka server端一定时间内(默认90s)没有收到eureka client发送心跳包,便会直接从服务注册列表中剔除该服务,但是在短时间(90s中)丢失了大量的服务实例心跳,这时候erureka server会开启自我保护机制,不会剔除该服务
在自我保护模式中,eureka server会保护服务注册表中的信息,不再注销任何服务实例
它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例,一句话:好死不如赖活着
综上,自我保护模式是一种应对网络异常的安全保护措施,它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让erueka集群更加的健壮、稳定
关闭自我保护机制
服务端相关配置
eureka:
server:
# 关闭自我保护机制
enable-self-preservation: false
# 清理无效节点的时间间隔,默认60秒
eviction-interval-timer-in-ms: 2000
关闭自我保护机制后,eureka server首页会显示以下信息:
THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
客户端相关配置
eureka:
instance:
# eureka服务端在收到最后一次心跳等待时间上限,单位为s(默认是90s),超时将剔除服务
lease-expiration-duration-in-seconds: 1
# eureka客户端向服务端发送心跳时间间隔,单位为s(默认是30s)
lease-renewal-interval-in-seconds: 2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-03-12 Docker 网络