如何测试代理 Keep-Alive,又不破坏 IP 轮换

复用连接可以让经过代理的数据任务更快、更省成本,但也可能悄悄破坏“每条连接轮换出口”的设计、长期保留一条异常链路,或让新的代理配置看似没有生效——因为客户端仍在复用旧连接。因此,真正需要回答的不是“要不要开启 Keep-Alive”,而是“哪一种业务身份可以复用哪条连接、复用多久,以及用什么证据证明行为正确”。

本指南适用于获得授权的数据采集、市场研究、广告验证、本地化检查与回归测试,可用于住宅代理、旋转代理、静态住宅代理、HTTP(S) 和 SOCKS5 工作流。

陶瓷互联网地图展示持久代理链路与新建轮换链路

先拆开四种经常被统称为“会话”的对象

测试前必须准确命名每一层:

  1. 业务任务:一次搜索、一段页面旅程或一个验证单元。
  2. 代理会话:由服务商凭据或会话标识指定的粘性出口。
  3. 传输连接:客户端到代理网关之间的 TCP 或 QUIC 连接。
  4. 目标连接:代理网关到目标站点之间的连接,通常由服务商独立管理。

应用可以发起新请求,却继续使用同一条传输连接。“旋转”网关可能按连接而不是按请求选择出口;粘性会话也可能在多次重连后继续保持。混淆这些单位,轮换测试就无法解释。

先写下身份契约

在发起请求前明确规则,例如:

  • 相互独立的无状态任务,在新建代理连接时应获得新出口;
  • 同一个合规多步骤流程必须保持国家和出口身份一致;
  • 无关用户或任务不得共享 Cookie、代理会话标签或连接池;
  • 修改代理配置后,不得继续复用旧配置创建的连接。

日志只使用脱敏标识,不保存代理密码、Cookie、授权请求头或完整个人数据。

建立 2×2 对照实验

对同一个获准目标和相同载荷运行四种模式:

模式代理会话客户端连接池验证目的
A旋转关闭建立新连接基线
B旋转开启判断复用是否固定出口
C粘性关闭判断粘性是否跨重连保持
D粘性开启测量完整旅程的最佳有效性能

地区、目标、请求头、正文验证、超时和请求数量保持一致。每种模式至少完成 30 个请求,并在多个时间窗口重复。一次短突发无法区分粘性策略与区域库存不足。

收集连接级证据

每个请求只记录必要字段:

  • 任务编号和脱敏会话标签;
  • 是否复用了连接;
  • 连接年龄和已承载请求数;
  • 预期与实际地区;
  • 脱敏出口指纹;
  • 代理认证结果;
  • 建连、TLS、首字节和总耗时;
  • 响应类别与内容验证结果;
  • 传输字节;
  • 重试是否使用同一条连接。

只有状态码、内容、语言、地区、新鲜度和完整性均符合契约,才算有效结果。HTTP 200 不能单独代表成功。

证明 Keep-Alive 是否改变轮换

同时按“请求”和“新建连接”统计不同出口。如果模式 A 能轮换,而模式 B 长时间停留在同一出口,轮换边界很可能是传输连接。这未必是缺陷,但说明连接池策略必须服从业务身份契约。

建议计算:

复用率 = 复用连接的请求数 / 完成请求数
每连接轮换率 = 不同出口数 / 新建代理连接数
有效吞吐 = 有效结果数 / 运行分钟数
单个有效结果成本 = 传输成本 / 有效结果数

最佳模式应在满足身份契约的前提下,获得更低的 p95 延迟和单个有效结果成本,而不是单纯追求更多不同 IP。

主动暴露陈旧连接

空闲连接可能比网关路由、NAT 映射、代理会话租期或中间设备超时活得更久。典型症状是空闲后的第一次复用失败,而新建连接立即成功。可依次加入 15、30、60、120 秒空闲间隔。

故障需要分层记录:

  • 尚未到达代理认证就失败;
  • 代理明确拒绝认证;
  • 空闲后第一次写入即被重置;
  • 请求到达代理后超时;
  • 目标拒绝或限流;
  • 状态正常但内容错误或不完整。

如果失败集中在空闲后的首次复用,应缩短空闲寿命或在分配重要任务前验证连接,而不是直接判定整个代理池失效。

限制连接池,而不是无限放大

分别设置活跃连接数、空闲连接数、连接最长年龄、单连接请求数和队列最长等待时间。无限连接池会消耗文件描述符,也让旧配置更难排空。

安全配置通常包括:

  • 每个目标独立连接池,而不是全局共用;
  • 每个身份或粘性会话边界独立连接池;
  • 最大空闲时间低于实测的陈旧连接拐点;
  • 设置最长连接年龄,让 DNS 与配置变更最终生效;
  • 使用有界队列,在饱和前延迟或拒绝新任务;
  • 连接级故障只在严格预算内用新连接重试。

不要在同一条异常连接上重试所有错误,也不要无上限地为每次重试新建连接,否则一次短故障会被放大成建连风暴。

用排空测试验证配置切换

更换代理端点、凭据、地区或轮换模式时,先停止向旧连接池接纳新任务,让可安全完成的在途任务结束,关闭空闲连接,再创建新的客户端或传输连接池。确认新连接确实经过预期代理链路后,再逐步增加流量。

该测试还能发现直连泄漏:强制代理失败时,任务必须安全失败,不能静默复用直连连接或回退到设备网络。

上线验收门槛

候选配置至少应满足:

  • 出口行为符合书面身份契约;
  • 无关任务之间没有 Cookie 或会话状态串用;
  • 首次请求有效率达到服务目标;
  • p95 延迟改善且错误内容没有增加;
  • 陈旧连接故障不超过错误预算;
  • 故障期间重试不会增加总输入负载;
  • 排空后代理配置能可靠切换;
  • 直连泄漏始终为零;
  • 单个有效结果成本下降或有明确收益支撑。

先用小流量灰度上线,并保留原连接池配置用于回滚。

检查清单

  • 明确定义请求、连接、代理会话和任务边界。
  • 对旋转与粘性模式分别测试连接池开与关。
  • 验证内容,不只检查状态码。
  • 按新建连接统计出口变化。
  • 加入受控空闲间隔暴露陈旧连接。
  • 分开记录连接故障与目标故障。
  • 限制空闲数、连接年龄、单连接请求数和队列年龄。
  • 代理配置变更后排空旧连接池。
  • 仅在严格预算内用新连接重试安全请求。
  • 不在日志中保存凭据和用户数据。

常见问题

Keep-Alive 一定会阻止代理轮换吗?

不一定,行为取决于服务商和协议。有的网关按连接轮换,有的依赖代理会话标签,也有其他策略。必须实测当前套餐与客户端组合。

旋转住宅代理是否应该每个请求都新建连接?

只有当请求彼此独立,且身份契约确实要求新出口时才需要。多步骤流程通常需要连续性,过度重连会增加握手、延迟和故障机会。

新出口是否证明旧出口质量差?

不能。出口变化只能证明路由发生变化。质量判断必须结合有效结果、延迟、地区准确性和成本。

陈旧连接失败后应该怎样重试?

仅重试安全且幂等的任务,使用新连接、加入抖动并设置严格预算。非幂等操作不得自动重放。

合规说明

仅在获得授权的系统和数据范围内使用代理与自动化。遵守目标条款、访问规则、速率限制、隐私义务、地区法律和数据保留要求。不得利用连接复用或 IP 轮换规避控制。

继续阅读住宅代理会话粘性测试代理重试预算指南代理直连回退泄漏测试