一个名字叫SPRINGCLOUD-EUREKA-CONSUMER,一个名字叫SPRINGCLOUD-EUREKA-PROVIDER,然后后面显示的是服务的详细信息,他的IP,服务名称,以及端口,然后UP是正常的状态,这两个服务我们都已经启动了,然后我们往下看,什么是自我保护模式,自我保护的条件是什么,一般情况下,微服务在Eureka注册后,会每30秒发送心跳包,Eureka通过心跳包来判断服务是否健康,同时会定期删除超过90秒没有发送心跳的服务,我们也拿到这段话来说一下,现在我服务启动了,在这段列表当中,我们是可以看到这个服务是正常的,那么注册中心怎么知道这个服务是正常的呢,其实就是我们已注册的服务,就是每30秒发送一个心跳包,健康检查,如果他能够收到30秒的心跳包,说明这个服务是正常的,但是如果超过90秒,没有收到服务的心跳包,那他就认为这个服务就已经出问题了,然后他会删除90秒没有发送心跳的服务,我们来做一个演示,我们演示的可能会跟我们看到的不一样,我们首先来关掉服务,现在我把这个关掉,Provider和Consumer关掉,那么关掉以后,现在也就意味着,也就是没有向我们的Eureka服务发送心跳包的,服务都停了,我们再来刷新http://10.40.8.152:8761/现在还有,别着急,90秒内,那我们先等90秒,其实超过90秒也不会真正的删除,为什么呢,有两种情况会导致Eureka Server收不到微服务的心跳,我们要解释一下,他不是不删,只是有这么几种情况下的,并不会从服务当中把服务列表中的删除掉的,但是像你在启动的时候,你在关闭的时候,忘记注册中心了,我现在就要关闭这个服务,我要做优雅停服的事情以后,配置以后,他才会删除,就是没有设置优雅停服的,90秒以后他也不会删除服务呢,是有这么几种情况的,我们来看,有两种情况会导致收不到微服务心跳的情况,第一个是微服务自身的原因,你像我们现在就是微服务自身的原因,直接把微服务停掉了,90秒应该差不多了,还没到,我们再等一下,还有一种是微服务与Eureka之间出现了网络故障,我们看一下,通常微服务的自身故障,只会导致个别服务出现,现在Eureka Server,他必须要去区分一下,这个服务,在90秒内,已经过了90秒了,没有收到心跳包,是因为什么,是因为单节点的故障,还是因为网络故障,那么他是怎么区分的呢,他是这么区分的,一般自身故障,只会导致个别服务出现故障,一般不会出现大面积的故障,而网络故障通常会导致Eureka Server会在短时间内无法收到大量的心跳,所以是会大批量的收不到心跳包的方式区分,甚至你的单节点故障,还是因为网络阻塞而引起的,90秒应该差不多了,出来了,看到了吗,会显示红色的一段话,这个我们也说过,我们将来会讲的,我们这块讲的内容,那么红色的字体是什么意思呢,我们而已可以尝试的翻译一下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可能不正确的声称,当他不在时,就是更新的比阀值小,所以为了安全起见,实例不会过期,就是这句话,他说,出现服务的数量,比更的阀值要小,那么这个阀值是什么呢,这个阀值就是我们要说的,15分钟之内是否低于85%,也就是说如果在15分钟之内,以服务没有收到心跳包的,数量达到总服务数量的85%以上,他认为是网络故障,如果低于85,那你看,一共才有四个服务,四个服务当中我停掉了两个,那么出现故障是85%,那么50%是远远低于85%,他不会认为这是一个网络故障,它会认为你是一个节点的故障,那么如果是节点的故障,他觉得你未来的节点是可以修复的,修复了启动以后,你可以继续服务了,所以他把出现节点故障的服务,做了一个保留,这个保留是什么呢,就是自我保护,现在你出现故障的数量远远低于阀值,所以为了安全起见,这个实例不会过期,他在这里还是把服务给保存着,明白这意思了吧,明白这句话了吧,这个阀值多少呢,就是85%,然后我们再看,Eureka Server在运行时,会统计心跳失败的比例,在15分钟内是否低于85%,这种算法叫做Eureka Server的自我保护模式,所以现在我们把这两个服务关闭掉了,所以并没有达到85%的阀值,所以他就会对出现故障的服务,做了自我保护,咱们再看

