微服务教程hystrix(Hystrix网关解决方案-脱离Eureka的Https服务器状态监控)
微服务教程hystrix(Hystrix网关解决方案-脱离Eureka的Https服务器状态监控)4.Iping调用如下,通过图1我们知道它默认的是NoOpPing具体如何配置先看一下Iping的调用若想实现脱离Eureka的Htpps的服务器状态监控,需要修改Irule、Iping的参数策略,下面讲解如何基于这两个参数的改造进行服务器状态监控2.先看IloadBalancer调用图如下,默认是ZoneAwareLoadBalancer。该改造中不需要变化3.Irule的调用图如下,默认ZoneAvoidanceRule,
由于该网关未基于Eureka服务注册和发现,具体可见Ribbon Hystrix网关解决方案-非Eureka版,未使用到Eureka的心跳检查机制。导致在请求过程中无法正确获取服务器状态,只能通过Ribbon的补偿模式(初次失败会在10s内再尝试一次,若再失败每过40s之后尝试)去请求服务,若服务返回状态不正常Ribbon停止请求。由于并发数较大,请求的超时时间设置为30s等因素。若超时会在30s后获取到返回请求知道服务器状态,而在这30s内会有大量请求进来,这部分请求同样会失败,服务的不可用性概率变高了,因此必须主动做心跳检查。
心跳检查:主动获取服务状态,是否能正常提供服务,若无法提供则标记当前服务实例为不可用,在Ribbon负载均衡时,该服务实例不包含在当前服务的可用实例组中。
1.Ribbon负载均衡的默认配置
Ribbon负载均衡主要由客户端配置、负载均衡器、负载均衡策略、实例检查策略、服务实例清单的维护机制、服务实例清单的过滤机制等构成,如下图所示:
若想实现脱离Eureka的Htpps的服务器状态监控,需要修改Irule、Iping的参数策略,下面讲解如何基于这两个参数的改造进行服务器状态监控
2.先看IloadBalancer调用图如下,默认是ZoneAwareLoadBalancer。该改造中不需要变化
3.Irule的调用图如下,默认ZoneAvoidanceRule,
具体如何配置先看一下Iping的调用
4.Iping调用如下,通过图1我们知道它默认的是NoOpPing
基于上述图,要想实现脱离Eureka的Https服务器状态监控,只需要修改下述两个配置文件即可。
#使用的ping策略
gateway.ribbon.NFLoadBalancerPingClassName=com.happigo.gateway.util.PingUrl
#使用的rule策略,若使用pingurl則不能使用ZoneAvoidanceRule,对于iping的服务器状态不生效
gateway.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule
上述的ping和rule策略为什么选择PingUrl和WeightedResponseTimeRule, 是经过几个测试,具体如下;
1.不修改rule,直接修改ping,发现ping会对服务器状态进行修改(isAlive为false),但是rule对于该状态不进行判断。结论:ZoneAvoidanceRule是基于判断服务器状态监控是通过Eureka的健康检查来实现的。
2.修改rule和ping,ping会对服务器状态进行修改(isAlive为false),rule且会根据服务器状态进行服务器实例清单过滤,实现状态监控,若isAlive为false,该服务器属于不可用,不纳入rule规则
3.由于请求是https的,故需要重写PingUrl,并引入。ping的方式采用了HttpClient方式调用Https。
综上,通过可以实现脱离Eureka的Https服务器状态监控。