跳转至

SSH 连接复用测量 — 第 0 步(改造前基线)

  • 测量时间:2026-09-30
  • 对象工程:env-monitor-deploy(14 台外部主机 + 单控制面 K8s)
  • 脚本:measure_conn.py(零侵入:不修改共享库与工程源码,仅在本次进程内 monkeypatch 计数)
  • 被测量命令:工程自带的只读子命令 verify / precheck

1. 数据

子命令 get_connection TCP 握手 close 主机数 耗时(s) 退出码
verify 22 22 22 14 10.98 / 11.39(两次) 0(校验通过)
precheck 14 14 14 14 11.32 —
drift 22 22 22 14 12.61 0(无漂移)
deploy(幂等复跑) 44 44 44 14 26.5 / 27.25(两次) 0(零变更)

verify 每台分布:.16/.17/.21/.22/.23/.24/.28/.29 = 2 次;.18/.19/.20/.25/.26/.27 = 1 次。 precheck 每台分布:14 台各 1 次。 deploy 每台分布:上述 8 台各 4 次、其余 6 台各 2 次 —— 恰好是 verify 的两倍(原始数据存 raw-deploy.json)。

2. 归因(对既有认知的修正)

  1. 每次 get_connection 恰好产生 1 次 TCP 握手(22=22、14=14,两次测量均 1:1)。 现有 SSHConnectionPool.get_connection 每次 new SSHConnection() + connect(), _pool/_connections 从未被写入,调用侧 finally: conn.close() 立即关闭 —— 连接复用零生效,此为实锤。

  2. verify 的 22 = host_agent 全量 14 台 × 1 + domain_collectors 8 个领域目标 × 1; 两组重叠的 8 台因此各建 2 条连接(两个模块各探一次)。

  3. 推翻「每条远端命令 2 次 SSH 握手」:只读路径上每台 1 条命令 = 1 次握手。 真实形态是同一流程内重复探测:deploy 幂等复跑每台被探 4 次或 2 次 (host_agent 的 sync_status + validate 各一轮,domain_collectors 再各一轮), 每轮独立建连;44 = 22 × 2 正说明这一点。基线记录的「14 台 = 28 次」(= 14×2) 是只有 host_agent 时的同类重复,而非一条命令握手两次。

3. 改造收益预估

路径 现状握手数 复用后 收益
precheck 14 14 0(每台仅 1 条命令,握手无法避免)
verify 22 14 −8(约 36%)
deploy 幂等复跑 44(实测) 14 −30(约 68%)
变更收敛阶段 未测(每台 5~10 条命令,会改系统故不测) — 收益最大,按同构推算

4. 复现

cd <工程根>
.venv/bin/python <本目录>/measure_conn.py verify      # 或 precheck

5. 后续

  • 连接复用改造已于 2026-09-30 完成:deploy 幂等复跑 44 → 14 握手、 26.5 s → 17.1 s;verify 22 → 14。方案与实施记录见 ../conn-reuse-refactor-20260930/SOP.md。
  • 变更收敛阶段的握手数仍未实测(该阶段每台另有 5~10 条变更命令,复用收益预计更高, 需真实变更窗口才能测)。

来源:/home/rain/Documents/k8s_ins/conn-reuse-measure-20260930/MEASUREMENT.md | 最后更新:2026-09-30 13:39(由 build/sync.py 同步,请勿在站点侧修改)