因为同时保留好数据与坏数据,总比丢掉任何数据更好,当网络故障恢复后,Eureka节点会退出自我保护模式,这句话什么意思呢,我们讲过Eureka和Zookeeper的区别,讲CAP对比的时候,拿CAP原则对比的时候,Eureka和Zookeeper都是支持分区容错的,那么Eureka他在做分区容错的时候,一旦有节点出现故障了,会将出现故障的节点做一个保存,无论是好数据还是坏数据,在Eureka的Server当中,他都会做一个保存,以便你出现故障的服务,进行服务的处理,所以说,在这儿,保留了好数据和坏数据,如果你的服务关闭掉了,就是坏数据,比丢掉任何数据都好,因为CAP里的P的模式,不像Zookeeper里采用的是Leader,主从复制的这样一个方式,他不是,它是通过节点与节点之间的通信,一旦你服务当中某个服务出现问题了,我暂时不能通信了,他采用的是这样的一个机制,还有一个原因就是,Eureka还有客户端缓存功能,之所以要对他做自我保护,还有一个原因就是缓存功能,也就是我们微服务的功能,你这个出现问题的节点,可能节点出现问题了,但是注册到我的Eureka当中,我会缓存你这个服务信息,这样即便你这个节点出现故障了,由于我Eureka注册中心里,缓存你之前注册过来的信息,我仍然可以对外界提供服务,所以即便Eureka所有的服务都宕机失效了,微服务的Provider和Consumer还是可以正常通信的,是这样的一个原因,正因为他有缓存的功能,所以正因为有这样的一个特点,从CAP角度来看,服务可用性的一个特点,那么这里我们要注意,当你坏掉的节点,恢复了,退出自我保护模式,那我们现在就来看一下,我们现在这两个服务还是保护模式的,那我们把这两个服务重新启动,我们先去启动Provider,我们再来启动Consumer,那我们这两个实例一启动,服务一启动,是不是又能向注册中心发送心跳包了,能够发送心跳包,他收到这个心跳包以后,发现这个服务又正常了,他就会对这两个自我保护的服务呢,就会退出自我保护,解除自我保护,因为他有每隔30秒发送心跳,启动30秒才能够发包,我们稍等一下吧,我们先继续往下说,所以我们主要是讲解Eureka注册中心,它是怎么来管理我们服务的,当服务出现问题了,而且不是大面积的网络故障的,他对有问题的服务做一个自我保护,那么他又是怎么区分网络故障和单节点故障的呢,通过一个阀值,什么阀值呢,在15分钟内是否低于85%的服务收到他的心跳包,我们再来刷新,那么我的服务在退出的时候,就是我的服务在退出的时候,能不能不让他去启动自我保护呢,当然是可以了,那么这个也是我下节课要讲的,我们服务在关闭的时候,如何去退出自我保护模式,不让他启动自我保护模式呢,这个时候又能向注册中心发送心跳包了,上面那句话是不是没有了,表示了这两个服务已经退出了自我保护模式,就是什么情况下回启动自我保护,为什么要启动自我保护模式的一个讲解

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn.cloud</groupId><artifactId>springcloud-eureka-server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties>   <dependencyManagement><dependencies><dependency>    <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.2.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies><!-- 这个插件,可以将应用打包成一个可执行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server.port=8761
eureka.instance.hostname=eureka-server#spring.application.name=eureka
#eureka.server.evictionIntervalTimerInMs=60000
eureka.client.serviceUrl.defaultZone=http://admin:1234@localhost:8761/eureka
#eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false#eureka.server.enableSelfPreservation=truesecurity.basic.enabled=true
security.user.name=admin
security.user.password=1234eureka.datacenter=cloud
eureka.environment=product#eureka.server.enable-self-preservation=false
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn.cloud</groupId><artifactId>springcloud-eureka-provider</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties> <dependencyManagement><dependencies><dependency>    <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><!--  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency> --></dependencies><!-- 这个插件,可以将应用打包成一个可执行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server.port=9090
eureka.client.serviceUrl.defaultZone=http://admin:1234@localhost:8761/eureka
spring.application.name=springcloud-eureka-provider
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn.cloud</groupId><artifactId>springcloud-eureka-consumer</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties> <dependencyManagement><dependencies><dependency>    <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency></dependencies><!-- 这个插件,可以将应用打包成一个可执行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server.port=9091
eureka.client.serviceUrl.defaultZone=http://admin:1234@localhost:8761/eureka
spring.application.name=springcloud-eureka-consumer
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}

