Register(服务注册):把自己IP port注册到 eureka
Renew(服务续约):发送心跳30秒发送一次。
Eviction(剔除):超过90秒未发送,eureka释放,从注册表剔除
Cancel(服务下线):provider停止关闭,调用eureka,把自己从注册表剔除(防止consumer调用##### 不存在的服务)
Get Registry(获取注册列表)
Replicate(复制):eureka集群自己的数据同步和复制
Euerka:AP 原理
- A: 在euerka 集群中如果某台服务器宕机,euerka没有zookeeper的选举leader规则过程,客户端请求会自动切换到新的euerka的节点上,当宕机的服务器从恢复后,euerka会从新将其纳入到euerka服务器集群中(实现高可用)
- P:自我保护机制(分区,容错),为了在所有service发生严重错误网络故障时依旧能提供可用性(心跳规则每30秒发送一次请求),如果euerka在短时间内丢失大量心跳就会进入自我死亡模式,同时保留那些心跳死亡的注册信息不过期。同时euerka节点对于新的服务还能继续提供注册信息,对于死亡的继续保留,以防止客户端像这个服务发送请求,当网络恢复时,euerka节点就会推出自我保护机制
Euerka自我保护模式
- 自我保护的条件:
一般情况下,微服务在Eureka上注册后,会30秒定期发送心跳,Eureka 通过心跳来判断微服务是否健康,同时会定期删除超过90秒没有发送心跳的服务。
- 有2种情况会导致Eureka Server收不到微服务的心跳,
1. 是微服务自身原因所致,比如故障或关闭;
2. 是微服务与eureka之间的网络出现故障。
通常(微服务自身的故障关闭)只会导致个别服务出现故障,一般不会出现大面积的故障,而(网络故障)通常会导致Eureka Server在短时间内无法收到大批心跳。
考虑到这个区别,Eureka设定了一个阀值,当判断挂掉的服务的数量超过阀值时,Eureka Server认为很大程度上出现了网络故障,将不再删除心跳过期的服务。
- 那这个阀值是多少呢?
1. 15分钟之内是否低于85%;
2. Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%
3. 这种算法叫着Eureka Server的自我保护模式。
- 为什么要自我保护
1. 因为同时保留“好数据”与“坏数据”总比丢掉任何“好数据”要更好,当网络故障恢复后,这个Eureka节点会退出“自我保护模式”。
2. Eureka还有客户端缓存功能(也就是微服务的缓存功能)。 即便Eureka集群中所有节点都宕机失效,微服务的provider 和consumer 都能正常通信。
3. 微服务的负载均衡策略会自动剔除,死亡的微服务节点。
关闭自我保护设置
// 关闭自我保护 设置为flase
eureka.server.enableSelfPreservation=false
// 清理间隔(单位毫秒,默认是60*1000)
eureka.server.eviction-interval-timer-in-ms=60000
优雅停服
pom.xml 导入 spring-boot-actuator(jar包)
post请求
http://host:port/shutdown
// 启用停止配置 shutdown
endpoints.shutdown.enabled=true
// 禁用密码验证
endpoints.shutdown.sensitive=false
加强eureka安全访问
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>Spring-boot-starter-security</artifactId>
</dependency>
配置文件增加用户名密码
eureka.client.serviceUrl.defaultZone=http://用户名:密码@eureka:8761/eureka
// 安全认证(开启给予http basic的安全认证)
security.basic.enabled=true
security.user.name=user
security.user.password=123456
网友评论