Eureka的服务自我保护
一个名字叫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的服务自我保护相关推荐
- 关闭Eureka的服务自我保护
我们讲解了Eureka当中的自我保护,我们看如何关闭自我保护,这个自我保护是谁来完成的,由我们Eureka Server来完成的,所以我们需要在Eureka Server的配置文件当中,添加两个配置, ...
- Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)
一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...
- Spring Cloud Netfilx Eureka(服务发现工具)
一.架构 (1)单体架构 单体架构就是一个项目里面包含这个项目中全部代码.一个应用程序完成全部功能的实现. 优点 部署简单.维护方便.开发成本低. 缺点 当项目规模大.用户访问频率高.并发量大.数据量 ...
- Eureka实现服务注册与发现,服务续约
介绍 Eureka 目前是 2.x 版本,并且官方已经宣布不再维护更新.不过其实 Eureka 已经很稳定了,当做注册中心完全没有问题.Spring Cloud 集成了 Eureka ,并做了完善的封 ...
- eureka java_spring cloud 入门系列二:使用Eureka 进行服务治理
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分 ...
- SpringCloud创建Eureka Client服务注册
1.说明 本文详细介绍微服务注册到Eureka的方法, 即Eureka Client注册到Eureka Server, 这里用任意一个Spring Cloud服务为例, 比如下面已经创建好的Confi ...
- 基于Eureka的服务治理
代码地址如下: http://www.demodashi.com/demo/11927.html 一.服务的注册与发现 关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务 服务消费者启 ...
- Spring Cloud (4)---Eureka(服务注册与消费详解)
Spring Cloud (一)Eureka(服务注册与消费详解) Spring Cloud Eureka(服务注册与消费详解) 1.Spring Cloud Eureka 服务注册中心 Eureka ...
- eureka hostname作用_springcloud使用Eureka实现服务治理替代dubbo加zookeeper
使用Eureka实现服务治理 作用:实现服务治理(服务注册与发现) 简介: Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块.而Spring Clo ...
最新文章
- 游戏中的人工智能(AI)和行为树科普
- Cocos2d-x 3.0 简捷的物理引擎
- Hadoop HIVE 聚合查询
- 软考信息系统项目管理师_体系介绍_证书作用价值_报考条件_考生分析---软考高级之信息系统项目管理师001
- 推荐安卓开发神器(里面有各种UI特效和实例)
- jQuery 学习-DOM篇(六):jQuery 替换 DOM 元素
- ORACLE DELETE数据慢的案例
- 省级面板数据(1990-2019):能源消费(煤炭、焦炭、石油、原油等)excel或stata版本
- Excel连接Mysql数据库
- steam怎么设公用计算机,steam怎样设置家庭共享 steam家庭共享设置办法
- 非线性动力学_第17届全国非线性振动暨第14届全国非线性动力学 和运动稳定性学术会议在南京召开...
- 新一配:如何对电脑配置进行评判【转载】
- 大数据基础课17 大数据环境下如何保护隐私
- 教育知识与能力-第七章 中学德育
- 面对服务器层出不穷的攻击,我们该如何迎刃而解
- 【油猴Tampermonkey】脚本安装教程+自用脚本推荐
- 夸计算机老师的成语,四字夸奖老师的成语
- 超级计算机性能测试,高性能计算机评测框架及其在神威蓝光上的实践
- 开发java的准备--下载与安装Java的JDK—Java学习(1)
- 使用免驱动版的usb无线网卡,怎么把台式机设置成热点
热门文章
- jquery源码--merge grep type trim
- 通向架构师的道路(第一天)之Apache整合Tomcat
- 【大话设计模式】设计模式系统学习大合集
- MyEclipse启动tomcat出现java.lang.OutOfMemoryError: PermGen space 的解决方案
- 【学习笔记】第五章 python3核心技术与实践--字典和集合
- asp.net 图片 上传 打水印 高质量缩略图
- 数据结构之---二叉树C实现
- Struts1之Action小结
- 当session失效后,无论点击那个页面,都找到顶端页面,跳到登录页面。
- Java认证授权框架Spring Security介绍