当前位置: 首页 > news >正文

SpringCloud Eureka自我保护机制

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

自我保护背景

首先对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

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

推荐:Spring Boot & Cloud 最强技术教程

扫描关注我们的微信公众号,干货每天更新。

image

转载于:https://my.oschina.net/javaroad/blog/1817114

相关文章:

  • 高阶函数特点
  • How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?...
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Commvault助力企业抵御勒索软件的蔓延
  • Mastering the game of Go with deep neural networks and tree search
  • 每周分享之JS数组的使用
  • python 内置模块
  • CSS 样式小结
  • TypeError: Cannot read property 'url' of undefined
  • centos 7 安装官方LAMP(Apache+PHP5+MySQL)
  • 6.Flask-WTForms
  • phpstrom+upupw 开启 Xdebug 调试
  • Python爬虫常用库的安装
  • 非 root 用户全局安装和配置 NodeJS
  • MYSQL性能优化的最佳20+条经验
  • Android Studio:GIT提交项目到远程仓库
  • Android优雅地处理按钮重复点击
  • C++11: atomic 头文件
  • eclipse的离线汉化
  • gulp 教程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JDK9: 集成 Jshell 和 Maven 项目.
  • mysql_config not found
  • Python 反序列化安全问题(二)
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 订阅Forge Viewer所有的事件
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 驱动程序原理
  • 入手阿里云新服务器的部署NODE
  • ​configparser --- 配置文件解析器​
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2)STL算法之元素计数
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (数据结构)顺序表的定义
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)ObjectiveC 深浅拷贝学习
  • (转)四层和七层负载均衡的区别
  • (转载)Linux网络编程入门
  • .htaccess配置常用技巧
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net mvc 获取url中controller和action
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • @Autowired @Resource @Qualifier的区别
  • [100天算法】-实现 strStr()(day 52)
  • [20170705]diff比较执行结果的内容.txt
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法