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

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

本文主要内容:spring

1:自我保护介绍安全

2:致使缘由分析网络

3:怎么禁止自我保护架构

0i4bjUGbG7s


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

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

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

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

简单一句话:测试

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

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

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

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

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

0i4bjUmkCtk


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

为例防止EurekaClient能够正常运行,可是与Eureka Server网络不通状况下,EurekaServer 不会马上将EurekaClient服务剔除

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

0i4bjVOCPei


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

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

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

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

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

0i4bjWWKAlM


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

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

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

0i4bjWyzjLU


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

0i4bjXQUrK4


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

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

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

0i4bjXqiZZw


测试关闭自我保护机制:

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

0i4bjYDMEPQ


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

0i4bjYaT6x6


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

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

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

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

有可能由于网络缘由,没有发送心跳成功,可是实际上客户端是正常运行的。若是这个时候,直接移除掉客户端,可能形成服务大面积不能使用。是很危险的一个操做。因此,最好别关闭自我保护机制

《spring cloud系列教程》:

9fb9b856347658965a1d0e326910bc09.jpg

相关文章
相关标签/搜索