知识卡片

韧性模式组合的执行顺序

专业/工作 · 524.g

内容

限流、超时、熔断、重试这几种韧性模式叠加使用时,谁先谁后不是随意的,直接决定了系统的实际行为:[[三种限流场景对应三种模式]]最先执行——一个请求如果已经超出配额,应该在最外层就被直接拒绝,压根不该往后走,不然限流就失去了意义;接下来是[[三种超时各守一段链路]](时间限制器),先框定单次调用能等多久;然后是[[熔断器的三态机制]],判断这条通路当前是否允许通过;最后才是重试,只在通过了熔断检查之后,针对失败的调用做[[指数退避加抖动防止重试雪崩]]。这个顺序保证了:被限流拒绝的请求不会消耗熔断器的调用配额,被熔断器直接短路的请求也不会触发昂贵的重试逻辑,每一层只处理它该处理的那部分流量。发散:这提醒了一个容易被忽视的坑——单独理解每个模式很容易,但把它们叠在一起用时,顺序错了会产生反直觉的后果,比如把重试放在熔断器之前,会导致重试本身的失败次数被算进熔断器的失败统计里,让熔断器过早或者过晚跳闸,这类顺序错误往往只有在压测或生产故障时才会暴露出来。

参考来源

《Cloud Native Spring in Action》第9章《API gateway and circuit breakers》