`

Spring Cloud系列教程第九篇-Eureka自我保护机制

阅读更多

Spring Cloud系列教程第九篇-Eureka自我保护机制

本文主要内容:

1:自我保护介绍

2:导致原因分析

3:怎么禁止自我保护

 

本文是由凯哥(凯哥Java:kagejava)发布的《spring cloud系列》教程的总第九篇:

本文是几个维度中的第一个维度:注册与发现维度配置中心管理之Eureka相关教程第六篇。

一:Eureka的自我保护机制是什么?

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

简单一句话:

用电视剧新三国中,刘备说的:“宁可天下人负我,我不负天下人”。即:Eureka服务端,进入自我保护模式,就算所有的微服务真的都出问题了,也不会里面删除它们的。

二:为什么会出现自我保护机制?

一句话:某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该服务的信息进行保存。属于CAP里面的AP分支,也即是:保证可用性、分区容错性。

PS:CAP原则:分布式系统中,C:一致性;A:可用性;P:分区容错性。

我们来看看百度百科对CAP原则的详细介绍,如下图:

 

为什么会产生Eureka自我保护机制?

为例防止EurekaClient可以正常运行,但是与Eureka Server网络不通情况下,EurekaServer 不会立刻将EurekaClient服务剔除

默认情况下,如果EurekaServer在一定时间内没有收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90s).但是当网络分区故障发生(延时、卡顿、拥挤)时候,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了--因为微服务本身其实是健康的。此时本不应该注销这个微服务的。Eureka通过"自我保护模式"来解决这个问题--当EurekaServer节点在短时间内丢失过多客户端时候(可能发生了网络分区故障),那么这个节点就会进入自我保护模式了。

 

综上,自我保护是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的、不健康的微服务都会保留),也不盲目注销任何健康的微服务。

职用自我保护模式,可以让Eureka集群更加的健壮和稳定

三:怎么禁止Eureka的自我保护?

出厂默认,自我保护机制是开启的:eureka.server.enable-self-preservation=true

3.1:来看看开启自我保护模式的时候,Eureka服务端提示:

 

3.2:修改服务导关闭自我保护

修改Eureka Server项目:7001项目的yml配置:

关闭自我保护机制,同时修改心跳时间为2s.如下图:

 

重启Eureka服务项目,来看看关闭自我保护模式后提示:

 

我们来修改客户端(payment8001项目)的yml配置文件:

Eureka客户端向服务端发送心跳的时间间隔。单位秒。默认30s。修改为1s.

Eureka服务导在收到最后一次心跳后等待时间上限,超时将剔除服务。单位秒,默认90s,修改值为2s.如下图:

 

测试关闭自我保护机制:

启动服务端7001项目,再启动客户端8001项目,我们可以在页面查看客户端成功注册到服务端了。如下图:

 

我们关闭客户端8001项目后,间隔2秒+以后,在刷新页面.可以看到客户端被移除了。如下图:

 

当出现这个效果,说明,我们测试成功了。

当eureka关闭自我保护模式后,只要检查到客户端没有发送心跳检测,就将客户端从注册列表中移除了。这是很危险的。

用一句话来形容,关闭自我保护模式的Eureka服务:曹孟德曰:宁可我负天下人,不可天下人负我。

为什么说,没有了自我保护机制很危险?

有可能因为网络原因,没有发送心跳成功,但是实际上客户端是正常运行的。如果这个时候,直接移除掉客户端,可能造成服务大面积不能使用。是很危险的一个操作。所以,最好别关闭自我保护机制

《spring cloud系列教程》:

9fb9b856347658965a1d0e326910bc09.jpg

 

分享到:
评论

相关推荐

    Spring Cloud 配置、教程、源代码项目

    <artifactId>spring-cloud-starter-netflix-eureka-server ``` - **配置 Eureka Server**:在`application.yml`中添加Eureka Server的相关配置。 ```yaml server: port: 8761 eureka: client: register-...

    azure-spring-cloud:此处的教程代码:https:github.commicrosoftazure-spring-cloud-training

    这些教程将指导你如何设置开发环境,创建第一个Azure Spring Cloud应用,以及如何进行应用配置、部署和扩展。此外,你还可以学习如何利用Azure DevOps实现自动化CI/CD流程,以及如何利用Azure Monitor进行性能分析和...

    Web-圣思园精通Spring Boot CloudpringBoot整合Soc.zip

    9. **Spring Cloud Gateway**:Spring Cloud的新一代API网关,基于Spring Framework 5、Project Reactor和Spring Cloud生态。我们将比较Zuul和Gateway的区别,并学习如何使用Gateway构建更强大的API路由策略。 10. ...

    Spring Boot 2精髓.rar

    Spring Cloud提供了服务发现、配置中心、负载均衡、熔断器等一系列微服务治理工具,如Eureka、Config Server、Zuul、Hystrix等,这些工具与Spring Boot 2的集成使得开发者可以快速搭建出高可用的分布式系统。...

    精通 Spring Boot 42 讲.rar

    4. **集成Spring Cloud**:Spring Boot 可与Spring Cloud无缝结合,实现微服务架构,涵盖服务发现(Eureka)、配置中心(Config Server)、API Gateway(Zuul或Spring Cloud Gateway)等内容。 5. **安全控制**:...

    MyCat 第4天-part1.7z

    4. **07.MyCat - 环境搭建 - 微服务网关gateway搭建.avi**:这里涉及的是如何配置和使用微服务网关,如Spring Cloud Gateway,作为MyCat系统的入口,实现路由转发和过滤等功能。 5. **08.MyCat - 商品管理 - 需求...

    day01笔记.rar

    本"day01笔记.rar"压缩包包含了第一天学习乐优商城项目开发的相关资料,是Spring Cloud乐优商城19天系列教程的组成部分,配合了详细的笔记,帮助学习者逐步掌握该项目的构建过程。 在Spring Cloud框架下,乐优商城...

    2018springboot视频学习.rar

    7. **微服务**:如果涉及Spring Cloud,教程可能还会介绍如何利用Spring Boot构建微服务架构,包括Eureka(服务发现)、Ribbon(客户端负载均衡)、Zuul(API网关)和Hystrix(断路器)等组件。 8. **持续集成与...

    microservicecloud:微服务第一季

    "microservicecloud:微服务第一季"可能是一个关于微服务系列教程或项目的名称,它可能涵盖了使用Java技术栈实现微服务的方方面面。 在Java领域,实现微服务的最常用框架包括Spring Boot和Spring Cloud。Spring Boot...

    course-springboot-2-java-

    标题“course-springboot-2-java-”暗示了一个关于Spring Boot 2的Java课程或教程资源,这将涉及Spring框架的最新版本,Spring Boot 2,它是一个用于简化Spring应用程序初始搭建以及开发过程的框架。Spring Boot的...

Global site tag (gtag.js) - Google Analytics