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系列教程》:

Spring Cloud系列教程第九篇-Eureka自我保护机制的更多相关文章

  1. spring cloud系列教程第一篇-介绍

    spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...

  2. Spring cloud系列教程第二篇:支付项目父工程图文搭建

    Spring cloud系列教程第二篇:支付项目父工程图文搭建 在讲解spring cloud相关的技术的时候,咱们就模拟订单支付这个流程来讲讲 在这个支付模块微服务搭建过程中,上面的这些技术,都会融 ...

  3. spring cloud 系列第2篇 —— eureka 高可用注册中心的搭建 (F版本)

    源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.项目结构 eureka-server为服务注册中心,负责服务的管理: eur ...

  4. spring cloud 系列第1篇 —— eureka 服务的注册与发现 (F版本)

    源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.eureka 简介 Spring Cloud Eureka使用Netflix ...

  5. Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

  6. spring cloud系列教程第四篇-Eureka基础知识

    通过前三篇文章学习,我们搭建好了两个微服务工程.即:order80和payment8001这两个服务.有了这两个基础的框架之后,我们将要开始往里面添加东西了.还记得分布式架构的几个维度吗?我们要通过一 ...

  7. spring cloud系列教程第六篇-Eureka集群版

    spring cloud系列教程第六篇-Eureka集群版 本文主要内容: 本文来源:本文由凯哥Java(kaigejava)发布在博客园博客的.转载请注明 1:Eureka执行步骤理解 2:集群原理 ...

  8. spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息

    spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息 本文主要内容: 1:管理页面主机名及访问ip信息提示修改 2:获取当前注册中心的服务列表及每个服务对于的服务提供者列表 ...

  9. 架构师入门:Spring Cloud系列,Hystrix与Eureka的整合

    和Ribbon等组件一样,在项目中,Hystrix一般不会单独出现,而是会和Eureka等组件配套出现.在Hystrix和Eureka整合后的框架里,一般会用到Hystrix的断路器以及合并请求等特性 ...

随机推荐

  1. Java实现子序列问题

    一个串的子串是指该串的一个连续的局部.如果不要求连续,则可称为它的子序列. 比如对串: "abcdefg" 而言,"ab","abd",&q ...

  2. java代码(4)---guava之Immutable(不可变)集合

    Immutable(不可变)集合   一,概述 guava是google的一个库,弥补了java语音的很多方面的不足,很多在java8中已有实现,暂时不展开,Collections是jdk提供的一个工 ...

  3. [bx] and loop

    1.[bx] 表示一个内存单元,它的偏移地址在bx中 mov al,[bx] 2.描述符号() 来表示一个寄存器或一个内存单元中的内容. 约定符号idata表示常量. 3.loop 标号 CPU在执行 ...

  4. https如何进行加密传输

    客户端是没有证书的,也就没有公钥和私钥. SSL握手阶段,服务器把证书传输给客户端,同时也就传输了公钥(公钥是证书的一部分). 由客户端来对这个证书进行有效性认可,再由这个客户端来生成对称密钥. 对称 ...

  5. 学习ASP.NET Core(10)-全局日志与xUnit系统测试

    上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...

  6. 【JUC系列】01、之大话并发

    学习方法 学习技术的方法都很类似,大部分都有着类似的步骤: 场景 需求 解决方案 应用 原理 并发的目的 充分利用CPU 和 I/O资源 提高效率 并发的维度 分工 同步/协作 互斥 分工 线程池 f ...

  7. 线程安全与synchronized

    线程安全性与synchronized 线程安全:多线程访问某个类时,这个类始终都能表现出正确的行为,这个类就是线程安全的. 简单的说,就是多线程执行的结果与单线程执行的结果始终一致,不会因为多线程的执 ...

  8. [转] strtol()详解

    点击此处阅读原文 今天,在review 一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟. 网上关于这个函数的资料大都来源于同份资料,lin ...

  9. @bzoj - 3724@ PA2014Final Krolestwo

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 你有一个无向连通图,边的总数为偶数. 设图中有k个奇点(度数为奇 ...

  10. python下载及安装步骤

    Python安装 1.浏览器打开网址:www.python.org 2.根据电脑系统选择下载 3.确定电脑系统属性,此处我们以win10的64位操作系统为例 4.安装python 3.6.3 双击下载 ...