Draining
Draining
Draining 的核心概念是「先把新的 request 停掉,再讓已經進來的工作在期限內完成或交回」。它是負載切換與停止流程中的保護動作,常出現在 rolling update、縮容、故障切換與 graceful shutdown。 可先對照 Dual Write。
概念位置
Draining 位在 load balancer、deployment platform、application 與 in-flight work 之間。它介於流量入口與工作完成之間,目標是避免切換瞬間把正在處理的請求硬切掉。 可先對照 Dual Write。
可觀察訊號
系統需要 draining 的訊號是:
- instance 要下線或被替換
- 長連線或背景工作不能被直接中斷
- 切流時需要避免新請求進入舊實例
接近真實網路服務的例子
Kubernetes rolling update 前先讓 instance 進入 draining、load balancer 在切流前停止導入新連線、worker 停止接收新 job 但完成目前處理,都是 draining 的應用。
設計責任
設計時要定義何時開始 draining、draining 多久、超時後怎麼強制終止,以及如何觀察 in-flight request、consumer ack 與長連線狀態。Draining 的目的是把切換風險壓到可接受範圍,無限等待反而製造新風險。