SpringCloud2020 学习笔记(十五)Spring Cloud Eureka 自我保护机制
- 我使用spring boot 2.2.2
- 我使用spring cloud Hoxton.SR1
- 我使用spring cloud alibaba 2.1.0.RELEASE
- 一.说人话就是
- 二.官方对于自我保护机制的定义:
- 三.自我保护机制的工作机制是:
- 四.自我保护开关
- 五.重启测试
- 六.生产环境建议不要关闭自我保护
我使用spring boot 2.2.2
我使用spring cloud Hoxton.SR1
我使用spring cloud alibaba 2.1.0.RELEASE
为什么
使用这个三个版本,是有讲究的;spring boot 2.2.2
,spring cloud Hoxton.SR1
,spring cloud alibaba 2.1.0.RELEASE
一.说人话就是
eureka关闭了自我保护机制后,遇到网络波动等不可控因素导致微服务心跳没及时响应时,会立即从eureka中
剔除
微服务,相反,eureka打开了自我保护机制,微服务还能有时间缓冲一下,待心跳从新连接上后,继续
提供服务
二.官方对于自我保护机制的定义:
自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。
三.自我保护机制的工作机制是:
如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:
1.Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。 2.Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。 3.当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪。
四.自我保护开关
Eureka自我保护机制,通过配置 eureka.server.enable-self-preservation 来
打开
(true默认)/禁用
(false)自我保护机制,默认打开状态,建议生产环境打开此配置。
在eureka服务端操作
server:
#关闭自我保护机制,保证不可用服务被及时踢除
enable-self-preservation: false
#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eviction-interval-timer-in-ms: 2000
完整yml配置
server:
port: 7001
eureka:
instance:
#eureka服务端的实例名称
#hostname: localhost
hostname: eureka7001.com
client:
#false表示不向注册中心注册自己。
register-with-eureka: false
#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都要依赖这个地址
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#单机就是7001自己
#defaultZone: http://eureka7001.com:7001/eureka/
#集群指向其它eureka
defaultZone: http://eureka7002.com:7002/eureka/
server:
#关闭自我保护机制,保证不可用服务被及时踢除
enable-self-preservation: false
#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eviction-interval-timer-in-ms: 2000
在eureka客户端操作
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
lease-renewal-interval-in-seconds: 1
#Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
lease-expiration-duration-in-seconds: 2
完整yml配置文件
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包
url: jdbc:mysql://localhost:3306/springcloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: cn.cookily.springcloud.entities # 所有Entity别名类所在包
eureka:
client:
#表示是否将自己注册进eurekaServer 默认为true
register-with-eureka: true
#是否从eurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetch-registry: true
service-url:
#单机版
#defaultZone: http://localhost:7001/eureka
# 集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: payment8001 #注册中心看到的实例名
prefer-ip-address: true #访问路径可以显示IP地址
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
lease-renewal-interval-in-seconds: 1
#Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
lease-expiration-duration-in-seconds: 2
五.重启测试
1.先启动eureka7001
2.在启动payment8001
3.我们人为模拟下payment8001失联(我们直接关闭这个服务)
六.生产环境建议不要关闭自我保护
项目地址:
https://github.com/cookily/cloud2020.git