如何測試代理 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 輪換規避控制。

繼續閱讀住宅代理工作階段黏性測試代理重試預算指南代理直連回退洩漏測試