如何让熔断隔离异常下游?
- 熔断(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 在业务允许时提供降级结果;