熔断

123 阅读2分钟

熔断

一切源于生活

有一天有一个人开车,发现半路熄火了。他先尝试多次重新打火,尝试了9次还是没有成功,后面的车都被他堵住了。所以他找了人帮忙把车子移到一边,并在距离自己车子的附近立了一个警示牌,后面的车子可以慢慢地绕着通行,然后他再重新找办法。

什么是熔断?

  • 因为微服务而存在
  • 一种局部微服务出现问题的应对策略
  • 你可以理解为供电的“保险”装置

为什么要熔断

  • 解决在微服务的场景中存在的一颗耗子屎毁了一锅汤问题(雪崩)
  • 为了保证整体的健康,及时更换出现问题的服务

具体实现

熔断器有三种状态:

  • Closed:初始状态,包含调用失败的计数器,调用失败,失败次数加1。如果最近失败次数超过了在给定时间内允许失败的阈值,则切换到Open状态;然后开启一个超时时钟,当到达超时时钟时间后,则切换到Half Open状态,该超时时间的设定是给了系统一次机会来修正导致调用失败的错误,以回到正常的工作状态。在Closed状态下,错误计数是基于时间的。在特定的时间间隔内会自动重置,这能够防止由于某次的偶然错误导致熔断器进入Open状态,也可以基于连续失败的次数。
  • Open:请求会立即返回错误响应,而不调用服务端。
  • Half-Open:允许客户端一定数量的去调用服务端,达到限流效果,如果这些请求对服务的调用都成功了,那么可以认为之前导致调用失败的错误已经修正,此时熔断器切换到Closed状态,同时将错误计数器重置。但如果这一定数量的请求有调用失败的情况,则认为导致之前调用失败的的问题仍然存在,熔断器切回到断开状态,然后重置计时器来给系统一定的时间来修正错误。