当某服务在短时间内多次发生调用失败,服务消费方的断路器会被断开。开路的断路器就像电路跳闸一样,阻止消费方向故障服务发送请求,直接返回失败或者执行消费方的降级逻辑。断路器通常在一定时间后关闭,在这期间可以为底层服务提供足够的空间来恢复。
理解断路器需要了解以下几点:
第一、断路器只是作用在服务调用这一端。
第二、服务的健康状况 = 请求失败数 / 请求总数。
第三、断路器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的。
第四、关闭时, 请求被允许通过断路器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态。
第五、打开状态, 经过一段时间后, 断路器会自动进入半开状态, 这时断路器只允许一个请求通过. 当该请求调用成功时, 断路器恢复到关闭状态. 若该请求失败, 断路器继续保持打开状态, 接下来的请求被禁止通过。
第六、保证服务调用者在调用异常服务时, 快速返回结果, 避免大量的同步等待。
第七、在一段时间后继续侦测请求执行结果, 提供恢复服务调用的可能。
API网关作为服务请求的统一入口,负责转发请求到后端服务。对于所有后端服务来说,网关就是服务请求方。所以,在网关上配置断路器是最佳实践。Spring Cloud Zuul默认提供了对Hystrix的支持。