同一时间同一接口,八台实例里三台处于 OPEN,五台正常。用户连续刷新三次,两次成功一次走兜底,客诉集中在 10 点到 10 点 20 分这二十分钟里。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,熔断器是进程内状态,每台实例各算各的,流量分布又不均匀,打挂依赖的那几台先断。没有集群维度的统计,断开的实例也不会通知其他实例。
「熔断状态不同步」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。改完顺手把文档补一句,省得下次自己重新推一遍。
for ip in 10.0.1.{11..18}; do
echo -n "$ip "; curl -s http://$ip:8081/actuator/health | jq -r '.components.circuitBreakers.status'
done
具体做法是,接受实例级熔断 但把状态汇总到看板 让值班能看到几台在断;负载均衡摘掉持续 OPEN 的实例 避免用户随机命中;统一熔断参数 用配置中心下发而不是每台各写一份;评估是否换成集群流控 需要额外的 token server。
最后用这个标准收尾,八台实例的熔断状态在看板上能一屏看完,OPEN 的实例 30 秒内被摘出负载均衡,用户侧不再一好一坏。
