02-熔断

断路器可保护系统免于将请求堆叠到不正常的服务(导致级联故障)的麻烦。

  • 系统运行状况良好时,电路处于闭合状态(正常运行)。
  • 当系统运行不正常时,电路将断开,并且不再转发请求(而是由后备机制处理)。

为了评估您的系统是否健康,断路器不断监控服务。

  • CircuitBreaker仅分析将其加入到中间件链之后发生的情况。之前发生的事情对其状态没有影响。

  • CircuitBreaker仅影响使用它的路由器。不使用CircuitBreaker的路由器将不受其状态的影响。

注意

每个路由器最终将获得其自己的给定断路器的实例。

如果两个不同的路由器引用相同的断路器定义,则它们每个将获得一个实例。这意味着一个断路器可以断开,而另一个断路器保持闭合:它们的状态不共享。

这是预期的行为,我们希望您能够定义使服务正常运行的原因,而不必为每个路由声明断路器。

样例

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: latency-check
spec:
  circuitBreaker:
    expression: LatencyAtQuantileMS(50.0) > 100

状态描述

断路器有三种可能的状态:

  • 关闭:服务运行正常
  • 打开:后备机制接管了服务
  • 正在恢复:断路器尝试通过逐步向服务发送请求来恢复正常操作

关闭

闭合时,断路器仅收集指标以分析请求的行为。

在指定的时间间隔(checkPeriod),它将评估expression以确定其状态是否必须更改。

打开

打开后,后备机制将在FallbackDuration期间接管正常的服务调用。在此持续时间之后,它将进入恢复状态。

正在恢复

在恢复时,断路器将逐步将请求再次发送到服务(以线性方式恢复RecoveryDuration)。

  • 如果服务在恢复期间失败,则断路器将再次打开。
  • 如果服务在整个恢复期间正常运行,则断路器将返回关闭状态。

参数

触发机制

可以指定一个expression,一旦匹配,该表达式将触发断路器(并应用后备机制而不再调用服务)。

expression可以检查三种不同的指标:

  • 网络错误率,NetworkErrorRatio
  • 状态码比例,ResponseCodeRatio
  • 分位点的延迟(毫秒级别),LatencyAtQuantileMS

NetworkErrorRatio

如果希望断路器以30%的网络错误率触发,则表达式将为NetworkErrorRatio() > 0.30

ResponseCodeRatio

可以根据给定范围的状态码的比率来触发断路器。

ResponseCodeRatio接受四个参数,fromtodividedByFromdividedByTo

将要计算的操作是sum(to -> from)/ sum(dividedByFrom -> dividedByTo)。

如果sum(dividedByFrom -> dividedByTo)等于0,则ResponseCodeRatio返回0。 from是包括在内,to是唯一的。

例如,如果25%的请求返回5XX状态(在请求中返回的状态码为0到5XX),则ResponseCodeRatio(500,600,0,600) > 0.25表达式将触发断路器。

LatencyAtQuantileMS

当给定比例的请求变得太慢时,可以触发断路器。

例如,当中位数等待时间(分位点50)达到100毫秒(MS)时,表达式Lat​​encyAtQuantileMS(50.0)> 100将触发断路器。指定一个分位点,50表示中位数,即有一半的请求都处于这个状态。

必须提供分位数点的浮点数形式(后跟.0)。

多指标判断

可以在表达式中使用运算符组合多个指标。支持的操作包括:AND(&&),OR(||)。

例如,ResponseCodeRatio(500, 600, 0, 600) > 0.30 || NetworkErrorRatio() > 0.10表示当30%的请求返回5XX状态码或者网络错误率达到10%时触发断路器。

操作符

支持的操作符列表:

  • 大于(>
  • 大于等于(>=)
  • 小于(<)
  • 小于等于(<=)
  • 等于(=)
  • 不等于(!=)

后备机制

后备机制向客户端返回HTTP 503 Service Unavailable(而不是调用目标服务),无法修改这个值。

检查周期

用于评估expression并确定断路器状态是否必须更改的时间间隔。默认情况下,CheckPeriod为100ms,无法修改这个值。

后备机制运行时长

默认情况下,FallbackDuration是10秒,无法修改这个值。

正在恢复运行时长

恢复模式的持续时间(恢复状态)。

默认情况下,RecoveringDuration是10秒,无法修改这个值。

上次修改: 14 April 2020