Spring Cloud Eureka 自我保护机制实战分析

简介: 前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章:

前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章:


Spring Cloud Eureka 自我保护机制

Spring Cloud Eureka 常用配置详解

其中,可能大家关于自我机制的具体保护逻辑还不是特别清楚,今天栈长就具体分析和实战一下,自我保护机制到底是怎么工作的。


现在我们把保护机制开启:

image.png关注右上角的两个重要参数:

image.png我这里显示的数值如下:

Renews threshold  6
Renews (last min) 8

这个 6 和 8 分别是怎么算出来的?


先来看这两个参数的默认设置,摘自《Spring Cloud Eureka 常用配置详解》一文:


eureka.server.renewal-percent-threshold:

表示 Eureka Server 开启自我保护的系数,默认:0.85。


eureka.instance.lease-renewal-interval-in-seconds:

表示 Eureka Client 向 Eureka Server 发送心跳的频率(默认 30 秒),如果在 lease-expiration-duration-in-seconds 指定的时间内未收到心跳,则移除该实例。

这里有 4 个注册实例,保护系数:0.85,心跳频率:30秒(每分钟两次),计算公式如下:

Renews threshold = 4 * 2 * 0.85 = 6.8(取整为:6)
Renews (last min) = 4 * 2 = 8

现在删除一个配置中心实例测试一下:

image.png出现警告:


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 Server 已经进行保护模式了,并且我删除的那个实例并不会从注册列表中移除,保护机制生效成功。


由此可知:Eureka Server 在一分钟内如果没有收到 6 个以上的心跳,即:Renews threshold >= Renews (last min),如果保护机制已开启的情况下,则会开启保护机制。


为什么移除一个实例后,Renews threshold 还是 6 呢,算出来应该是 5,这是因为 Eureka Server 还没刷新这个值,默认 15 分钟刷新一次,可以通过设计以下值进行调整:


eureka.server.renewal-threshold-update-interval-ms=900000


了解了心跳策略和保护机制后,对注册中心的日常维护就会有很多帮助。


好了,今天的分享就到这里了,建议转发收藏,不再迷路。


后续会分享更多 Eureka 高级玩法,栈长正在拼命撰写中……关注Java技术栈微信公众号可获取及时推送。在公众号后台回复:cloud,获取栈长整理的更多的 Spring Cloud 教程,都是实战干货,以下仅为部分预览。


Spring Cloud 配置中心高可用搭建

Spring Cloud 多版本如何选择

Spring Cloud 是什么,和 Dubbo 对比

Spring Cloud 注册中心高可用搭建

Spring Cloud Eureka 自我保护机制

……


相关文章
|
4天前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
14 0
|
5天前
|
安全 Java 测试技术
Spring Boot集成支付宝支付:概念与实战
【4月更文挑战第29天】在电子商务和在线业务应用中,集成有效且安全的支付解决方案是至关重要的。支付宝作为中国领先的支付服务提供商,其支付功能的集成可以显著提升用户体验。本篇博客将详细介绍如何在Spring Boot应用中集成支付宝支付功能,并提供一个实战示例。
22 2
|
5天前
|
Java 关系型数据库 数据库
Spring Boot多数据源及事务管理:概念与实战
【4月更文挑战第29天】在复杂的企业级应用中,经常需要访问和管理多个数据源。Spring Boot通过灵活的配置和强大的框架支持,可以轻松实现多数据源的整合及事务管理。本篇博客将探讨如何在Spring Boot中配置多数据源,并详细介绍事务管理的策略和实践。
26 3
|
2天前
|
缓存 NoSQL Java
17:缓存机制-Java Spring
17:缓存机制-Java Spring
14 5
|
4天前
|
XML Java API
Spring Boot 整合 LiteFlow 规则引擎:概念与实战
【4月更文挑战第30天】在现代软件开发中,规则引擎允许我们以声明式的方式定义业务逻辑和决策路径。LiteFlow 是一个轻量级、易于使用的组件式规则引擎,它可以与 Spring Boot 应用无缝整合。本文将介绍如何在 Spring Boot 项目中引入 LiteFlow,实现灵活的业务流程管理。
16 0
|
5天前
|
安全 Java 测试技术
利用Java反射机制提高Spring Boot的代码质量:概念与实战
【4月更文挑战第29天】Java反射机制提供了一种强大的方法来在运行时检查或修改类和对象的行为。在Spring Boot应用中,合理利用反射可以提高代码的灵活性和可维护性。本篇博客将探讨Java反射的核心概念,并展示如何通过反射提高Spring Boot项目的代码质量。
21 0
|
5天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
16 1
|
5天前
|
安全 Java 数据安全/隐私保护
Spring Boot优雅实现多租户架构:概念与实战
【4月更文挑战第29天】在多租户系统中,一个应用实例服务于多个租户,每个租户享有独立的数据视图,而应用的基础设施被共享。这样的架构不仅优化了资源使用,还能降低维护和运营成本。本文将详细介绍如何在Spring Boot中实现多租户架构,并提供具体的实战案例。
27 2
|
5天前
|
前端开发 Java 数据安全/隐私保护
Spring Boot使用拦截器:概念与实战
【4月更文挑战第29天】拦截器(Interceptors)在Spring Boot应用中常用于在请求处理的前后执行特定的代码,如日志记录、认证校验、权限控制等。本篇博客将详细介绍Spring Boot中拦截器的概念及其实战应用,帮助开发者理解和利用拦截器来增强应用的功能。
16 0
|
5天前
|
Java 调度 开发者
Spring Boot与定时任务:整合与实战
【4月更文挑战第29天】定时任务是现代应用中常见的需求,用于执行周期性的活动,如数据备份、报告生成等。Spring Boot通过集成Spring Task的功能,提供了一种简单有效的方式来调度和执行定时任务。
20 1