<?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>Production-Validation on Tarragon</title><link>https://tarrragon.github.io/blog/tags/production-validation/</link><description>Recent content in Production-Validation on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/production-validation/index.xml" rel="self" type="application/rss+xml"/><item><title>9.10 Production-Side 驗證</title><link>https://tarrragon.github.io/blog/backend/09-performance-capacity/production-validation/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/09-performance-capacity/production-validation/</guid><description>&lt;h2 id="概念定位">概念定位&lt;/h2>
&lt;p>Production-side 驗證的責任是回答「staging 過了 production 一定過嗎」。多數 staging 環境的硬體 / 流量 / 資料 / 第三方依賴都跟 production 不一樣、staging 通過不代表 production 安全。本章處理「在 production 安全驗證新配置」的工程做法。&lt;/p>
&lt;p>跟 &lt;a href="https://tarrragon.github.io/blog/backend/06-reliability/experiment-safety-boundary/" data-link-title="6.20 Experiment Safety Boundary" data-link-desc="定義 chaos、load test、DR drill 的 [blast radius](/backend/knowledge-cards/blast-radius/)、停止條件與權限約束">06.20 experiment safety boundary&lt;/a> 的關係：06.20 走「故障注入」的安全邊界（chaos）、9.10 走「正常負載」的 production 驗證（perf）。兩者方法論類似、目標完全不同。chaos test 是「主動破壞看會不會出事」、production perf validation 是「真實流量看新版本能不能跑」。&lt;/p>
&lt;p>本章四個工具（shadow traffic、dark launch、canary、production-like load test）按 &lt;em>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/blast-radius/" data-link-title="Blast Radius" data-link-desc="說明事故影響面如何估算與隔離">blast radius&lt;/a>&lt;/em> 從小到大排列、每個適合不同驗證場景。&lt;/p>
&lt;h2 id="shadow-traffic">Shadow traffic&lt;/h2>
&lt;p>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/shadow-traffic/" data-link-title="Shadow Traffic" data-link-desc="把 production traffic 複製到新版本驗證、但不返回結果給用戶的測試模式">Shadow traffic&lt;/a> 是 blast radius 最小的工具：複製 production traffic 到新版本、但 &lt;em>不把結果返回用戶&lt;/em>。&lt;/p>
&lt;p>&lt;strong>運作機制&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>用戶看到的還是舊版本回應、體驗不變&lt;/li>
&lt;li>新版本只是「並行跑、看會不會崩」&lt;/li>
&lt;li>新版本的結果可以跟舊版本對比、找出邏輯差異&lt;/li>
&lt;li>對下游的寫入要 &lt;em>特別處理&lt;/em>：要麼寫入 sandbox、要麼 dry-run（純驗證 query plan、不真寫）&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>工具實作&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>GoReplay：tcpdump-based 開源、適合 HTTP&lt;/li>
&lt;li>Service mesh shadow（Istio、Linkerd mirror）：mesh 層 mirror、零 application invasion&lt;/li>
&lt;li>AWS VPC Traffic Mirroring：底層網路層、加密 traffic 要另處理&lt;/li>
&lt;li>Diffy（已 deprecated 但概念有效）：dual-write 對比結果&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>適合場景&lt;/strong>：架構大改、想驗證 &lt;em>是否能撐 production traffic&lt;/em> 但不能影響用戶。例如「DB 從 PostgreSQL 換 Aurora、想看新 DB 在真實 query pattern 下穩不穩」。&lt;/p>
&lt;p>&lt;strong>注意事項&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>shadow traffic 也消耗 production 下游資源（DB read、API call）— 必須算進容量&lt;/li>
&lt;li>加密 / PII 資料需要處理&lt;/li>
&lt;li>shadow 通常跑 1-7 天看 long-tail、不是 30 分鐘就下結論&lt;/li>
&lt;/ul>
&lt;p>對應案例：&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/cases/tixcraft-ticketing-flash-sale-spike/" data-link-title="9.C15 拓元 Tixcraft：售票搶購的瞬間爆量架構" data-link-desc="拓元用 DynamoDB 當寫入緩衝 &amp;#43; 傳統伺服器當慢速消費者、承受 100K&amp;#43; 同時選位 &amp;#43; 30 秒從 6 台擴到 800 台">Tixcraft 10K t2.micro 壓測&lt;/a> — pre-event 壓測但走 staging；real shadow 則是 &lt;em>production-traffic-driven&lt;/em> 而非合成。&lt;/p>
&lt;h2 id="dark-launch">Dark launch&lt;/h2>
&lt;p>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/dark-launch/" data-link-title="Dark Launch" data-link-desc="新功能上線但暫不開放 UI 入口、走 production traffic 但對用戶不可見的發布模式">Dark launch&lt;/a> 介於 shadow 跟 canary 之間：程式碼上線、走 production traffic、但 &lt;em>UI 入口暫不開放&lt;/em>。&lt;/p>
&lt;p>&lt;strong>跟 shadow 的差別&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>Shadow：traffic 複製、新版本 &lt;em>不寫入真實狀態&lt;/em>&lt;/li>
&lt;li>Dark launch：&lt;em>真實寫入 production&lt;/em>、但用戶看不到 UI&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>運作機制&lt;/strong>：&lt;/p></description><content:encoded><![CDATA[<h2 id="概念定位">概念定位</h2>
<p>Production-side 驗證的責任是回答「staging 過了 production 一定過嗎」。多數 staging 環境的硬體 / 流量 / 資料 / 第三方依賴都跟 production 不一樣、staging 通過不代表 production 安全。本章處理「在 production 安全驗證新配置」的工程做法。</p>
<p>跟 <a href="/blog/backend/06-reliability/experiment-safety-boundary/" data-link-title="6.20 Experiment Safety Boundary" data-link-desc="定義 chaos、load test、DR drill 的 [blast radius](/backend/knowledge-cards/blast-radius/)、停止條件與權限約束">06.20 experiment safety boundary</a> 的關係：06.20 走「故障注入」的安全邊界（chaos）、9.10 走「正常負載」的 production 驗證（perf）。兩者方法論類似、目標完全不同。chaos test 是「主動破壞看會不會出事」、production perf validation 是「真實流量看新版本能不能跑」。</p>
<p>本章四個工具（shadow traffic、dark launch、canary、production-like load test）按 <em><a href="/blog/backend/knowledge-cards/blast-radius/" data-link-title="Blast Radius" data-link-desc="說明事故影響面如何估算與隔離">blast radius</a></em> 從小到大排列、每個適合不同驗證場景。</p>
<h2 id="shadow-traffic">Shadow traffic</h2>
<p><a href="/blog/backend/knowledge-cards/shadow-traffic/" data-link-title="Shadow Traffic" data-link-desc="把 production traffic 複製到新版本驗證、但不返回結果給用戶的測試模式">Shadow traffic</a> 是 blast radius 最小的工具：複製 production traffic 到新版本、但 <em>不把結果返回用戶</em>。</p>
<p><strong>運作機制</strong>：</p>
<ul>
<li>用戶看到的還是舊版本回應、體驗不變</li>
<li>新版本只是「並行跑、看會不會崩」</li>
<li>新版本的結果可以跟舊版本對比、找出邏輯差異</li>
<li>對下游的寫入要 <em>特別處理</em>：要麼寫入 sandbox、要麼 dry-run（純驗證 query plan、不真寫）</li>
</ul>
<p><strong>工具實作</strong>：</p>
<ul>
<li>GoReplay：tcpdump-based 開源、適合 HTTP</li>
<li>Service mesh shadow（Istio、Linkerd mirror）：mesh 層 mirror、零 application invasion</li>
<li>AWS VPC Traffic Mirroring：底層網路層、加密 traffic 要另處理</li>
<li>Diffy（已 deprecated 但概念有效）：dual-write 對比結果</li>
</ul>
<p><strong>適合場景</strong>：架構大改、想驗證 <em>是否能撐 production traffic</em> 但不能影響用戶。例如「DB 從 PostgreSQL 換 Aurora、想看新 DB 在真實 query pattern 下穩不穩」。</p>
<p><strong>注意事項</strong>：</p>
<ul>
<li>shadow traffic 也消耗 production 下游資源（DB read、API call）— 必須算進容量</li>
<li>加密 / PII 資料需要處理</li>
<li>shadow 通常跑 1-7 天看 long-tail、不是 30 分鐘就下結論</li>
</ul>
<p>對應案例：<a href="/blog/backend/09-performance-capacity/cases/tixcraft-ticketing-flash-sale-spike/" data-link-title="9.C15 拓元 Tixcraft：售票搶購的瞬間爆量架構" data-link-desc="拓元用 DynamoDB 當寫入緩衝 &#43; 傳統伺服器當慢速消費者、承受 100K&#43; 同時選位 &#43; 30 秒從 6 台擴到 800 台">Tixcraft 10K t2.micro 壓測</a> — pre-event 壓測但走 staging；real shadow 則是 <em>production-traffic-driven</em> 而非合成。</p>
<h2 id="dark-launch">Dark launch</h2>
<p><a href="/blog/backend/knowledge-cards/dark-launch/" data-link-title="Dark Launch" data-link-desc="新功能上線但暫不開放 UI 入口、走 production traffic 但對用戶不可見的發布模式">Dark launch</a> 介於 shadow 跟 canary 之間：程式碼上線、走 production traffic、但 <em>UI 入口暫不開放</em>。</p>
<p><strong>跟 shadow 的差別</strong>：</p>
<ul>
<li>Shadow：traffic 複製、新版本 <em>不寫入真實狀態</em></li>
<li>Dark launch：<em>真實寫入 production</em>、但用戶看不到 UI</li>
</ul>
<p><strong>運作機制</strong>：</p>
<ul>
<li>後端 code 部署到 production</li>
<li>用 feature flag 控制 UI 暴露</li>
<li>從內部 API、cron job、employee-only access 觸發新功能</li>
<li>真正寫入 production DB / cache / queue</li>
<li>用戶看不到 UI 入口、無感</li>
</ul>
<p><strong>Exit criteria</strong>：</p>
<ul>
<li>跑足夠時間（通常 1-2 週）</li>
<li>內部使用沒有 critical issue</li>
<li>metric 在預期範圍</li>
</ul>
<p><strong>適合場景</strong>：新功能後端風險高、想 production-validate 再開放給用戶。
<strong>不適合</strong>：純 UI 改動（沒有後端風險、直接 canary）。</p>
<p>對應案例：<a href="/blog/backend/09-performance-capacity/cases/seatgeek-virtual-waiting-room/" data-link-title="9.C16 SeatGeek：DynamoDB &#43; Lambda 打造的虛擬等候室" data-link-desc="SeatGeek 用 DynamoDB 4 張表 &#43; Lambda Bouncer 實作 flash-sale 限流排隊機制、取代第三方 waiting room 服務">SeatGeek Virtual Waiting Room</a> 從第三方換到自建、必然有 dark launch 階段驗證 token 配發機制、再正式 cutover。</p>
<h2 id="canary">Canary</h2>
<p>Canary 是 production-side 驗證最常用工具：小比例流量導到新版本、跟舊版本對比。</p>
<p><strong>運作機制</strong>：</p>
<ul>
<li>小比例（1% / 5% / 10%）流量導到新版本</li>
<li>大部分流量（99% / 95% / 90%）走舊版本</li>
<li>比較 perf / error / business metric</li>
<li>通過 → 漸進放大；不通過 → 自動 rollback</li>
</ul>
<p><strong>漸進放大策略</strong>：1% → 5% → 25% → 50% → 100%、每階段觀察足夠時間（至少 15 分鐘看 long-tail）。</p>
<p><strong>自動 rollback 條件</strong>：</p>
<ul>
<li>error rate canary 比 control 高 X%（例如 50%）</li>
<li>p99 latency canary 比 control 退化 X%（例如 10%）</li>
<li>business metric（conversion rate）canary 比 control 低 X%</li>
</ul>
<p><strong>Canary perf check 跟一般 canary 的差異</strong>：</p>
<ul>
<li>一般 canary：看 error rate 為主</li>
<li><a href="/blog/backend/knowledge-cards/canary-perf-check/" data-link-title="Canary Perf Check" data-link-desc="canary release 中針對 latency / throughput 而非 error rate 的退化檢查">Canary perf check</a>：看 latency / throughput / cost、退化通常早於 error rate</li>
</ul>
<p><strong>比較的對象是 control（同時跑的舊版本）、不是 baseline</strong>：同樣流量同樣時段才能對比、不能拿 canary 跟昨天 baseline 比（外部變數太多）。</p>
<p>對應案例：<a href="/blog/backend/09-performance-capacity/cases/aws-prime-day-extreme-scale-2025/" data-link-title="9.C1 AWS Prime Day 2025：可預期極端峰值的 dogfood" data-link-desc="Amazon 自家服務在 Prime Day 2025 的峰值數字 — 一年一次可預期峰值的容量設計參考">Prime Day pre-event 驗證</a> / <a href="/blog/backend/09-performance-capacity/cases/fanduel-dual-peak-betting-streaming/" data-link-title="9.C28 FanDuel：體育直播 &#43; 投注的雙重峰值" data-link-desc="FanDuel 3.5M MAU、Super Bowl 期間擴容 5-10 倍、用 AWS Local Zones &#43; Wavelength &#43; Outposts 處理 20&#43; 州的雙重峰值">FanDuel canary across 20 州</a> — 按 region 漸進放大、控制 blast radius。</p>
<h2 id="production-like-load-test">Production-like load test</h2>
<p>當需要驗證 <em>peak 場景</em> 但 production 平日流量達不到時、在 production 跑額外的 synthetic load。</p>
<p><strong>為什麼要在 production 跑</strong>：</p>
<ul>
<li>staging 環境的硬體 / 網路 / 第三方依賴跟 production 不同</li>
<li>staging 沒有 production 級資料量、cache hit pattern 不一樣</li>
<li>只有 production 才能驗證真實 peak</li>
</ul>
<p><strong>風險高、必須有安全邊界</strong>：</p>
<ul>
<li>blast radius 限制（用 dedicated test endpoint、限制影響範圍）</li>
<li>abort condition（什麼訊號觸發停止）</li>
<li>rollback path（rollback 流程跟時間）</li>
<li>通訊（相關 oncall 通知、避免誤判 incident）</li>
</ul>
<p><strong>通常用在</strong>：</p>
<ul>
<li>Pre-event 壓測（Black Friday、Super Bowl、IPL 決賽 前一週）</li>
<li>重大架構變更後驗證</li>
<li>容量規劃 review（每年 / 每季）</li>
</ul>
<p><strong>跟 <a href="/blog/backend/06-reliability/experiment-safety-boundary/" data-link-title="6.20 Experiment Safety Boundary" data-link-desc="定義 chaos、load test、DR drill 的 [blast radius](/backend/knowledge-cards/blast-radius/)、停止條件與權限約束">06.20 experiment safety boundary</a> 同等嚴格的安全要求</strong>：production 壓測本質是 controlled experiment、必須有 game day-level 的計畫跟人員。</p>
<p>對應案例：<a href="/blog/backend/09-performance-capacity/cases/aws-prime-day-extreme-scale-2025/" data-link-title="9.C1 AWS Prime Day 2025：可預期極端峰值的 dogfood" data-link-desc="Amazon 自家服務在 Prime Day 2025 的峰值數字 — 一年一次可預期峰值的容量設計參考">Prime Day FIS 8x chaos</a> — 把 chaos test 跟 load test 結合、production-like 驗證；<a href="/blog/backend/09-performance-capacity/cases/tixcraft-ticketing-flash-sale-spike/" data-link-title="9.C15 拓元 Tixcraft：售票搶購的瞬間爆量架構" data-link-desc="拓元用 DynamoDB 當寫入緩衝 &#43; 傳統伺服器當慢速消費者、承受 100K&#43; 同時選位 &#43; 30 秒從 6 台擴到 800 台">Tixcraft 10K t2.micro 壓測</a> — pre-event 大規模壓測模擬實際售票場景。</p>
<h2 id="ab-test-與-perf-對齊">A/B test 與 perf 對齊</h2>
<p>Product A/B test（測試新功能對 conversion 的影響）同時也是 perf A/B test。</p>
<p><strong>為什麼要對齊</strong>：</p>
<ul>
<li>新 feature 可能帶來 perf 退化（多 query、多 component、額外 logic）</li>
<li>純看 conversion lift 會誤判：「conversion 上升、所以 OK」可能掩蓋「但 p99 上升 30%」</li>
<li>A/B 同時看 conversion 跟 perf 兩個 metric</li>
</ul>
<p><strong>Guardrails</strong>：</p>
<ul>
<li>業務 metric 改善 + perf 退化 → 工程判斷是否值得（trade-off review）</li>
<li>業務 metric 沒改善 + perf 退化 → 直接 reject</li>
<li>業務 metric 改善 + perf 改善 → 直接 ship</li>
<li>業務 metric 退化 → 不論 perf 怎樣、reject</li>
</ul>
<p>對應 <a href="/blog/backend/06-reliability/experiment-safety-boundary/" data-link-title="6.20 Experiment Safety Boundary" data-link-desc="定義 chaos、load test、DR drill 的 [blast radius](/backend/knowledge-cards/blast-radius/)、停止條件與權限約束">06.20 experiment safety boundary</a> 的 experiment guardrails。</p>
<h2 id="pre-event-readiness-checkgame-day">Pre-event readiness check（game day）</h2>
<p>大事件前跑「全系統 production-like 壓測」、是 production-side 驗證的整合演練。</p>
<p>跟 <a href="/blog/backend/09-performance-capacity/peak-event-readiness/" data-link-title="9.11 高峰事件準備" data-link-desc="活動、季節性流量、推廣事件的 capacity readiness 流程">9.11 高峰事件準備</a> 直接對接 — game day 是 readiness 流程的一個 stage。</p>
<p>Shopify game day、Stripe game day 是業界範本（<a href="/blog/backend/06-reliability/cases/" data-link-title="可靠性服務案例庫" data-link-desc="按服務組織的 SRE 實踐案例庫，累積架構脈絡與工程文化">06 cases</a> 有完整案例）。</p>
<h2 id="安全邊界設計">安全邊界設計</h2>
<p>任何 production-side 驗證都要有清楚的安全邊界、不能臨機應變。</p>
<p><strong>Blast radius</strong>：</p>
<ul>
<li>影響哪些用戶（X% 流量、特定 cohort、特定 region）</li>
<li>影響哪些 service（受 perf 影響的下游）</li>
<li>影響哪些 metric（哪些 business metric 可能變化）</li>
</ul>
<p><strong>Abort condition</strong>：</p>
<ul>
<li>什麼訊號觸發停止（error rate &gt; X%、latency &gt; Y ms、特定 alert 觸發）</li>
<li>由誰觸發（自動 vs oncall 手動）</li>
<li>觸發後多久內必須完成 abort（&lt; 60 秒）</li>
</ul>
<p><strong>Rollback path</strong>：</p>
<ul>
<li>rollback 流程是什麼（feature flag、deployment rollback、traffic shift）</li>
<li>rollback 需要多久（target &lt; 5 分鐘）</li>
<li>rollback 是否需要 data 處理（已寫入的資料怎麼處理）</li>
</ul>
<p><strong>通訊</strong>：</p>
<ul>
<li>啟動驗證前 notify 哪些 channel</li>
<li>期間 oncall 待命</li>
<li>結束後 retro</li>
</ul>
<h2 id="反模式">反模式</h2>
<ul>
<li><strong>Canary 比例太大</strong>（50% 起跳）：出事影響大、blast radius 失控</li>
<li><strong>沒 control group</strong>：不知道 baseline、看絕對數字會誤判</li>
<li><strong>Canary 跑太短時間</strong>（&lt; 15 分鐘）：看不到 long-tail、看不到 user pattern shift</li>
<li><strong>沒 abort condition</strong>：人工監控失誤就出事、不可預測</li>
<li><strong>shadow traffic 寫入真實狀態</strong>：可能造成 double charge、duplicate notification</li>
<li><strong>production load test 沒 notify 相關團隊</strong>：被當成 incident、誤觸 escalation</li>
</ul>
<h2 id="案例對照">案例對照</h2>
<table>
  <thead>
      <tr>
          <th>案例</th>
          <th>教學重點</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/cases/aws-prime-day-extreme-scale-2025/" data-link-title="9.C1 AWS Prime Day 2025：可預期極端峰值的 dogfood" data-link-desc="Amazon 自家服務在 Prime Day 2025 的峰值數字 — 一年一次可預期峰值的容量設計參考">9.C1 Prime Day FIS 8x</a></td>
          <td>pre-event chaos + perf 驗證</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/cases/tixcraft-ticketing-flash-sale-spike/" data-link-title="9.C15 拓元 Tixcraft：售票搶購的瞬間爆量架構" data-link-desc="拓元用 DynamoDB 當寫入緩衝 &#43; 傳統伺服器當慢速消費者、承受 100K&#43; 同時選位 &#43; 30 秒從 6 台擴到 800 台">9.C15 Tixcraft 10K t2.micro 壓測</a></td>
          <td>pre-event 大規模壓測</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/cases/fanduel-dual-peak-betting-streaming/" data-link-title="9.C28 FanDuel：體育直播 &#43; 投注的雙重峰值" data-link-desc="FanDuel 3.5M MAU、Super Bowl 期間擴容 5-10 倍、用 AWS Local Zones &#43; Wavelength &#43; Outposts 處理 20&#43; 州的雙重峰值">9.C28 FanDuel</a></td>
          <td>跨 20 州 canary 控制 blast radius</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/cases/seatgeek-virtual-waiting-room/" data-link-title="9.C16 SeatGeek：DynamoDB &#43; Lambda 打造的虛擬等候室" data-link-desc="SeatGeek 用 DynamoDB 4 張表 &#43; Lambda Bouncer 實作 flash-sale 限流排隊機制、取代第三方 waiting room 服務">9.C16 SeatGeek</a></td>
          <td>從第三方換到自建的 dark launch</td>
      </tr>
  </tbody>
</table>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>上游：<a href="/blog/backend/09-performance-capacity/improvement-loop/" data-link-title="9.9 Performance Improvement Loop" data-link-desc="壓測 → profile → fix → re-test → release gate 的閉環">9.9 Improvement Loop</a></li>
<li>下游：<a href="/blog/backend/09-performance-capacity/peak-event-readiness/" data-link-title="9.11 高峰事件準備" data-link-desc="活動、季節性流量、推廣事件的 capacity readiness 流程">9.11 高峰事件準備</a></li>
<li>跨模組：<a href="/blog/backend/06-reliability/experiment-safety-boundary/" data-link-title="6.20 Experiment Safety Boundary" data-link-desc="定義 chaos、load test、DR drill 的 [blast radius](/backend/knowledge-cards/blast-radius/)、停止條件與權限約束">06.20 experiment safety boundary</a> / <a href="/blog/backend/06-reliability/chaos-testing/" data-link-title="6.4 chaos testing" data-link-desc="把故障注入從工具操作升級成可驗證流程：先定義穩態，再按依賴類型設計注入、控制 blast radius 與收集證據">06.4 chaos testing</a></li>
</ul>
<h2 id="既建知識卡片">既建知識卡片</h2>
<ul>
<li><a href="/blog/backend/knowledge-cards/shadow-traffic/" data-link-title="Shadow Traffic" data-link-desc="把 production traffic 複製到新版本驗證、但不返回結果給用戶的測試模式">Shadow Traffic</a></li>
<li><a href="/blog/backend/knowledge-cards/dark-launch/" data-link-title="Dark Launch" data-link-desc="新功能上線但暫不開放 UI 入口、走 production traffic 但對用戶不可見的發布模式">Dark Launch</a></li>
<li><a href="/blog/backend/knowledge-cards/canary-perf-check/" data-link-title="Canary Perf Check" data-link-desc="canary release 中針對 latency / throughput 而非 error rate 的退化檢查">Canary Perf Check</a></li>
</ul>
]]></content:encoded></item></channel></rss>