Eureka的服务自我保护相关推荐

  1. 关闭Eureka的服务自我保护

    我们讲解了Eureka当中的自我保护,我们看如何关闭自我保护,这个自我保护是谁来完成的,由我们Eureka Server来完成的,所以我们需要在Eureka Server的配置文件当中,添加两个配置, ...

  2. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)

    一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...

  3. Spring Cloud Netfilx Eureka(服务发现工具)

    一.架构 (1)单体架构 单体架构就是一个项目里面包含这个项目中全部代码.一个应用程序完成全部功能的实现. 优点 部署简单.维护方便.开发成本低. 缺点 当项目规模大.用户访问频率高.并发量大.数据量 ...

  4. Eureka实现服务注册与发现,服务续约

    介绍 Eureka 目前是 2.x 版本,并且官方已经宣布不再维护更新.不过其实 Eureka 已经很稳定了,当做注册中心完全没有问题.Spring Cloud 集成了 Eureka ,并做了完善的封 ...

  5. eureka java_spring cloud 入门系列二:使用Eureka 进行服务治理

    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分 ...

  6. SpringCloud创建Eureka Client服务注册

    1.说明 本文详细介绍微服务注册到Eureka的方法, 即Eureka Client注册到Eureka Server, 这里用任意一个Spring Cloud服务为例, 比如下面已经创建好的Confi ...

  7. 基于Eureka的服务治理

    代码地址如下: http://www.demodashi.com/demo/11927.html 一.服务的注册与发现 关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务 服务消费者启 ...

  8. Spring Cloud (4)---Eureka(服务注册与消费详解)

    Spring Cloud (一)Eureka(服务注册与消费详解) Spring Cloud Eureka(服务注册与消费详解) 1.Spring Cloud Eureka 服务注册中心 Eureka ...

  9. eureka hostname作用_springcloud使用Eureka实现服务治理替代dubbo加zookeeper

    使用Eureka实现服务治理 作用:实现服务治理(服务注册与发现) 简介: Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块.而Spring Clo ...

最新文章

  1. 游戏中的人工智能(AI)和行为树科普
  2. Cocos2d-x 3.0 简捷的物理引擎
  3. Hadoop HIVE 聚合查询
  4. 软考信息系统项目管理师_体系介绍_证书作用价值_报考条件_考生分析---软考高级之信息系统项目管理师001
  5. 推荐安卓开发神器(里面有各种UI特效和实例)
  6. jQuery 学习-DOM篇(六):jQuery 替换 DOM 元素
  7. ORACLE DELETE数据慢的案例
  8. 省级面板数据(1990-2019):能源消费(煤炭、焦炭、石油、原油等)excel或stata版本
  9. Excel连接Mysql数据库
  10. steam怎么设公用计算机,steam怎样设置家庭共享 steam家庭共享设置办法
  11. 非线性动力学_第17届全国非线性振动暨第14届全国非线性动力学 和运动稳定性学术会议在南京召开...
  12. 新一配:如何对电脑配置进行评判【转载】
  13. 大数据基础课17 大数据环境下如何保护隐私
  14. 教育知识与能力-第七章 中学德育
  15. 面对服务器层出不穷的攻击,我们该如何迎刃而解
  16. 【油猴Tampermonkey】脚本安装教程+自用脚本推荐
  17. 夸计算机老师的成语,四字夸奖老师的成语
  18. 超级计算机性能测试,高性能计算机评测框架及其在神威蓝光上的实践
  19. 开发java的准备--下载与安装Java的JDK—Java学习(1)
  20. 使用免驱动版的usb无线网卡,怎么把台式机设置成热点

热门文章

  1. jquery源码--merge grep type trim
  2. 通向架构师的道路(第一天)之Apache整合Tomcat
  3. 【大话设计模式】设计模式系统学习大合集
  4. MyEclipse启动tomcat出现java.lang.OutOfMemoryError: PermGen space 的解决方案
  5. 【学习笔记】第五章 python3核心技术与实践--字典和集合
  6. asp.net 图片 上传 打水印 高质量缩略图
  7. 数据结构之---二叉树C实现
  8. Struts1之Action小结
  9. 当session失效后,无论点击那个页面,都找到顶端页面,跳到登录页面。
  10. Java认证授权框架Spring Security介绍