微服务(三)Actuator监控、Spring Security、Ribbon客户端负载均衡
前言
Eureka有个自我保护机制。
这里的自我保护机制不是对eureka来说的,而是对每个服务来说。从上一篇文章中,我们知道在默认情况下,Eureka Server在一定时间内,没有接收到某个微服务心跳,会将某个微服务注销(90S)。但是当网络故障时,微服务与Server之间无法正常通信,上述行为就非常危险,因为微服务正常,不应该注销。
Eureka Server通过自我保护模式来解决整个问题,当Server在短时间内丢失过多客户端时,那么Server会进入自我保护模式,会保护注册表中的微服务不被注销掉。当网络故障恢复后,退出自我保护模式。思想:宁可保留健康的和不健康的,也不盲目注销任何健康的服务。
自我保护机制在每分钟续约数量小于客户端总数的85%时会触发保护机制。也就是说假设:服务实例数:10个,期望每分钟续约数:10 * 2=20,期望阈值:20*0.85=17,自我保护少于17时 触发。
默认是把他开启,认为是网络的抖动造成的服务不可用,可以防止错误的注销掉微服务。还有另外一种原因,服务真的不可用了,但是对于eureka来讲,不知道服务是否可用。这里用到了Actuator监控,在服务端自己控制本服务是否出现异常,再给Eureka server端。
1. Actuator监控
下面的都是在provider机器中加入。
下面是Actuator的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
直接运行。
但是,spring Boot 2.0 的Actuator只暴露了health和info端点,提供的监控信息无法满足我们的需求,无法知道内存、down机的信息。所以需要在properties配置文件中额外配置一些信息,将actuator完善。
management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true
开启手动控制,将自己的健康状态传给server。Health是UP或者DOWM传给server。
eureka.client.healthcheck.enabled=true
再编写一个测试的seervice类
@Service
public class HealthStatusService implements HealthIndicator {
private Boolean status