<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Draining on Tarragon</title><link>https://tarrragon.github.io/blog/tags/draining/</link><description>Recent content in Draining on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 24 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/draining/index.xml" rel="self" type="application/rss+xml"/><item><title>Draining</title><link>https://tarrragon.github.io/blog/backend/knowledge-cards/draining/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/knowledge-cards/draining/</guid><description>&lt;p>Draining 的核心概念是「先把新的 request 停掉，再讓已經進來的工作在期限內完成或交回」。它是負載切換與停止流程中的保護動作，常出現在 rolling update、縮容、故障切換與 graceful shutdown。 可先對照 &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/dual-write/" data-link-title="Dual Write" data-link-desc="說明同一變更同時寫入兩個系統時的一致性風險">Dual Write&lt;/a>。&lt;/p>
&lt;h2 id="概念位置">概念位置&lt;/h2>
&lt;p>Draining 位在 load balancer、deployment platform、application 與 in-flight work 之間。它介於流量入口與工作完成之間，目標是避免切換瞬間把正在處理的請求硬切掉。 可先對照 &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/dual-write/" data-link-title="Dual Write" data-link-desc="說明同一變更同時寫入兩個系統時的一致性風險">Dual Write&lt;/a>。&lt;/p>
&lt;h2 id="可觀察訊號">可觀察訊號&lt;/h2>
&lt;p>系統需要 draining 的訊號是：&lt;/p>
&lt;ul>
&lt;li>instance 要下線或被替換&lt;/li>
&lt;li>長連線或背景工作不能被直接中斷&lt;/li>
&lt;li>切流時需要避免新請求進入舊實例&lt;/li>
&lt;/ul>
&lt;h2 id="接近真實網路服務的例子">接近真實網路服務的例子&lt;/h2>
&lt;p>Kubernetes rolling update 前先讓 instance 進入 draining、load balancer 在切流前停止導入新連線、worker 停止接收新 job 但完成目前處理，都是 draining 的應用。&lt;/p>
&lt;h2 id="設計責任">設計責任&lt;/h2>
&lt;p>設計時要定義何時開始 draining、draining 多久、超時後怎麼強制終止，以及如何觀察 in-flight request、consumer ack 與長連線狀態。Draining 的目的是把切換風險壓到可接受範圍，無限等待反而製造新風險。&lt;/p></description><content:encoded><![CDATA[<p>Draining 的核心概念是「先把新的 request 停掉，再讓已經進來的工作在期限內完成或交回」。它是負載切換與停止流程中的保護動作，常出現在 rolling update、縮容、故障切換與 graceful shutdown。 可先對照 <a href="/blog/backend/knowledge-cards/dual-write/" data-link-title="Dual Write" data-link-desc="說明同一變更同時寫入兩個系統時的一致性風險">Dual Write</a>。</p>
<h2 id="概念位置">概念位置</h2>
<p>Draining 位在 load balancer、deployment platform、application 與 in-flight work 之間。它介於流量入口與工作完成之間，目標是避免切換瞬間把正在處理的請求硬切掉。 可先對照 <a href="/blog/backend/knowledge-cards/dual-write/" data-link-title="Dual Write" data-link-desc="說明同一變更同時寫入兩個系統時的一致性風險">Dual Write</a>。</p>
<h2 id="可觀察訊號">可觀察訊號</h2>
<p>系統需要 draining 的訊號是：</p>
<ul>
<li>instance 要下線或被替換</li>
<li>長連線或背景工作不能被直接中斷</li>
<li>切流時需要避免新請求進入舊實例</li>
</ul>
<h2 id="接近真實網路服務的例子">接近真實網路服務的例子</h2>
<p>Kubernetes rolling update 前先讓 instance 進入 draining、load balancer 在切流前停止導入新連線、worker 停止接收新 job 但完成目前處理，都是 draining 的應用。</p>
<h2 id="設計責任">設計責任</h2>
<p>設計時要定義何時開始 draining、draining 多久、超時後怎麼強制終止，以及如何觀察 in-flight request、consumer ack 與長連線狀態。Draining 的目的是把切換風險壓到可接受範圍，無限等待反而製造新風險。</p>
]]></content:encoded></item></channel></rss>