Skip to content

Rotate connections sooner with symmetric lifetime jitter - #122

Merged
nange merged 1 commit into
masterfrom
chore/conn-rotation-jitter
Aug 26, 2026
Merged

Rotate connections sooner with symmetric lifetime jitter#122
nange merged 1 commit into
masterfrom
chore/conn-rotation-jitter

Conversation

@nange

@nange nange commented Aug 26, 2026

Copy link
Copy Markdown
Owner

背景

HTTP/2 长连接在高峰时段容易被中间盒限速,因此需要周期性轮换连接。原实现默认连接寿命 7 分钟、随机 jitter 为"只加 50%"(即 [base, 1.5×base]),存在两个问题:

  • 平均寿命偏高,连接不够"新鲜",轮换不够及时;
  • 加法 jitter 让部分连接活到 1.5×base,尾部偏长。

改动

  1. 默认连接寿命DefaultConnLifetimeSec 从 420s(7min)降至 360s(6min)。
  2. jitter 方式rotationLifetime 由"只加 50%"改为"对称 ±30%",即 [0.7×base, 1.3×base]
  3. 同步更新单元测试(TestRotationLifetimeJitter 校验上下界)与 README 文档。

效果

  • 错开窗口保持 216s(≈43 个健康 tick),同批连接的到期时间依旧充分分散,不会同时进入 expiring;
  • 平均寿命从 468s 降至 360s(配置值 6min 现在表示均值),轮换更及时,缓解中间盒限速;
  • 最大寿命从 576s 降至 468s,无长尾,TLS 握手簇化风险更低;
  • 代价:少数连接会提前到 ~4.2min 轮换,握手频率略增(可接受)。

测试

  • go test ./transport/... 通过
  • make lint 0 issues

@nange
nange merged commit 1d237ba into master Aug 26, 2026
6 checks passed
@nange
nange deleted the chore/conn-rotation-jitter branch August 26, 2026 09:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant