題幹與適用場景
這道系統設計題考察你能否把 TCP Keep-Alive 的低層參數變成可治理的平台能力。重點不是把探測頻率調小,而是區分 TCP 層存活探測與應用層健康檢查,設計租戶隔離、策略版本、連線生命週期、網路開銷和故障恢復。
面試官考察點
- 能否解釋閒置時間、探測間隔、最大失敗次數與誤判之間的關係。
- 能否設計安全預設值、租戶配額、分級權限和設定驗證。
- 能否保證長連線只在合適階段接收策略,避免熱更新造成連線抖動。
- 能否提供稽核、指標、灰度、回滾和過載保護。
回答前需要釐清的問題
先確認連線類型、客戶端和伺服器是否都可控,租戶是否共享節點,網路是否存在 NAT、行動網路或代理,以及業務對斷線發現的目標時間。還要確認核心是否支援所需參數、Keep-Alive 是否預設關閉、應用是否已有心跳、每個租戶的連線數和預算,以及策略變更是否需要即時生效。TCP 探測只能說明傳輸層回應,不能取代應用層語意健康檢查。
30 秒回答框架
我會建立帶版本的租戶策略服務,使用保守全域預設值和按租戶上限,驗證閒置時間、探測間隔與失敗次數的組合。連線建立時讀取策略並綁定版本,運行中只允許受控刷新,避免大量連線同時重置。策略發布經過權限、稽核、灰度和自動回滾,資料面記錄探測、斷開和誤判指標。系統還要限制總探測預算、在控制面不可用時繼續使用上一個有效版本,並把應用心跳留給業務語意。
分步組織設計
1. 定義策略模型與安全預設值
策略至少包含 idle-time、probe-interval、max-probes、適用連線類型、版本、過期時間和來源。RFC 9293 要求 Keep-Alive 可按連線開關且預設關閉;RFC 9643 建議謹慎選擇間隔,避免頻繁探測消耗資源。平台預設採用足夠長的閒置時間和保守間隔,租戶只能在資源預算內縮短。
2. 設計控制面與資料面
控制面保存租戶策略、版本和稽核記錄,提供驗證、審批、發布、灰度和回滾介面。資料面在連線建立或握手完成後讀取已簽名快照,將策略套用到可控的 socket,並上報實際生效版本。連線不應在控制面短暫不可用時全部失敗;快取最後一個有效快照並設定過期處理。
3. 驗證組合約束與配額
禁止探測間隔小於安全下限,限制每租戶並發連線和總探測率,檢查失敗次數與目標發現時間是否一致。根據節點、可用區和網路出口計算預算,防止一個租戶把探測流量集中到同一組實例。設定通過後仍要以節點即時負載做二次限流。
4. 處理版本分發與熱更新
連線綁定策略版本,新連線優先使用最新已發布版本。對存量連線採用分批刷新、自然重連或下一次閒置週期生效,避免同時修改數百萬個 socket。每次發布先灰度到少量租戶和節點,比較斷線發現時間、誤判、CPU、頻寬和連線 churn,再決定擴大範圍。
5. 建立觀測與故障分類
記錄策略版本、探測發送量、回應率、連續失敗次數、最終斷開原因、重連成功率和每租戶資源消耗。區分對端關閉、網路丟包、節點過載、策略過期和應用心跳失敗。Keep-Alive 探測無回應不能單獨證明連線已死亡,告警要結合多次探測和應用層結果。
6. 設計回滾與過載保護
保留上一個穩定版本和緊急全域策略。若灰度導致斷線率、探測流量或 CPU 超過閾值,立即停止發布並恢復舊版本;無法更新策略時繼續使用已驗證快照。控制面要有速率限制、租戶級熔斷和佇列背壓,防止策略風暴拖垮連線管理器。
高品質示範回答
我會把 Keep-Alive 策略做成帶版本的控制面服務,保存 idle-time、probe-interval、max-probes、連線類型和稽核資訊,使用預設關閉且保守的全域策略,並按租戶連線數和探測預算限制上限。連線建立時讀取簽名快照並綁定版本,控制面短暫不可用時繼續使用最後一個有效版本;存量連線只在分批刷新或自然重連時更新。發布流程包含審批、灰度、指標和自動回滾,觀測探測率、回應率、斷線原因、誤判、重連和節點負載。Keep-Alive 只負責傳輸層存活,業務正確性仍由應用心跳確認;發現探測流量或斷線率異常時立即停止擴散並恢復穩定版本。
常見錯誤
- 把 Keep-Alive 當成應用健康檢查,收到 ACK 就認為業務可用。
- 允許租戶任意縮短間隔,沒有節點、出口和全域探測預算。
- 修改策略後立即遍歷所有連線,造成同步重連和控制面風暴。
- 沒有版本、簽名、稽核和最後有效快照,控制面故障時連線全部失效。
- 只看斷線數量,不區分網路丟包、對端關閉、節點過載和策略誤判。
- 沒有灰度與回滾,直接把新策略發布到所有租戶。
追問與回答
為什麼不能把探測間隔設成幾秒?
頻繁探測會增加網路、CPU 和電池開銷,並在擁塞時放大壓力。應根據發現時間目標、連線數和資源預算計算組合參數,優先使用應用層更有意義的心跳,而不是盲目縮短 TCP 探測。
租戶要求立即生效,怎麼辦?
允許新連線立即使用已審批版本,存量連線採用受限批次和每節點速率上限。對緊急安全策略可以提高優先級,但仍要記錄審批人、範圍、預計 churn 和回滾條件。
控制面掛了,資料面如何工作?
資料面繼續使用最後一個未過期的簽名快照,並限制最長使用時間;過期後退回全域安全預設值而不是空設定。恢復後透過版本對帳補齊策略,不讓所有連線同時刷新。
如何判斷 Keep-Alive 誤判?
比較連續探測失敗、應用心跳、重連結果和網路路徑指標。單個 ACK 探測失敗不能直接判死,應達到設定的連續失敗次數,並結合業務請求或應用層確認。
如何防止一個大租戶佔滿探測預算?
實施租戶、節點、可用區和全域多級配額,按連線數和探測頻率計費或限流。超額時延長探測間隔、拒絕更激進設定或要求升級配額,並讓其他租戶保留最低服務水平。