第 2 节 · 探测机制
每 3 秒一轮,12 条路径并发,只测往返
探测是选路的输入源,一旦采样失真,后面所有排序与阈值都失去意义。因此探测被设计成高频、轻量、可核算三件事同时成立。
每条路径独立探测,间隔固定 3 秒,一轮 12 条路径并发发出。探测包 32 字节,只做往返测量,不承载业务流量,因此可以高频率运行而不与业务争用队列。
单条路径 6 分钟累积 120 次采样,评分取最近 6 分钟的滑动窗口,旧数据按 15 秒半衰期衰减。窗口取 6 分钟的理由很直接:短于 3 分钟会把瞬时抖动当成趋势,长于 10 分钟又跟不上拥塞切换的速度,实测 6 分钟时误判率最低。
探测流量可以算清:32 字节乘 12 条再除以 3 秒约等于每秒 128 字节,换算到每天约 11 MB,按 100 Mbps 档的月流量口径不足 1%,因此不计入业务流量统计。
- 探测周期 3 秒,12 条并发,单轮耗时 40~60 ms,不阻塞业务流。
- 采样窗口 6 分钟、共 120 次采样,异常值按 P95 截断后再参与评分。
- 连续 3 次无回报判定路径不可用;恢复需连续 5 次达标,避免假恢复。
- 探测流量每天约 11 MB,占 100 Mbps 档月流量不足 1%。
第 3 节 · 五维权重
四项权重定排序,一到两项定切换
权重回答的是排序问题,阈值回答的是切换问题,两者不是一回事。排序每分钟刷新,切换只在越过阈值时发生,这个分离是抑制震荡的基础。
| 维度 | 权重 | 计算方式 | 实测作用 |
|---|---|---|---|
| 往返时延 | 40% | 最近 6 分钟中位数归一化 | 决定主用排序,权重最高 |
| 丢包 | 30% | 丢失探测包占比 | 连续 2 轮超 2.5% 直接触发切换 |
| 抖动 | 20% | 相邻采样 RTT 差的 P95 | 会议与实时业务的实际体验指标 |
| 带宽 | 10% | 60 秒稳定段吞吐 | 只在大文件场景拉开差距 |
把带宽放在 10% 而不是更高,原因在同一组采样里:121 ms 与 168 ms 之间差 47 ms,而带宽差 1 倍也无法在交互场景里补回这 47 ms,因此带宽只在批量传输中作为次要因子参与排序。
第 4 节 · 切换阈值
两个触发条件,三段执行耗时
阈值只有两个,任一成立即切换,两个都不成立就保持不动,哪怕排序已经变化。这条规则把"经常切换"与"该切不切"之间的权衡固定下来。
触发条件一:往返时延高于基线 1.35 倍,连续 2 轮探测成立才触发,避免单个采样点的抖动被误判。条件二:丢包超过 2.5%,同样需要连续 2 轮成立,这个量级对应可用性下降约 3 个数量级。
1.35 倍是反推出来的系数:低于 1.25 倍时,正常抖动会被当成劣化,切换次数上升 3 倍;高于 1.5 倍时用户已能感知卡顿,切换显得滞后。2026-09 的采样里,1.35 倍是切换次数与卡顿上报同时处于低位的取值。
切换执行耗时实测 80~120 ms,按三段拆分:候选确认 20~30 ms,连接重建 40~60 ms,首包重放 20~30 ms。对长连接业务,客户端在同一流程里重放未完成的请求,因此业务侧通常只看到一次短卡顿。
- 阈值一:RTT 高于基线 1.35 倍,连续 2 轮成立触发,基线取 6 分钟中位数。
- 阈值二:丢包超过 2.5%,连续 2 轮成立触发,对应丢包率从 0.2% 量级恶化 1 个数量级。
- 执行耗时 80~120 ms,其中候选确认 20~30 ms、连接重建 40~60 ms、首包重放 20~30 ms。
- 切换完成后 10 秒内不再触发第二次切换,作为最小驻留时间。
第 5 节 · 回切冷却
切换可以快,回切必须慢
回切是震荡的主要来源:一条路径刚恢复就往回切,往往几分钟后又劣化。因此回切被单独加了 45 秒冷却与每小时 3 次的上限。
原路径需要连续 45 秒达标才允许回切,且 1 小时内最多回切 3 次。达到上限后锁定当前主用到下一次评估窗口,把"抢主用"的行为压到最低。
实测依据来自 2026-09 的一次 4 小时拥塞:去掉冷却的回切策略产生了 37 次振荡,加上 45 秒冷却后降到 4 次,业务侧感知的卡顿从 12 次降到 2 次。代价是恢复后平均多用 52 秒才回到原路径,这段时间的时延差在 9 ms 以内。
冷却只约束回切方向,不约束紧急切换。即使原路径刚恢复,只要满足切换阈值,流量也会立刻切走,不会因为等待冷却而忍受劣化。
第 6 节 · 震荡抑制
四条规则把切换频率压到可控区间
震荡的代价不只是切换耗时,还包括重放失败、会话重连与日志噪声。四条规则分别从阈值、驻留、频次与窗口四个方向抑制震荡。
- 双阈值:切换用 1.35 倍,回切要求时延回到基线的 1.15 倍以内,方向不同、要求不同。
- 最小驻留:任一路径被选为主用后 10 秒内不再被替换,防止两条质量接近的路径互相顶替。
- 频次上限:每小时回切不超过 3 次,超出后锁定当前主用,直到下一个评估窗口。
- 滑动窗口:评分取 6 分钟滑动而非固定时间片,消除整点边界上的采样跳变。
四条规则叠加后,正常时段的切换频率在每路径每小时 0.6 次以下,拥塞时段升到 1.8 次上下,仍低于业务可感知的阈值。参数调整的方法见下载与开通页的配置包说明。
第 7 节 · 与业务参数联动
同一套数据源,两套阈值下发
阈值不是全局常量。会议类业务对抖动敏感,批量传输对丢包敏感,两套参数共用同一份探测数据,切换逻辑完全一致,只是判定条件不同。
实时业务(会议、远程终端、联机操作)使用 1.35 倍与 2.5% 的阈值组合,优先保证抖动稳定;批量业务(构建、同步、备份)使用 1.5 倍与 1.2% 的组合,宁可接受更高的抖动也不愿损失数据包。
两套参数的差异只体现在判定条件上,探测、评分与排序完全共用,因此不会出现"同一时刻两条路径评分不一致"的情况。切换次数在两组参数下的差别约为 2 倍,批量组更少。
参数随配置包下发,改一次阈值需要重新导入配置包,实测生效 12 秒,不需要重启客户端,也不影响已建立的会话。