🎯 问题
代理策略组一度膨胀到 10 个。每个策略组都要配一个「健康检查 URL」,而检测负载 = 组数 × 节点数 ÷ 检测间隔。于是三个问题同时冒出来:
- 订阅流量被检测持续吃掉;
- 高频检测可能触发机场侧防护;
- 检测结果失真 —— 检测 URL 不代表它要服务的业务。
要回答的核心问题只有两个:组能收敛到几个?能不能用一个检测 URL 代表一类目标?
🧪 分析流程(五步)
flowchart LR
A[第一步 定口径] --> B[第二步 审查检测URL有效性]
B --> C[第三步 全节点并发批量采样]
C --> D[第四步 相关性怎么算才对]
D --> E[第五步 决策 哪些组可留]
- 定口径 —— 先把「什么叫成功、什么叫快」写成可复现的判据;
- 审查检测 URL —— 先确认候选 URL 真的代表业务,排除已知错误的 URL;
- 批量采样 —— 全节点 × 全候选 URL × 多轮,同一轮并发(保证「同一时刻」可比);
- 相关性判定 —— 先证伪错误统计量,再上正确口径;
- 决策 —— 按「能否复用同一个检测 URL」决定每个组的存废。
🔍 步骤一 / 二:测试口径 与 检测 URL 有效性审查
测试口径(可复现)
- 「成功率」= 延迟 ≤ 阈值 的样本占比;
- 「分位数」只对成功样本统计;
- 检测目标一律写完整 URL,不写简称。
检测 URL 有效性怎么审
- ① 查上游官方仓库自带配置里用的那个 URL —— 官方口径最稳(简单、稳定、无业务语义);
- ② 检测 URL 必须指向「该组真正服务的那台主机」。用通用 CDN 目标会骗人:实测同一节点测某 CDN 只有几十毫秒,对真正要下载的主机却只有 20KB/s —— 换真实目标后该节点直接超时淘汰。
两条关键判据
- 由 CDN 边缘应答的 URL 是假信号:它量的是「到最近边缘」,每个节点都近,系统性偏乐观,不代表到业务后端的路径;
- 被针对性限速的 URL 成功率会显著偏低:同一批共享出口 IP 打某大厂目标时成功率仅三成上下,而它本身并不慢。
📊 步骤三:采样结果(聚合,不含节点明细)
口径:成功率 = 延迟 ≤ 800ms 占比;分位数仅统计 ≤800ms 的样本(单位 ms)。
| 检测目标 | 成功率 | P20 | P50 | Pmax | P20−P0 |
|---|---|---|---|---|---|
| 官方连通性检查 URL(小、稳、204) | 38% | 277 | 381 | 772 | 64 |
| 大厂静态资源域名(同为该厂体系) | 45% | 264 | 338 | 794 | 59 |
| 大厂主域名 generate_204 | 35% | 284 | 352 | 732 | 41 |
| 某 AI 对话站 cdn-cgi/trace | 0% | — | — | — | — |
| 某 AI 编码站 API | 0% | — | — | — | — |
| 包管理缓存主机小文件 | 31% | 603 | 659 | 788 | 178 |
| 代码托管站 robots.txt | 26% | 287 | 336 | 765 | 40 |
| 镜像仓库 API | 2% | 675 | 679 | 796 | 3 |
读数:
- 全场景成功率都不高(2%~45%)—— 节点对这批目标普遍抖动大;
- 两个 AI 站成功率 0%,原因是它们的延迟下限本身就 >1.1s / >1.4s(比其它目标高一个量级),不是「全节点不可用」;
- 用阈值截断后再算分位数会压窄分布,所以 P20−P0 偏小。
📐 步骤四:相关性怎么算才对(三个错误做法的证伪 + 正确口径)
- ❌ 按值排序后取分位做相关 —— 排序摧毁配对,两条排序后的序列都单调递增 → 任意两目标 r≈1.0,数学必然的假相关,与业务无关。
- ❌ 原始「差值波动率」 ——
Var(B−A) = σA² + σB² − 2r·σA·σB,它同时装了 r 和 σ 的比值。反例:B = 3A(真相关 1.0)差值波动最大;B = A + 小噪声(真相关 0.97)反而最小 → 会把「只是量程不同」误判成「不相关」。 - ✅ 正确做法 —— 配对轴必须落在同一个体上(每个节点 = 一个观测);统计量用秩相关并报 n 与置信区间,多重比较要校正;若偏爱「差值」视角,用标准化差值(除以合并 σ),其 RMS 与 r 一一对应。
- 前提:先测信度 —— 同一目标重复采样的 split-half 信度若很低,说明「单次延迟」不是节点的稳定属性,相关系数会被噪声衰减;此时 「≈0」既不能证明不相关、也没资格证明相关,必须先加密采样(每格 ≥10 次、跨 ≥2 时段)才有资格下结论。
| 检测目标对 | 秩相关 | 95%CI | n |
|---|---|---|---|
| 官方连通性 URL ↔ 某 AI 对话站 | −0.39 | [−0.65, −0.07] | 34 |
| 某 AI 编码站 ↔ 代码托管站 | −0.38 | [−0.64, −0.05] | 34 |
28 对里只有上表 2 对「裸显著」,多重比较校正后 0 对显著 ⇒ 没有任何目标对之间存在统计上站得住的相关(连「同属一家大厂」的两个目标也只有 0.12)。
🧭 步骤五:决策依据
| 项 | 数据结论 | 决策 |
|---|---|---|
| 任意两目标无显著相关 | 一个检测 URL 代表不了另一目标 | 按目标分组的思路成立,但不能指望「一个 URL 通吃」 |
| 官方连通性检查 URL | 小、稳、无业务语义,是公认基准 | 采纳为通用基准 |
| CDN 边缘应答的 URL | 假信号,不代表业务后端 | 弃用 |
| 被针对性限速的 URL | 成功率仅三成,反映的是限速不是延迟 | 弃用 |
| 两个 AI 站 | 对节点不敏感(延迟下限本就 >1.1s) | 不单独建组,跟随通用出口组 |
| 三类下载目标 | 互不相关、无共同规律 | 统一用包缓存主机做检测 |
| 地域分组 | 组也要设检测 URL,按地域切分无法复用域名专用组的检测结果 | 删除,徒增检测负载 |
决策原则一句话:组的数量只由「有多少类目标需要各自的检测 URL」决定,不由「有多少种节点」决定。
🏗️ 最终结构与参数
flowchart TD
SEL[节点选择 选择器 默认第一项] --> G[通用出口组 url-test 全节点 按延迟取快]
SEL --> D[下载聚合组 load-balance 轮询 叠加带宽]
SEL --> DIR[DIRECT]
| 组 | 类型 | 检测 URL 指向 | 参数 | 服务对象 |
|---|---|---|---|---|
| 节点选择 | select (出口选择器) | — | 默认 = 第一项(通用出口组);备选 = 下载聚合组 / DIRECT | 所有流量的总闸 |
| 通用出口组 | url-test | 大厂主域名的 generate_204(真实目标,不是它的静态资源域名) | tolerance 200(滞后阈值:新节点快 200ms 以上才换,防抖动反复切) interval 120 / timeout 2000 | 该厂体系 / 两个 AI 站 / 一切未指定但需走代理的域名 |
| 下载聚合组 | load-balance (round-robin) | 包管理缓存主机上的小文件(几十字节,几乎零流量) | 无 tolerance(load-balance 无此参数);成员准入由检测 URL 决定 interval 120 / timeout 2000 | 包缓存 + 代码托管下载 CDN + 镜像仓库 |
配置原则(可复用):节点只在订阅 provider 定义一次,所有组一律 use: [订阅] + 关键字 filter / exclude-filter 动态匹配,不写死任何节点名;排除结构性坏节点(仅 v6、订阅到期信息行)。
📉 检测负载与流量(实测)
负载公式 = 组数 × 节点数 ÷ interval(另加 provider 级健康检查一份)。
- 本设计检查频率 ≈ 44.8 次/分(通用出口组 16 + 下载聚合组 16 + provider 级 12.8);
- 实测每次检查 ≈ 5.5 KiB(双向) —— 180s 空闲窗口实测 737.9 KiB / 134.4 次;
- ⇒ ≈ 10.1 GiB/月(月流量套餐 100GB 量级 → 约占 10%)。
对比:收敛前的 10 组结构检查频率约为本设计的 6~7 倍(每组都要按分钟级间隔全节点轮检),仅检测一项就吃掉套餐的大半 —— 这是收敛的直接动因。
⚠️ 旧版笔记曾按「每次 ≈1.7 KiB」反推,本次直接实测为 5.5 KiB/次,旧值偏小约 3 倍(反推法的样本窗口过短),以实测为准。
⚠️ 边界与 caveat
- 测量信度是天花板:单节点对某目标的延迟不稳定,相关系数被噪声衰减 → 本文的「无显著相关」只能说明现有采样精度下测不出相关,不能证明「本质不相关」。要谈相关须先加密采样(每格 ≥10 次、跨 ≥2 时段)。
- 「成功率」按阈值定义;失败多为超时/偏慢,不完全等于「被墙」。
- 用阈值截断后算分位数会压窄分布,P20−P0 偏小。
- 地域封禁在 GET 状态码上不可见:同一 URL 从境内直连 vs 海外出口对照打,状态码完全一致 ⇒ 健康检查只能测网络可达 + 延迟,测不了业务可用性。
- 统计量红线:不按值排序做相关(恒≈1.0 假相关)、不用原始差值波动率(被 σ 比值污染);必须用配对轴 = 个体 + 秩相关 + 置信区间。
tolerance只对 url-test 生效;load-balance 无此参数。- 本文只讨论节点检测与分组的方法与决策,不含订阅采购/更换。