`

spring cloud系列教程第九篇-eureka自我保护机制

spring cloud系列教程第九篇-eureka自我保护机制

本文主要内容:

1:自我保护介绍

2:导致原因分析

3:怎么禁止自我保护

 

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

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

spring cloud系列教程第九篇-买球官网平台

保护模式主要用于一组客户端和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.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系列教程》:

 

分享到:
|
评论

相关推荐

    spring-cloud-starter-netflix-eureka-server-1.4.5.release.jar

    spring-cloud-starter-eureka-server-1.4.5.release.jar

    eureka修改增加页面操作,用于多人开发测试操作流程。可以更好的进行协调操作,只需要替换本地仓库的jar包就行

    spring cloud教程第一季-spring cloud netflix-第03节-服务注册和服务发现-eureka的深入了解

    黑马程序员-springcloud-学习笔记-03-eureka注册中心

    spring-cloud-netflix-eureka-server-1.4.5.release.jar

    使用springboot搭建的一个基础服务框架,里面主要使用了netflix的eureka、ribbon,是个学习和了解的框架

    springcloud-服务注册与实现-eureka创建服务提供者示例源码

    最新版本的springcloud微服务实战,老版本与新版本差异较大,按照老的文章去使用新版本会有很多bug。

    springcloud1.5x eureka 注册中心代码,项目编译后可以直接运行。相关配置已经优化,可以直接使用。

    spring-cloud-netflix-eureka-client-1.4.5.release.jar

    springcloud-服务注册与实现-eureka示例代码-服务注册与发现

    spring-cloud-eureka spring cloud(一)服务的注册与发现(eureka) spring-cloud-consul spring cloud(二) consul 服务治理实现 spring-cloud-ribbon spring cloud(三) 服务提供者 eureka ...

    springcloud-eureka-feign-mybatis-seata.zip,springcloud-eureka-feign-mybatis-seata,pom.xml,account-server,pom.xml,target,test-classes,io,seata,sample,accountserverapplicationtests.class,maven-status,...

    springcloud-2.0-eureka-service-10000.zip 属于 eureka注册中心创建的源码

    idea环境,springboot整合springcloud项目,并且解决springcloud导包出现unknown问题

    springboot框架 springcloud-eureka搭建 springcloud0-zuul搭建代码,可以帮助新手搭建,才用的是为服务架构,但只是把架子打起来了,没有过多逻辑代码,参考学习下,希望对你们有帮助

    spring-cloud-eureka:eureka server单机、双机、集群示例 eureka-producer-consumer:利用eureka实现服务提供与调用示例 spring-cloud-hystrix:hystrix熔断的使用示例 hystrix-dashboard-turbine:熔断监控hystrix...

    eureka-server.zip,eureka-server,src,main,resources,application.yml,java,com,yihe,springcloud,eureka,application.java,pom.xml,reader.md

    spring-cloud-eureka:eureka server单机、双机、集群示例 eureka-producer-consumer:利用eureka实现服务提供与调用示例 spring-cloud-hystrix:hystrix熔断的使用示例 hystrix-dashboard-turbine:熔断监控hystrix...

global site tag (gtag.js) - google analytics