Apache 代理后端抖动?用重试冷却+指数退避挡住请求风暴

Apache 代理后端抖动?用重试冷却+指数退避挡住请求风暴

一、先搞懂三个参数

在 ProxyPass 里:

  • connectiontimeout:与后端建立 TCP 连接的超时(秒)。
  • timeout:等待后端响应的超时。
  • retry:后端被标记失败后,Apache 在该秒数内不再向其转发——这是冷却时间,不是重试次数。retry=60 表示失败后冷却 60 秒才恢复。

全局还有 ProxyTimeout(默认 300 秒,高并发下建议调小)。用 ProxySet 可在代理组内统一设:BalancerMember http://backend:8080 retry=30。

二、为什么固定冷却不够

固定冷却是线性的:后端只是短暂抖动,60 秒冷却可能过长;持续故障时,60 秒恢复窗口又可能过密。指数退避让冷却初期短、后期长:

delay = min(cap, base * 2^attempt) + random_jitter

例:base=1s、cap=60s,则第 1 次等 1–2s,第 2 次 2–4s,第 3 次 4–8s……直到 60s 封顶。随机抖动 random_jitter 避免多客户端同时重试造成瞬时集中。

三、三种落地方式

方式做法适用
ProxyPass 参数合理设 retry + timeout简单线性冷却
mod_proxy_hcheck健康检查,坏节点先摘再恢复集群容错
外部脚本动态改配置实现真指数退避精细控制

四、验证建议

压测后端、手动制造超时,观察 Apache 是否在失败后明显拉长转发间隔、不再密集重试,再逐步放开。