SpringCloud Eureka自我保护机制

自我保护背景

首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行。

默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。

自我保护机制

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

https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication

自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使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禁用自我保护机制,默认打开状态,建议生产环境打开此配置。

开发环境配置

开发环境中如果要实现服务失效能自动移除,只需要修改以下配置。

1、 注册中心关闭自我保护机制,修改检查失效服务的时间。

eureka:
  server: 
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000

2、 微服务修改减短服务心跳的时间。

# 默认90秒
lease-expiration-duration-in-seconds: 10
# 默认30秒
lease-renewal-interval-in-seconds: 3

以上配置建议在生产环境使用默认的时间配置。

原文发布于微信公众号 - Java技术栈(javastack)

原文发表时间:2017-09-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏月色的自留地

将dylib库嵌入macOS应用的方法

2705
来自专栏一英里广度一英寸深度的学习

Hello,Java女神

第一阶段:C++转行,开始学习Java 第二阶段:Java Web,jsp+servlet 第三阶段:Struct Spring 第四阶段:Spring ...

1315
来自专栏大魏分享(微信公众号:david-share)

服务发现的深入研究,不谈理念谈干货

服务发现是怎么“火”起来的 我们知道,在写代码的时候,为了完成服务请求的时候,代码需要知道服务实例的IP地址和端口。所以说,服务发现,发现的是服务实例的IP地址...

3426
来自专栏JAVA高级架构

程序猿的日常——SpringMVC系统架构与流程回顾

web开发经历了很漫长的时间,在国内也快有十几年的时间了。从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的知...

3535
来自专栏xingoo, 一个梦想做发明家的程序员

程序猿的日常——SpringMVC系统架构与流程回顾

web开发经历了很漫长的时间,在国内也快有十几年的时间了。从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的...

2117
来自专栏逸鹏说道

Windows无法安装到这个磁盘。请确保在计算机的BIOS菜单中启用了磁盘控制器

今天一朋友问我这个问题,呃,以前我也遇到过,但忘记记录了,这次就记录一下吧,就懒得打字了,图片里面很清楚了 ? ? ? ? ? 不说点什么的话是不是太水了O(∩...

6767
来自专栏数据和云

快速掌握:大型分布式系统中的缓存架构

CDN(Content Delivery Network 内容分发网络)的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中...

912
来自专栏24k

SpringBoot项目使用JRebel热部署

2174
来自专栏耕耘实录

CentOS7下group和group-、passwd与passwd-之间的区别

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

934
来自专栏码匠的流水账

jib自定义entrypoint

jib的自定义entrypoint是0.9.10及以上版本才支持的,若需要自定义entrypoint,请先升级jib版本。

1071

扫码关注云+社区

领取腾讯云代金券