proxy_connect_timeout 1s; proxy_read_timeout 10s; proxy_next_upstream error timeout; proxy_next_upstream_tries 2;
网关配了 3 秒超时,上游平均 5 秒才返回,开了重试之后下游 QPS 翻了三倍,业务日志里同一个单号连续出现了三次。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:超时时间短于上游正常耗时,每次重试都注定失败,三次重试等于把一个请求变成三个,上游本来只是慢,被自己人压到雪崩。
这次卡住的地方就在「网关超时重试放大」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:先把网关超时调到大于上游的 P99,再来考虑重试的事;重试只保留连接失败和幂等的 GET,写接口一律别开;给重试加上次数上限和退避间隔,最多两次就够。
确认没问题再收工,上游日志里同一单号只出现一次,5xx 比例回落,QPS 不再被放大,接口耗时也稳了。
