注册中心-Eureka
2023-02-24 本文已影响0人
我可能是个假开发
一、架构原理
Eureka架构.png
- Register(服务注册):把自己的IP和端口注册给Eureka
- Renew(服务续约):发送心跳包,每30s发送一次,告诉eureka自己还存活,如果90s还未发送心跳,宕机。
- Cancel(服务下线):当Provider关闭时,会向Eureka发送信息,把自己从服务列表中移除。防止Consumer调用到不存在的服务
- Get Registry(获取服务注册列表):拉取服务列表,获取别的微服务应用的信息
- Replicate(集群中数据同步):Eureka集群中的数据复制与同步
- Make Remote Call(远程调用):完成服务的远程调用
二、Eureka自我保护
一般情况下,服务在Eureka上注册后,会每30s发送心跳包,Eureka通过心跳来判断服务是否健康,同时会定期删除超过90s没有发送心跳的服务。
两种情况会导致Eureka Server收不到微服务的心跳
- 微服务自身的原因
- 微服务与Eureka之间的网络故障
1.Eureka自我保护模式
Eureka Server在运行期间会去统计心跳失败比例在15min之内是否低于85%,如果低于85%,Eureka Server会将这些实例保护起来,让这些实例不会过期,同时提示警告。
2.启动自我保护模式的原因
- 同时保留“好数据”与“坏数据”比丢掉数据要好,当网络故障恢复后,这个Eureka节点会退出自我保护模式
- Eureka还有客户端缓存功能(微服务的缓存功能),即使Eureka集群中所有节点都宕机失效,微服务的provider和consumer都能正常通信
- 微服务的负载均衡策略会自动剔除死亡的微服务节点
3.自我保护模式配置
eureka:
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 60000
三、Eureka优雅停服
配置了优雅停服以后,就不需要Eureka Server中配置关闭自我保护
使用actuator实现优雅停服
1.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.服务提供者的 application.yml 添加度量指标监控与健康检查
management:
endpoints:
web:
exposure:
include: shutdown #开启shutdown端点访问
endpoint:
shutdown:
enabled: true #开启shutdown实现优雅停服 再次确认暴露shutdown端点
management.endpoints.web.exposure.include:需要暴露什么端点,可暴露所有端点,写法为 ’ * ',虽然选择暴露所有端点,但 shutdown 因为安全性问题,actuator 并未开启 shutdown 端点,需使用 management.endpoint.shutdown.enabled 再次确认开启 shutdown 端点。
image.png
image.png
image.png
3.使用 post 方式请求 http://localhost:7070/actuator/shutdown,优雅停服
极客时间《Spring Cloud 微服务项目实战》学习笔记Day20