跳到主要内容

熔断、降级与限流

如何让熔断隔离异常下游?​

  • 熔断(circuit breaker): 根据失败统计暂时停止访问不稳定下游,给它恢复时间;Kitex 提供实现但默认不启用;
  • service breaker: 按 caller/callee/method 等 key 统计;
  • instance breaker: 隔离单个实例; 位于负载均衡之后;
  • 状态: CLOSED 正常 → OPEN 拒绝 → HALFOPEN 探测 → CLOSED/OPEN;
  • 默认阈值: 错误率 50%,最小样本 200; OPEN 默认冷却 10s;

如何提供可接受的降级结果?​

  • 降级(fallback): RPC 失败或业务响应异常时,返回业务允许的替代结果;没有可接受的替代结果就明确失败;
  • 监控: 默认仍按原 RPC 失败上报; 可选择按 fallback 结果上报;
  • streaming: gRPC streaming 不支持 unary fallback;
  • 缓存降级: 返回旧值时标记 freshness,避免静默传播过期数据;

如何限制服务端流量?​

  • QPS limiter: 默认使用令牌桶控制请求速率;
  • connection limiter: 限制并发连接数量;
  • server.WithLimit: 注入内置 QPS 与连接限制;
  • custom limiter: WithQPSLimiter / WithConcurrencyLimiter 替换同类内置实现;

如何组合容量保护策略?​

  • 第一步: 限流保护 Server 容量;
  • 第二步: 熔断阻止 Client 持续访问异常服务/实例;
  • 第三步: retry 只在幂等与预算允许时恢复瞬时失败;
  • 第四步: fallback 在业务允许时提供降级结果;