<?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>前置知識卡片 on Tarragon</title><link>https://tarrragon.github.io/blog/tags/%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AD%98%E5%8D%A1%E7%89%87/</link><description>Recent content in 前置知識卡片 on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AD%98%E5%8D%A1%E7%89%87/index.xml" rel="self" type="application/rss+xml"/><item><title>Knowledge Cards</title><link>https://tarrragon.github.io/blog/llm/knowledge-cards/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/knowledge-cards/</guid><description>&lt;p>前置知識卡片的目標是把本地 LLM 章節會用到的高密度術語拆成可獨立閱讀的概念。模組零的心智模型文章會引用 token、自回歸、KV cache、量化、speculative decoding、MTP、MLX、推論伺服器、OpenAI 相容 API 等詞彙；這些詞彙背後都有明確的角色、訊號與設計責任。&lt;/p>
&lt;p>這個模組先建立共同語言。每張卡片只處理一個概念，並用「概念位置、可觀察訊號、接近真實的例子、設計責任」說明它在本地 LLM 生態中的角色。讀者可以從章節中遇到陌生詞時點進來補完，回到原章節仍能接續閱讀。&lt;/p>
&lt;h2 id="卡片分類">卡片分類&lt;/h2>
&lt;h3 id="模型輸出機制">模型輸出機制&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/token/" data-link-title="Token" data-link-desc="LLM 處理文字時的最小單位：介於字元與單字之間">Token&lt;/a>&lt;/td>
 &lt;td>模型如何把文字切成可運算單位&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/autoregressive/" data-link-title="Autoregressive" data-link-desc="LLM 一次生成一個 token、把已生成內容作為下一次輸入的架構">Autoregressive&lt;/a>&lt;/td>
 &lt;td>模型如何一次生一個 token&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/tokens-per-second/" data-link-title="Tokens Per Second" data-link-desc="LLM 每秒能生成幾個 token：生字速度的標準量化指標">Tokens Per Second&lt;/a>&lt;/td>
 &lt;td>生字速度如何被量化&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT&lt;/a>&lt;/td>
 &lt;td>從送出 prompt 到第一個 token 的等待時間&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">Context Window&lt;/a>&lt;/td>
 &lt;td>模型一次能處理多少 token&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/prefill/" data-link-title="Prefill" data-link-desc="Prompt 首次處理時的計算階段：把整段輸入跑過模型、產生 KV cache">Prefill&lt;/a>&lt;/td>
 &lt;td>prompt 首次處理時的計算階段&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/kv-cache/" data-link-title="KV Cache" data-link-desc="已處理 token 的 attention 中間結果暫存：避免重算、加速後續生成">KV Cache&lt;/a>&lt;/td>
 &lt;td>已處理過的 token 如何避免重算&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="模型權重與量化">模型權重與量化&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/quantization/" data-link-title="Quantization" data-link-desc="用較少 bits 表示模型權重：壓縮記憶體佔用、加快生字速度，代價是少量品質衰減">Quantization&lt;/a>&lt;/td>
 &lt;td>模型權重如何用較少 bits 表示&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/gguf/" data-link-title="GGUF" data-link-desc="llama.cpp 生態定義的模型權重格式：把權重、tokenizer、metadata 打包成單一檔案">GGUF&lt;/a>&lt;/td>
 &lt;td>llama.cpp 系統如何打包模型權重&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/instruction-tuned/" data-link-title="Instruction-Tuned Model" data-link-desc="經過指令微調的模型：會跟著 prompt 走、回答使用者問題">Instruction-Tuned Model&lt;/a>&lt;/td>
 &lt;td>模型如何跟著 prompt 走&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/base-model/" data-link-title="Base Model" data-link-desc="未經指令微調的原始模型：擅長文字接龍、適合下游微調用途">Base Model&lt;/a>&lt;/td>
 &lt;td>未微調的原始模型適合什麼用途&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/embedding-model/" data-link-title="Embedding Model" data-link-desc="把文字轉成向量的模型：用於 codebase 索引與語意搜尋">Embedding Model&lt;/a>&lt;/td>
 &lt;td>文字如何轉成可比對的向量&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/model-card/" data-link-title="Model Card" data-link-desc="Hugging Face 等平台上模型的 metadata 文件、列出模型來源、訓練資料、能力、限制、授權">Model Card&lt;/a>&lt;/td>
 &lt;td>判讀模型來源、訓練資料、授權的 metadata&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="推論加速技巧">推論加速技巧&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/speculative-decoding/" data-link-title="Speculative Decoding" data-link-desc="用小模型猜未來 token、大模型並行驗證的加速技巧">Speculative Decoding&lt;/a>&lt;/td>
 &lt;td>怎麼一次生多個 token&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/mtp/" data-link-title="Multi-Token Prediction (MTP)" data-link-desc="Google 為 Gemma 系列釋出的 speculative decoding 工程化實作">Multi-Token Prediction&lt;/a>&lt;/td>
 &lt;td>speculative decoding 的工程化實作&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/drafter-model/" data-link-title="Drafter Model" data-link-desc="speculative decoding 中用來快速猜未來 token 的小模型">Drafter Model&lt;/a>&lt;/td>
 &lt;td>預測未來 token 的小模型&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="推論基礎建設">推論基礎建設&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/three-layer-architecture/" data-link-title="Three-Layer Architecture" data-link-desc="把本地 LLM 工具拆成介面層、推論伺服器層、模型權重層的基礎心智模型">Three-Layer Architecture&lt;/a>&lt;/td>
 &lt;td>介面 / 伺服器 / 模型三層分工心智模型&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/inference-server/" data-link-title="Inference Server" data-link-desc="載入模型權重、處理 prompt、產生 token 的常駐 process">Inference Server&lt;/a>&lt;/td>
 &lt;td>載入模型、提供 API 的常駐 process&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/openai-compatible-api/" data-link-title="OpenAI 相容 API" data-link-desc="本地推論伺服器跟雲端 OpenAI 共用的 API 形狀標準">OpenAI 相容 API&lt;/a>&lt;/td>
 &lt;td>介面層跟伺服器層之間的標準介面&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/model-tag/" data-link-title="Model Tag" data-link-desc="Ollama 等推論伺服器用來定位特定模型版本的命名規則">Model Tag&lt;/a>&lt;/td>
 &lt;td>推論伺服器如何指名某個模型版本&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX&lt;/a>&lt;/td>
 &lt;td>Apple Silicon 的數值運算 framework&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/omlx/" data-link-title="oMLX" data-link-desc="以 MLX 為基礎、針對 Apple Silicon 長 context 與 SSD KV cache 優化的本地推論伺服器路線">oMLX&lt;/a>&lt;/td>
 &lt;td>MLX-backed 長 context 推論伺服器路線&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/local-vs-cloud/" data-link-title="Local vs Cloud LLM" data-link-desc="用隱私、成本、延遲、能力與維運責任判斷任務該跑本地模型還是雲端模型">Local vs Cloud LLM&lt;/a>&lt;/td>
 &lt;td>本地與雲端模型的任務分工取捨&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="macos-與-shell-基礎">macOS 與 shell 基礎&lt;/h3>
&lt;p>讓對 Mac 操作不熟的讀者也能跟上本地 LLM 章節。這組卡片不算 LLM 領域知識、但本地 LLM 章節必然會碰到。&lt;/p></description><content:encoded><![CDATA[<p>前置知識卡片的目標是把本地 LLM 章節會用到的高密度術語拆成可獨立閱讀的概念。模組零的心智模型文章會引用 token、自回歸、KV cache、量化、speculative decoding、MTP、MLX、推論伺服器、OpenAI 相容 API 等詞彙；這些詞彙背後都有明確的角色、訊號與設計責任。</p>
<p>這個模組先建立共同語言。每張卡片只處理一個概念，並用「概念位置、可觀察訊號、接近真實的例子、設計責任」說明它在本地 LLM 生態中的角色。讀者可以從章節中遇到陌生詞時點進來補完，回到原章節仍能接續閱讀。</p>
<h2 id="卡片分類">卡片分類</h2>
<h3 id="模型輸出機制">模型輸出機制</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/token/" data-link-title="Token" data-link-desc="LLM 處理文字時的最小單位：介於字元與單字之間">Token</a></td>
          <td>模型如何把文字切成可運算單位</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/autoregressive/" data-link-title="Autoregressive" data-link-desc="LLM 一次生成一個 token、把已生成內容作為下一次輸入的架構">Autoregressive</a></td>
          <td>模型如何一次生一個 token</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/tokens-per-second/" data-link-title="Tokens Per Second" data-link-desc="LLM 每秒能生成幾個 token：生字速度的標準量化指標">Tokens Per Second</a></td>
          <td>生字速度如何被量化</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT</a></td>
          <td>從送出 prompt 到第一個 token 的等待時間</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">Context Window</a></td>
          <td>模型一次能處理多少 token</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/prefill/" data-link-title="Prefill" data-link-desc="Prompt 首次處理時的計算階段：把整段輸入跑過模型、產生 KV cache">Prefill</a></td>
          <td>prompt 首次處理時的計算階段</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/kv-cache/" data-link-title="KV Cache" data-link-desc="已處理 token 的 attention 中間結果暫存：避免重算、加速後續生成">KV Cache</a></td>
          <td>已處理過的 token 如何避免重算</td>
      </tr>
  </tbody>
</table>
<h3 id="模型權重與量化">模型權重與量化</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/quantization/" data-link-title="Quantization" data-link-desc="用較少 bits 表示模型權重：壓縮記憶體佔用、加快生字速度，代價是少量品質衰減">Quantization</a></td>
          <td>模型權重如何用較少 bits 表示</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/gguf/" data-link-title="GGUF" data-link-desc="llama.cpp 生態定義的模型權重格式：把權重、tokenizer、metadata 打包成單一檔案">GGUF</a></td>
          <td>llama.cpp 系統如何打包模型權重</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/instruction-tuned/" data-link-title="Instruction-Tuned Model" data-link-desc="經過指令微調的模型：會跟著 prompt 走、回答使用者問題">Instruction-Tuned Model</a></td>
          <td>模型如何跟著 prompt 走</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/base-model/" data-link-title="Base Model" data-link-desc="未經指令微調的原始模型：擅長文字接龍、適合下游微調用途">Base Model</a></td>
          <td>未微調的原始模型適合什麼用途</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/embedding-model/" data-link-title="Embedding Model" data-link-desc="把文字轉成向量的模型：用於 codebase 索引與語意搜尋">Embedding Model</a></td>
          <td>文字如何轉成可比對的向量</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/model-card/" data-link-title="Model Card" data-link-desc="Hugging Face 等平台上模型的 metadata 文件、列出模型來源、訓練資料、能力、限制、授權">Model Card</a></td>
          <td>判讀模型來源、訓練資料、授權的 metadata</td>
      </tr>
  </tbody>
</table>
<h3 id="推論加速技巧">推論加速技巧</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/speculative-decoding/" data-link-title="Speculative Decoding" data-link-desc="用小模型猜未來 token、大模型並行驗證的加速技巧">Speculative Decoding</a></td>
          <td>怎麼一次生多個 token</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/mtp/" data-link-title="Multi-Token Prediction (MTP)" data-link-desc="Google 為 Gemma 系列釋出的 speculative decoding 工程化實作">Multi-Token Prediction</a></td>
          <td>speculative decoding 的工程化實作</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/drafter-model/" data-link-title="Drafter Model" data-link-desc="speculative decoding 中用來快速猜未來 token 的小模型">Drafter Model</a></td>
          <td>預測未來 token 的小模型</td>
      </tr>
  </tbody>
</table>
<h3 id="推論基礎建設">推論基礎建設</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/three-layer-architecture/" data-link-title="Three-Layer Architecture" data-link-desc="把本地 LLM 工具拆成介面層、推論伺服器層、模型權重層的基礎心智模型">Three-Layer Architecture</a></td>
          <td>介面 / 伺服器 / 模型三層分工心智模型</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/inference-server/" data-link-title="Inference Server" data-link-desc="載入模型權重、處理 prompt、產生 token 的常駐 process">Inference Server</a></td>
          <td>載入模型、提供 API 的常駐 process</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/openai-compatible-api/" data-link-title="OpenAI 相容 API" data-link-desc="本地推論伺服器跟雲端 OpenAI 共用的 API 形狀標準">OpenAI 相容 API</a></td>
          <td>介面層跟伺服器層之間的標準介面</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/model-tag/" data-link-title="Model Tag" data-link-desc="Ollama 等推論伺服器用來定位特定模型版本的命名規則">Model Tag</a></td>
          <td>推論伺服器如何指名某個模型版本</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/mlx/" data-link-title="MLX" data-link-desc="Apple 釋出的 Apple Silicon 數值運算 framework：類似 PyTorch / JAX 的 Mac 對應物">MLX</a></td>
          <td>Apple Silicon 的數值運算 framework</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/omlx/" data-link-title="oMLX" data-link-desc="以 MLX 為基礎、針對 Apple Silicon 長 context 與 SSD KV cache 優化的本地推論伺服器路線">oMLX</a></td>
          <td>MLX-backed 長 context 推論伺服器路線</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/local-vs-cloud/" data-link-title="Local vs Cloud LLM" data-link-desc="用隱私、成本、延遲、能力與維運責任判斷任務該跑本地模型還是雲端模型">Local vs Cloud LLM</a></td>
          <td>本地與雲端模型的任務分工取捨</td>
      </tr>
  </tbody>
</table>
<h3 id="macos-與-shell-基礎">macOS 與 shell 基礎</h3>
<p>讓對 Mac 操作不熟的讀者也能跟上本地 LLM 章節。這組卡片不算 LLM 領域知識、但本地 LLM 章節必然會碰到。</p>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/homebrew/" data-link-title="Homebrew" data-link-desc="macOS 上社群維護的套件管理器、用一行指令安裝 CLI 工具與背景服務">Homebrew</a></td>
          <td>macOS 上 CLI 工具的標準安裝入口</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/launchd-service/" data-link-title="launchd Service" data-link-desc="macOS 原生的服務管理機制、把 process 註冊成自動啟動的 daemon 或 agent">launchd Service</a></td>
          <td>讓 Ollama 等服務開機自動啟動的 macOS 機制</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/shell-background-process/" data-link-title="Shell 背景 Process" data-link-desc="終端機 process 的前景 / 背景生命週期、訊號控制、找出佔用 port 的 process">Shell 背景 Process</a></td>
          <td>前景 vs 背景、<code>&amp;</code>、<code>Ctrl+C</code>、找 process 的方法</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/port-and-localhost/" data-link-title="Port 與 Localhost" data-link-desc="TCP port 與 listen address 如何決定 API server 的對外暴露範圍">Port 與 Localhost</a></td>
          <td>server 暴露在哪個地址、誰能連進來</td>
      </tr>
  </tbody>
</table>
<h3 id="硬體與架構">硬體與架構</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/memory-bandwidth/" data-link-title="Memory Bandwidth" data-link-desc="記憶體每秒能讀寫多少 bytes：決定本地 LLM 生字速度的真正瓶頸">Memory Bandwidth</a></td>
          <td>為什麼記憶體頻寬決定生字速度</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/unified-memory/" data-link-title="Unified Memory Architecture" data-link-desc="Apple Silicon 讓 CPU / GPU / NE 共用同一塊記憶體：跑大模型的優勢來源">Unified Memory Architecture</a></td>
          <td>Apple Silicon 怎麼讓模型用滿大記憶體</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/vram/" data-link-title="VRAM" data-link-desc="顯卡上的記憶體、跟系統 RAM 是兩塊獨立預算、決定能載入多大模型權重跟 KV cache">VRAM</a></td>
          <td>獨立 GPU 場景的顯卡記憶體、跟系統 RAM 分層</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/pcie/" data-link-title="PCIe" data-link-desc="PC 上連接 GPU 跟主機板的高速序列匯流排、影響模型載入速度跟 MoE 卸載時的推論吞吐">PCIe</a></td>
          <td>GPU 跟主機板之間的高速序列匯流排</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/nvlink/" data-link-title="NVLink" data-link-desc="NVIDIA 多 GPU 之間的高速互連介面、提供比 PCIe 更高的卡間頻寬、消費級 RTX 系列普遍不支援">NVLink</a></td>
          <td>NVIDIA 多卡互連、跟 PCIe 比的卡間頻寬優勢</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/gpu-compute-backend/" data-link-title="GPU Compute Backend" data-link-desc="GPU 加速計算的底層 API 介面（CUDA / ROCm / Vulkan / Metal / SYCL）、決定推論軟體能否用 GPU 跑得快">GPU Compute Backend</a></td>
          <td>CUDA / ROCm / Vulkan / Metal / SYCL 對照</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/transformer/" data-link-title="Transformer" data-link-desc="寫 code 用的 LLM 神經網路架構：基於 attention 機制、自回歸生成 token">Transformer</a></td>
          <td>寫 code 用的 LLM 是哪種神經網路</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/attention/" data-link-title="Attention" data-link-desc="Transformer 內部讓每個 token 對其他 token 加權平均的核心機制、形成 KV cache 跟 context window 的計算基礎">Attention</a></td>
          <td>Transformer 內部讓 token 互相加權平均的機制</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/self-attention/" data-link-title="Self-Attention" data-link-desc="Q / K / V 都從同一個 sequence 投影出來的 attention、Transformer 的標誌性設計">Self-Attention</a></td>
          <td>Q/K/V 都來自同一序列的 attention、LLM 標誌</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/multi-head-attention/" data-link-title="Multi-Head Attention" data-link-desc="把 attention 切成多個 head 並行計算、讓模型能同時注意多種模式">Multi-Head Attention</a></td>
          <td>把 attention 切成多個 head 並行、MHA/GQA/MLA</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/causal-mask/" data-link-title="Causal Mask" data-link-desc="在 self-attention 裡擋掉「未來位置」的遮罩、讓 LLM 自回歸生成在訓練時也成立">Causal Mask</a></td>
          <td>擋掉「未來位置」的遮罩、decoder-only 的標誌</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/rope/" data-link-title="RoPE（Rotary Position Embedding）" data-link-desc="用旋轉矩陣把位置資訊直接旋轉進 Q/K 向量、現代 LLM 主流的位置編碼方式">RoPE</a></td>
          <td>用旋轉矩陣編碼位置、Llama / Gemma / Qwen 主流</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/positional-encoding/" data-link-title="Positional Encoding" data-link-desc="把 token 位置資訊注入 Transformer 的機制，讓 attention 能分辨順序與距離">Positional Encoding</a></td>
          <td>把 token 位置資訊注入 Transformer</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/flash-attention/" data-link-title="Flash Attention" data-link-desc="Attention 計算的記憶體友善實作、減少 GPU memory 讀寫、提升長 context 推論吞吐">Flash Attention</a></td>
          <td>Attention 計算的記憶體友善實作</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/grouped-query-attention/" data-link-title="Grouped-Query Attention" data-link-desc="讓多個 query head 共用較少的 key/value head，以降低 KV cache 體積與推論記憶體壓力">Grouped-Query Attention</a></td>
          <td>多個 query head 共用較少 K/V head</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/ffn/" data-link-title="FFN（Feed-Forward Network）" data-link-desc="Transformer block 內部的兩層 linear &#43; activation、佔模型參數量的多數">FFN</a></td>
          <td>Transformer block 內部的兩層 linear、參數大頭</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/activation-function/" data-link-title="Activation Function" data-link-desc="在 linear layer 之間插入的非線性函數、讓神經網路能表達非線性關係">Activation Function</a></td>
          <td>FFN 內的非線性、讓深度網路真的「深」起來</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/layer-normalization/" data-link-title="Layer Normalization" data-link-desc="在每個 token 的 hidden state 上做正規化（減 mean、除 std）、穩定深層網路訓練">Layer Normalization</a></td>
          <td>對 hidden state 正規化、穩定深層訓練</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/residual-connection/" data-link-title="Residual Connection" data-link-desc="把 layer 的輸入直接加到輸出上的「跳接」、讓深層網路的梯度能穩定回流">Residual Connection</a></td>
          <td>layer 輸入直接加到輸出、讓 gradient 能回流深層</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/residual-stream/" data-link-title="Residual Stream" data-link-desc="Transformer block 之間持續傳遞與累積資訊的 hidden state 通道，常用於架構與 mechanistic interpretability 討論">Residual Stream</a></td>
          <td>Transformer block 間累積資訊的 hidden state 通道</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/embedding-layer/" data-link-title="Embedding Layer" data-link-desc="Transformer 第一層的查表結構、把整數 token ID 轉成可運算的向量">Embedding Layer</a></td>
          <td>Transformer 第一層、把 token ID 轉成向量</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/forward-pass/" data-link-title="Forward Pass" data-link-desc="input 經過所有 layer 的計算、得到 output 的單向流程；推論跟訓練都會跑、訓練多一個反向階段">Forward Pass</a></td>
          <td>input 流經所有 layer 的單向計算流程</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/diffusion/" data-link-title="Diffusion" data-link-desc="產圖用的生成式 AI 架構：跟寫 code 用的 Transformer 是不同路線">Diffusion</a></td>
          <td>產圖用的是哪種神經網路</td>
      </tr>
  </tbody>
</table>
<h3 id="線性代數基礎">線性代數基礎</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/tensor/" data-link-title="Tensor" data-link-desc="多維陣列、矩陣是 2D 特例、PyTorch / MLX / JAX 等 framework 的核心型別">Tensor</a></td>
          <td>多維陣列、framework 核心型別</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/vector-norm/" data-link-title="Vector Norm" data-link-desc="衡量向量大小的純量值、L1 / L2 / L∞ 各有用途、cosine similarity 的基礎">Vector Norm</a></td>
          <td>衡量向量大小、L1 / L2 / L∞ 的不同用途</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/dot-product/" data-link-title="Dot Product" data-link-desc="兩個向量對應位置相乘再加總、attention score 跟相似度判讀的基礎">Dot Product</a></td>
          <td>兩向量相乘加總、attention / similarity 基礎</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/matrix-multiplication/" data-link-title="Matrix Multiplication" data-link-desc="LLM 推論最頻繁的單一運算、forward pass 每層的核心、memory bandwidth 瓶頸的根源">Matrix Multiplication</a></td>
          <td>LLM 推論最頻繁的單一運算、memory bandwidth bound</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/floating-point/" data-link-title="Floating Point（FP32 / FP16 / BF16）" data-link-desc="fp32 / fp16 / bf16 浮點格式的位元結構與 LLM 訓練 / 推論的精度取捨">Floating Point</a></td>
          <td>FP32 / FP16 / BF16 的位元結構與精度取捨</td>
      </tr>
  </tbody>
</table>
<h3 id="llm-機率與資訊論">LLM 機率與資訊論</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/softmax/" data-link-title="Softmax" data-link-desc="把任意實數向量正規化成「總和為 1、每個分量 ∈ [0,1]」的機率分佈">Softmax</a></td>
          <td>把實數向量轉成機率分佈、attention / sampling 共用</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/logit/" data-link-title="Logit" data-link-desc="softmax 之前的原始實數分數、每個 vocab token 一個值、可正可負">Logit</a></td>
          <td>softmax 之前的原始分數、可正可負</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/entropy/" data-link-title="Entropy" data-link-desc="資訊論衡量「分佈的不確定性」的指標、cross-entropy / KL divergence 的基底">Entropy</a></td>
          <td>分佈的不確定性、cross-entropy / KL 的基底</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/cross-entropy/" data-link-title="Cross-Entropy" data-link-desc="衡量「預測機率分佈」跟「真實分佈」距離的指標、LLM 預訓練的主要 loss">Cross-Entropy</a></td>
          <td>預測分佈跟真實分佈的距離、預訓練主要 loss</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/perplexity/" data-link-title="Perplexity" data-link-desc="cross-entropy 的指數形式、直覺意義為「模型平均覺得下個 token 有多少種可能」">Perplexity</a></td>
          <td>cross-entropy 的指數形式、人類直覺較好讀</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/kl-divergence/" data-link-title="KL Divergence" data-link-desc="衡量「兩個機率分佈差距」的非對稱指標、RLHF / DPO 等 alignment 訓練的關鍵約束">KL Divergence</a></td>
          <td>兩個分佈的不對稱差距、RLHF / DPO 的 alignment 約束</td>
      </tr>
  </tbody>
</table>
<h3 id="llm-訓練流程">LLM 訓練流程</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/loss-function/" data-link-title="Loss Function" data-link-desc="把「模型預測」跟「正確答案」的差距量化成一個純量、訓練的最佳化目標">Loss Function</a></td>
          <td>訓練最佳化的目標、量化「預測 vs 真實」的差距</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/gradient/" data-link-title="Gradient" data-link-desc="loss function 對權重的偏微分向量、指出「該往哪個方向調權重才能讓 loss 下降最快」">Gradient</a></td>
          <td>該往哪個方向調權重才能降 loss</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/backpropagation/" data-link-title="Backpropagation" data-link-desc="從 output loss 反向遞推、用 chain rule 算出每個權重的 gradient 的演算法">Backpropagation</a></td>
          <td>從 output loss 反向算出每個權重 gradient 的演算法</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/gradient-explosion-vanishing/" data-link-title="Gradient Explosion / Vanishing" data-link-desc="深層網路訓練中 gradient 透過 chain rule 累乘、容易爆炸或衰減到 0 的兩種失敗模式">Gradient Explosion / Vanishing</a></td>
          <td>深層網路 chain rule 累乘的兩種失敗模式</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/learning-rate/" data-link-title="Learning Rate" data-link-desc="gradient descent 每步更新權重的幅度、訓練中最敏感的 hyperparameter">Learning Rate</a></td>
          <td>gradient descent 每步幅度、最敏感的 hyperparameter</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/sgd/" data-link-title="SGD" data-link-desc="Stochastic Gradient Descent：每次用 mini-batch 算 gradient 更新權重的基礎 optimizer">SGD</a></td>
          <td>用 mini-batch 算 gradient 更新的基礎 optimizer</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/adam-adamw/" data-link-title="Adam / AdamW" data-link-desc="對每個參數自適應 learning rate 的 optimizer、LLM 訓練主流選擇">Adam / AdamW</a></td>
          <td>對每個參數自適應 lr、LLM 訓練主流 optimizer</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/pre-training/" data-link-title="Pre-training" data-link-desc="LLM 訓練的第一階段：用 trillion-token 級網路文字做 next-token prediction、得到 base model">Pre-training</a></td>
          <td>第一階段、用 trillion-token 做 next-token prediction</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/sft/" data-link-title="SFT（Supervised Fine-Tuning）" data-link-desc="在 base model 上用「指令-回答」對資料微調、讓模型會跟著指令走">SFT</a></td>
          <td>第二階段、用「指令-回答」對 fine-tune</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/rlhf/" data-link-title="RLHF" data-link-desc="Reinforcement Learning from Human Feedback：用人類偏好訓練的 reward model 透過 RL 對齊 LLM">RLHF</a></td>
          <td>用人類偏好 + reward model + RL 對齊</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/dpo/" data-link-title="DPO（Direct Preference Optimization）" data-link-desc="RLHF 的簡化替代：跳過 reward model、直接從人類偏好資料 fine-tune LLM">DPO</a></td>
          <td>RLHF 的簡化替代、直接從偏好資料 fine-tune</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/lora/" data-link-title="LoRA" data-link-desc="Low-Rank Adaptation：凍住原模型權重、只訓兩個小矩陣的 parameter-efficient fine-tuning">LoRA</a></td>
          <td>凍住原權重、只訓兩個小矩陣的 PEFT</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/qlora/" data-link-title="QLoRA" data-link-desc="把 base model 量化到 4-bit &#43; LoRA fine-tune 的組合、消費級 GPU 也能 fine-tune 大模型">QLoRA</a></td>
          <td>LoRA + 4-bit 量化、消費級 GPU 也能 fine-tune 大模型</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/catastrophic-forgetting/" data-link-title="Catastrophic Forgetting" data-link-desc="Fine-tune 模型時、新訓練資料覆蓋掉原本學到的能力的現象、LoRA / 資料 mixing 是主要緩解">Catastrophic Forgetting</a></td>
          <td>Fine-tune 覆蓋掉原有能力的現象、LoRA + 資料 mixing 緩解</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/contrastive-learning/" data-link-title="Contrastive Learning" data-link-desc="用「相關 vs 不相關」成對 / 三元組樣本訓練 embedding 的方法、現代 embedding model 的核心訓練 paradigm">Contrastive Learning</a></td>
          <td>Embedding model 的訓練 paradigm、相關靠近 / 無關遠離</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/in-context-learning/" data-link-title="In-Context Learning" data-link-desc="模型在不更新權重的情況下，從 prompt 內範例、規則與上下文臨時對齊任務的能力">In-Context Learning</a></td>
          <td>不更新權重、從 prompt 內範例與規則臨時對齊任務</td>
      </tr>
  </tbody>
</table>
<h3 id="reasoning-models">Reasoning Models</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/chain-of-thought/" data-link-title="Chain-of-Thought（CoT）" data-link-desc="讓 LLM 先輸出推理步驟再給最終答案的 prompting / 訓練方式、reasoning model 的基礎機制">Chain-of-Thought</a></td>
          <td>讓 LLM 先推理再答的 prompting / 訓練機制</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/test-time-compute/" data-link-title="Test-Time Compute" data-link-desc="推論時動態增加計算量換取答案品質的 paradigm、reasoning model 跟 best-of-N 的共同基底">Test-Time Compute</a></td>
          <td>推論時動態增加算力換答案品質的 paradigm</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/reasoning-model/" data-link-title="Reasoning Model" data-link-desc="訓練成自然輸出長 reasoning trace 的 LLM 變體、o1 / DeepSeek-R1 / Claude thinking 為代表">Reasoning Model</a></td>
          <td>o1 / R1 / QwQ 等內建長 reasoning trace 的 LLM family</td>
      </tr>
  </tbody>
</table>
<h3 id="vision--多模態">Vision / 多模態</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/vlm/" data-link-title="VLM（Vision-Language Model）" data-link-desc="同時吃圖片 &#43; 文字輸入、產生文字輸出的 LLM 變體、coding 工作流中處理截圖 / 設計稿 / UI debug 的基底">VLM</a></td>
          <td>同時吃圖 + 文字輸入的 LLM 變體、coding 場景的 vision 基底</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/vision-encoder/" data-link-title="Vision Encoder" data-link-desc="VLM 內部負責把圖片轉成可進 Transformer 的向量序列的模組、ViT / CLIP encoder 為主流">Vision Encoder</a></td>
          <td>VLM 內部把圖轉成向量序列的模組、ViT / CLIP 為主流</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/image-token/" data-link-title="Image Token" data-link-desc="VLM 把圖片轉成「對 Transformer 而言跟 text token 同質」的向量、計入 context window 預算">Image Token</a></td>
          <td>VLM 把圖變成跟 text token 同質的向量、計入 context</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/clip/" data-link-title="CLIP" data-link-desc="OpenAI 2021 提出的 contrastive image-text pretraining、現代 VLM 的 vision encoder 大多衍生自它">CLIP</a></td>
          <td>OpenAI contrastive 預訓練、現代 vision encoder 起點</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/multimodal-fusion/" data-link-title="Multimodal Fusion" data-link-desc="VLM 把 vision encoder 跟 LLM 結合的方式：early fusion / cross-attention / native multimodal 三條路線">Multimodal Fusion</a></td>
          <td>Vision + LLM 結合方式：early / cross-attention / native</td>
      </tr>
  </tbody>
</table>
<h3 id="deployment--靜態場景">Deployment / 靜態場景</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/client-side-llm/" data-link-title="Client-Side LLM / Embedding" data-link-desc="在 browser 內直接跑 LLM 或 embedding model 的 paradigm、靜態網站做 RAG 的關鍵基底">Client-Side LLM</a></td>
          <td>在 browser 跑 LLM / embedding、WebLLM / transformers.js</td>
      </tr>
  </tbody>
</table>
<h3 id="coding-agent-工程">Coding Agent 工程</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/scaffold-vs-harness/" data-link-title="Scaffold vs Harness" data-link-desc="Coding agent 的兩個工程層次：scaffold 是建構時靜態結構、harness 是 runtime 的 tool dispatch &#43; context management &#43; safety">Scaffold vs Harness</a></td>
          <td>Coding agent 的兩個工程層次：建構時靜態 vs runtime 動態</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/context-budget/" data-link-title="Context Budget" data-link-desc="Coding agent 的 context window 拆分配額：system prompt &#43; tool schema &#43; history &#43; file content &#43; reasoning &#43; tool result 各佔多少、留多少 margin">Context Budget</a></td>
          <td>Coding agent context window 拆分配額、25% 規則</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/subagent/" data-link-title="Subagent" data-link-desc="Coding agent 中把特定責任拆給專門子 agent 的設計模式、各 subagent 有獨立 context、由 main agent 透過 handoff 調度">Subagent</a></td>
          <td>把特定責任拆給專門子 agent、各自獨立 context、用 handoff 調度</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/prompt-cache/" data-link-title="Prompt Cache" data-link-desc="重複出現的 prompt prefix 在推論伺服器或 LLM 服務端被 cache、後續 query 跳過 prefill、大幅降 cost 跟 TTFT">Prompt Cache</a></td>
          <td>重複 prefix 的 KV cache 服務端持久化、90% cost 折扣</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/agent-memory/" data-link-title="Agent Memory" data-link-desc="Agent 在 context window 之外管理長期狀態的設計、五個層次：working / short-term / long-term episodic / semantic / procedural">Agent Memory</a></td>
          <td>Working / session / episodic / semantic / procedural 四層</td>
      </tr>
  </tbody>
</table>
<h3 id="production--observability">Production / Observability</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/llm-tracing/" data-link-title="LLM Tracing" data-link-desc="把 LLM 應用的每次 LLM call / tool call / memory op 編成結構化 span、用 OpenTelemetry GenAI semantic conventions 標準化">LLM Tracing</a></td>
          <td>OpenTelemetry GenAI semconv、結構化 span 編碼 LLM 應用</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/llm-as-judge/" data-link-title="LLM-as-Judge" data-link-desc="用 LLM 評估另一個 LLM 的輸出品質、production eval 的主流方法、500-5000× 成本降但有 bias 要處理">LLM-as-Judge</a></td>
          <td>用 LLM 評另一個 LLM、production eval 主流方法</td>
      </tr>
  </tbody>
</table>
<h3 id="retrieval-進階">Retrieval 進階</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/retrieval-source/" data-link-title="Retrieval Source" data-link-desc="RAG 從哪個 corpus、index、tool 或外部系統取回內容，決定來源可信度、freshness、權限與引用責任">Retrieval Source</a></td>
          <td>RAG 從哪個 corpus / index / tool 取回內容、如何追溯來源</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/retrieval-cost/" data-link-title="Retrieval Cost" data-link-desc="RAG 檢索帶來的 latency、token、embedding、reranker、LLM call 與維護成本，用來判斷增強是否划算">Retrieval Cost</a></td>
          <td>每次 retrieve 與增強帶來的 latency / token / 維護成本</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/query-document-gap/" data-link-title="Query-Document Gap" data-link-desc="使用者 query 與文件語言在詞彙、形態、抽象層級或領域分佈上的落差，是 RAG retrieval miss 的常見原因">Query-Document Gap</a></td>
          <td>query 與 document 語言形狀落差造成 retrieval miss</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/retrieval-recall/" data-link-title="Retrieval Recall" data-link-desc="衡量 RAG 檢索是否把應該命中的文件或 chunk 放進 top-k 結果，是 component-level eval 的核心指標">Retrieval Recall</a></td>
          <td>expected chunk 是否出現在 retrieval top-k 結果中</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/reranker/" data-link-title="Reranker" data-link-desc="對 retrieval top-K 結果用 cross-encoder 重新排序的 RAG 第二階段、品質提升顯著但 latency / cost 增加">Reranker</a></td>
          <td>Cross-encoder 對 retrieval top-K 重新排序、RAG 第二階段</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/hybrid-search/" data-link-title="Hybrid Search" data-link-desc="把字面 retrieval（BM25）跟語意 retrieval（embedding）的結果用 RRF 等方法合併、補單一路線的盲點">Hybrid Search</a></td>
          <td>BM25（字面）+ embedding（語意）合併、補單一路線盲點</td>
      </tr>
  </tbody>
</table>
<h3 id="constrained--structured-output">Constrained / Structured Output</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/structured-output/" data-link-title="Structured Output" data-link-desc="讓 LLM 輸出可被 parser 穩定消費的推論階段設計：JSON mode、schema-guided decoding、grammar 約束都屬於這一層">Structured Output</a></td>
          <td>讓模型輸出固定格式、可被 parser 穩定消費</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/sampling-constraint/" data-link-title="Sampling Constraint" data-link-desc="推論時限制下一個 token 候選集合的控制手段，用來把模型生成導向合法格式或特定選項">Sampling Constraint</a></td>
          <td>推論時限制下一個 token 候選集合</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/constrained-decoding/" data-link-title="Constrained Decoding" data-link-desc="推論時用 grammar 強制 LLM 輸出符合特定格式（JSON / regex / CFG）的 sampling 機制、把不合法 token 的機率歸零">Constrained Decoding</a></td>
          <td>推論時 grammar mask 強制合法 JSON / regex / CFG、反而加速</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/grammar/" data-link-title="Grammar" data-link-desc="描述合法字串形狀的形式規則，在 structured output 中用來限制 LLM 每一步可輸出的 token">Grammar</a></td>
          <td>用形式規則描述合法輸出字串</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/bnf/" data-link-title="BNF（Backus-Naur Form）" data-link-desc="用遞迴產生式描述語法的經典記法，是 CFG、parser 與 grammar-constrained sampling 常見的基礎表示">BNF</a></td>
          <td>用產生式描述 context-free grammar 的經典記法</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/lark-grammar/" data-link-title="Lark Grammar" data-link-desc="Lark parser 使用的 EBNF-like grammar 格式，常被 structured output 工具拿來描述自訂輸出語法">Lark Grammar</a></td>
          <td>Python Lark parser 使用的 EBNF-like grammar 格式</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/dsl/" data-link-title="DSL（Domain-Specific Language）" data-link-desc="為特定業務或技術領域設計的小語言，在 LLM 應用中常作為可解析、可驗證、可執行的中介輸出">DSL</a></td>
          <td>為特定領域設計的小語言、作為 LLM 可解析的中介輸出</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/training-example-coverage/" data-link-title="Training Example Coverage" data-link-desc="訓練資料中的任務範例是否覆蓋足夠情境，決定模型在 function calling、格式輸出與邊界案例上的穩定性">Training Example Coverage</a></td>
          <td>訓練範例是否覆蓋足夠情境、決定能力穩定性</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/capability-spectrum/" data-link-title="Capability Spectrum" data-link-desc="把模型能力視為連續光譜而非支援 / 不支援二分，用覆蓋度、穩定性與失敗模式判讀真實可用性">Capability Spectrum</a></td>
          <td>把模型能力視為光譜、用覆蓋度與失敗模式判讀可用性</td>
      </tr>
  </tbody>
</table>
<h3 id="安全--合規">安全 / 合規</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/owasp-llm-top10/" data-link-title="OWASP LLM Top 10" data-link-desc="LLM 應用最常見 10 大資安風險的業界共同詞彙、跟模組六本地 dev 視角的 mapping 表">OWASP LLM Top 10</a></td>
          <td>LLM 應用最常見 10 大資安風險、跟企業合規溝通的共同詞彙</td>
      </tr>
  </tbody>
</table>
<h3 id="tokenization">Tokenization</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/bpe/" data-link-title="BPE（Byte-Pair Encoding）" data-link-desc="用「最常一起出現的字元對」合併建詞彙表的 tokenization 演算法、GPT / Llama 等主流">BPE</a></td>
          <td>用「最常字元對」合併建詞彙、GPT / Llama 主流</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/wordpiece/" data-link-title="WordPiece" data-link-desc="以 likelihood improvement 選擇子詞合併的 tokenizer 演算法，BERT 系列代表性使用">WordPiece</a></td>
          <td>以 likelihood improvement 選擇子詞合併</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/unigram-tokenizer/" data-link-title="Unigram Tokenizer" data-link-desc="以機率模型選擇子詞切分的 tokenizer 演算法，常見於 SentencePiece 的 unigram 模式">Unigram Tokenizer</a></td>
          <td>用機率模型選擇最可能的子詞切分</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/sentencepiece/" data-link-title="SentencePiece" data-link-desc="Google 開源的多語言 tokenization 框架、支援 BPE 跟 unigram 演算法、處理空白統一">SentencePiece</a></td>
          <td>Google 開源多語言 tokenization 框架</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/vocabulary-size/" data-link-title="Vocabulary Size" data-link-desc="tokenizer 詞彙表的 token 總數、影響 embedding 大小、tokenization 粒度、多語言友善度">Vocabulary Size</a></td>
          <td>詞彙表大小、影響 embedding / 多語言友善度</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/special-tokens/" data-link-title="Special Tokens" data-link-desc="在 vocab 中保留給特殊用途的 token：sequence 邊界、角色標記、padding、tool call 等">Special Tokens</a></td>
          <td>邊界 / 角色 / tool call 等特殊用途 token</td>
      </tr>
  </tbody>
</table>
<h3 id="sampling-策略">Sampling 策略</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/beam-search/" data-link-title="Beam Search" data-link-desc="同時保留 K 條候選 sequence 的 decoding 策略、機器翻譯主流、chat / coding 場景慎用">Beam Search</a></td>
          <td>保留 K 條候選的 decoding、translation 主流</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/top-p-sampling/" data-link-title="Top-K / Top-P / Min-P Sampling" data-link-desc="從機率分佈取樣前先過濾低機率 token 的三種策略、現代 LLM 推論主流">Top-K / Top-P / Min-P</a></td>
          <td>過濾低機率 token 後取樣、現代 LLM 主流</td>
      </tr>
  </tbody>
</table>
<h3 id="推論加速進階">推論加速進階</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/acceptance-rate/" data-link-title="Acceptance Rate" data-link-desc="speculative decoding 中 drafter 提出的 token 被 target model 接受的比例、決定實際加速倍率">Acceptance Rate</a></td>
          <td>speculative decoding 中 drafter 提案被接受的比例</td>
      </tr>
  </tbody>
</table>
<h3 id="評估指標--benchmark">評估指標 / Benchmark</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/swe-bench/" data-link-title="SWE-bench" data-link-desc="用真實 GitHub issue 量化 LLM coding 能力的 benchmark">SWE-bench</a></td>
          <td>coding 能力如何被量化比較</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/llm-benchmarks/" data-link-title="LLM Benchmarks（MMLU / HumanEval / SWE-bench 等）" data-link-desc="LLM 能力評估的標準 benchmark 集合：MMLU / HumanEval / MBPP / SWE-bench / MT-Bench 等的覆蓋範圍與失效情境">LLM Benchmarks</a></td>
          <td>MMLU / HumanEval / SWE-bench 等覆蓋範圍與失效情境</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/mteb-benchmark/" data-link-title="MTEB" data-link-desc="Massive Text Embedding Benchmark：8 大類 56 任務、評估 embedding model 跨任務通用能力的標準">MTEB</a></td>
          <td>Embedding model 跨任務通用能力的標準 benchmark</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/needle-in-haystack/" data-link-title="Needle in a Haystack" data-link-desc="把一個事實藏在 long context 不同位置、測試 LLM 能否抓出來的 benchmark 方法">Needle in Haystack</a></td>
          <td>把事實藏在 long context 不同位置的 retrieval 測試</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/lost-in-the-middle/" data-link-title="Lost in the Middle" data-link-desc="LLM 對 long context 中段內容的 attention / recall 顯著低於開頭與結尾的現象">Lost in the Middle</a></td>
          <td>Long context 中段內容 recall 顯著降的現象</td>
      </tr>
  </tbody>
</table>
<h3 id="應用層模式">應用層模式</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/rag/" data-link-title="RAG" data-link-desc="Retrieval-Augmented Generation：動態外掛知識給 LLM、繞開模型參數記憶的靜態限制">RAG</a></td>
          <td>怎麼給 LLM 動態外掛知識</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/query-rewriting/" data-link-title="Query Rewriting" data-link-desc="在 RAG 檢索前改寫使用者查詢，讓 query 更接近文件語言與索引分佈">Query Rewriting</a></td>
          <td>檢索前把 query 改寫成更接近文件語言</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/query-expansion/" data-link-title="Query Expansion" data-link-desc="RAG 檢索前把一個 query 擴成多個語意變體，增加 coverage，再合併 retrieval 結果">Query Expansion</a></td>
          <td>把一個 query 擴成多個語意變體再合併結果</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/query-decomposition/" data-link-title="Query Decomposition" data-link-desc="把複合 query 拆成可獨立檢索的子 query，平行取得證據後再合成答案">Query Decomposition</a></td>
          <td>把複合 query 拆成可獨立檢索的子 query</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/multi-step-retrieval/" data-link-title="Multi-Step Retrieval" data-link-desc="RAG 中多輪 retrieve → 判斷 → 再 retrieve 的控制流，用來處理 multi-hop 問題">Multi-Step Retrieval</a></td>
          <td>多輪 retrieve → 判斷 → 再 retrieve 的控制流</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/adaptive-retrieval/" data-link-title="Adaptive Retrieval" data-link-desc="RAG 控制流中先判斷是否需要檢索，只在外部知識有價值時才 retrieve">Adaptive Retrieval</a></td>
          <td>先判斷是否需要檢索、再決定 retrieve</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/context-packing/" data-link-title="Context Packing" data-link-desc="RAG retrieve 後把 chunks 去重、排序、壓縮、標來源，再塞進 prompt 的組裝決策">Context Packing</a></td>
          <td>retrieve 後把 chunks 去重、排序、壓縮、標來源再塞進 prompt</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/agent/" data-link-title="LLM Agent" data-link-desc="把控制流交給 LLM 的應用模式：自主決策、跨多步呼叫工具、人類角色從主導變監督">LLM Agent</a></td>
          <td>把控制流交給 LLM 的應用模式</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/agent-loop/" data-link-title="Agent Loop" data-link-desc="LLM agent 自我循環的工作流：LLM 規劃下一步、執行 tool、看結果、再規劃下一步、直到任務完成或停止條件觸發">Agent Loop</a></td>
          <td>plan → act → observe 的自我循環、injection 放大器</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/context-drift/" data-link-title="Context Drift" data-link-desc="Agent 長任務中累積上下文逐步偏離原始目標，導致後續行動看似合理但整體跑偏">Context Drift</a></td>
          <td>Agent 長任務中累積 context 偏離原始目標</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/goal-drift/" data-link-title="Goal Drift" data-link-desc="Agent 把子目標誤當成整體目標，提早停止或朝錯誤完成條件前進的失敗模式">Goal Drift</a></td>
          <td>Agent 把子目標誤當整體完成條件</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/tool-result-misread/" data-link-title="Tool Result Misread" data-link-desc="Agent 誤讀工具輸出，把錯誤、空結果或部分成功當成成功，導致後續步驟建立在錯誤狀態上">Tool Result Misread</a></td>
          <td>Agent 誤讀工具輸出、把錯誤當成功</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/tool-use/" data-link-title="Tool Use" data-link-desc="LLM 透過結構化呼叫外部工具（讀檔、查資料庫、發 API request）來擴展能力的設計、function calling 跟 MCP 是常見實作">Tool Use</a></td>
          <td>LLM 透過結構化呼叫外部工具擴展能力的設計</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/function-calling/" data-link-title="Function Calling" data-link-desc="模型訓練階段建立的「呼叫工具」能力：知道何時該呼叫、傳什麼參數">Function Calling</a></td>
          <td>模型訓練建立的呼叫工具能力</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/mcp/" data-link-title="MCP（Model Context Protocol）" data-link-desc="LLM application ↔ 外部 tool server 之間的標準化協議、複用 OpenAI 相容 API 的成功模式">MCP</a></td>
          <td>LLM application ↔ tool server 的標準化協議</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/agent-as-tool/" data-link-title="Agent-as-Tool" data-link-desc="把一個專責 agent 包成可被另一個 agent 呼叫的 tool，形成跨 agent 的責任邊界">Agent-as-Tool</a></td>
          <td>把專責 agent 封裝成另一個 agent 可呼叫的 tool</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/system-prompt/" data-link-title="System Prompt" data-link-desc="LLM application 中由開發者預設、不直接顯示給使用者的指令層、定義模型的角色、行為規範、輸出格式">System Prompt</a></td>
          <td>開發者預設、不直接顯示給使用者的指令層</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/chunking/" data-link-title="Chunking" data-link-desc="把長文件切成可檢索片段的設計決策：resolution vs context loss 的本質取捨">Chunking</a></td>
          <td>把長文件切成 retrieval 片段的 resolution vs context loss 取捨</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/vector-database/" data-link-title="Vector Database" data-link-desc="為高維向量 (embedding) 設計的儲存 &#43; 近似最近鄰 (ANN) 檢索系統：RAG 從 prototype 跨到 production 的關鍵元件">Vector Database</a></td>
          <td>高維向量儲存 + ANN 檢索、RAG production 的關鍵元件</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/multi-agent-system/" data-link-title="Multi-agent system" data-link-desc="多個 LLM agent 協作的系統、跟 multi-call workflow 的差異在控制流跟責任邊界、三種拓樸 flat / hierarchical / agent-as-tool">Multi-agent system</a></td>
          <td>多 agent 協作系統、跟 multi-call 差在控制流跟責任邊界</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/hyde/" data-link-title="HyDE（Hypothetical Document Embeddings）" data-link-desc="用 LLM 生成假設文件、對假文件做 embedding 去 retrieve、繞過 query-document gap 的 RAG 增強技術">HyDE</a></td>
          <td>用假設文件 embedding 繞過 query-document gap</td>
      </tr>
  </tbody>
</table>
<h3 id="prompt-技術">Prompt 技術</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/chain-of-thought/" data-link-title="Chain-of-Thought（CoT）" data-link-desc="讓 LLM 先輸出推理步驟再給最終答案的 prompting / 訓練方式、reasoning model 的基礎機制">Chain-of-Thought</a></td>
          <td>讓 LLM 先輸出推理步驟再給最終答案</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/few-shot-prompting/" data-link-title="Few-shot prompting" data-link-desc="在 prompt 內塞 input-output 範例對齊任務、不動模型權重的 in-context learning 技術">Few-shot prompting</a></td>
          <td>在 prompt 內塞範例對齊任務、跟 fine-tune 是兩個 endpoint</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/instruction-following/" data-link-title="Instruction Following" data-link-desc="模型遵守任務範圍、格式、限制與停止條件的能力，是評估 instruction-tuned 模型能否落地的核心訊號">Instruction Following</a></td>
          <td>模型遵守任務範圍、格式與限制的能力</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/reflection/" data-link-title="Reflection / Self-critique" data-link-desc="要求模型先輸出一版、再 critique 自己、再修改的 prompting / workflow 模式、有自身失敗模式">Reflection</a></td>
          <td>模型先生成再 critique 再修改、有 systematic error 失敗模式</td>
      </tr>
  </tbody>
</table>
<h3 id="設計典範--人機協作">設計典範 / 人機協作</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/deterministic-vs-fuzzy/" data-link-title="Deterministic vs Fuzzy engineering" data-link-desc="LLM 軟體 vs 傳統軟體在資料 / 邏輯 / 行為一致性 / 實驗成本四維度的典範差異、決定哪段該包 guardrail">Deterministic vs Fuzzy engineering</a></td>
          <td>LLM 軟體 vs 傳統軟體的典範差異、決定 guardrail 設計</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/guardrail/" data-link-title="Guardrail" data-link-desc="在 LLM fuzzy 行為外層加上 schema、validator、policy、human review 與 monitoring 的控制設計">Guardrail</a></td>
          <td>在 LLM fuzzy 行為外層加上可驗證控制邊界</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/human-in-the-loop/" data-link-title="Human-in-the-loop（HITL）" data-link-desc="人類介入 LLM 工作流的設計：三種觸發時機（pre-act / mid-stream / post-hoc）、避免橡皮圖章化的四條件">Human-in-the-loop（HITL）</a></td>
          <td>人類介入 LLM 工作流的三時機 + 四條件</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/jagged-frontier/" data-link-title="Jagged frontier" data-link-desc="AI 能力分佈不規則的 framing：某些看似簡單的任務 AI 容易壞、某些看似複雜的任務 AI 反而做得好">Jagged frontier</a></td>
          <td>AI 能力分佈不規則的 framing、「全自動」是 over-trust</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/frozen-baseline/" data-link-title="Frozen baseline" data-link-desc="Eval 系統中固定特定 prompt &#43; model 當長期對照、讓行為漂移可見的標準作法">Frozen baseline</a></td>
          <td>Eval 的長期對照基準、讓行為漂移可見</td>
      </tr>
  </tbody>
</table>
<h3 id="模型行為與安全">模型行為與安全</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/hallucination/" data-link-title="Hallucination" data-link-desc="LLM 生成內容看起來合理但事實錯誤、引用不存在的來源、虛構不存在的 entity 的現象">Hallucination</a></td>
          <td>LLM 生成看似合理但事實錯誤的內容</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/prompt-injection/" data-link-title="Prompt Injection" data-link-desc="把惡意指令藏進 LLM 會讀到的內容、誘導 LLM 跑出非開發者預期行為的攻擊類別、OWASP LLM01 列入頭號威脅">Prompt Injection</a></td>
          <td>把惡意指令藏進 LLM 會讀到的內容、OWASP LLM01</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/refusal-rate/" data-link-title="Refusal Rate" data-link-desc="LLM 拒絕回答 prompt 的比例、是 production LLM 服務偵測對齊強度跟異常行為的常用訊號">Refusal Rate</a></td>
          <td>LLM 拒絕回答的比例、production 偵測訊號</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/bind-address/" data-link-title="Bind Address" data-link-desc="伺服器決定接受哪些網路介面的請求、127.0.0.1 / 0.0.0.0 / 具體 LAN IP 對應三層不同的暴露範圍">Bind Address</a></td>
          <td>推論伺服器決定接受哪些網路介面的請求</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/sandbox/" data-link-title="Sandbox" data-link-desc="把程式跑在受限制環境的隔離技術、限制檔案 / 網路 / 系統呼叫權限、是 tool use 跟 MCP server 副作用控制的基礎">Sandbox</a></td>
          <td>把 tool 跟 MCP server 跑在權限受限環境的隔離技術</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/model-supply-chain-trust/" data-link-title="Model Supply-Chain Trust" data-link-desc="判斷模型權重、量化版本、registry 與本機檔案是否可信的供應鏈信任框架">Model Supply-Chain Trust</a></td>
          <td>模型權重、量化版本與 registry 的信任判讀</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/tool-use-permission-model/" data-link-title="Tool-Use Permission Model" data-link-desc="把 LLM tool use 的讀取、寫入、外部副作用與審查節點分級管理的權限模型">Tool-Use Permission Model</a></td>
          <td>按工具副作用範圍設計權限與審查節點</td>
      </tr>
  </tbody>
</table>
<h3 id="production-推論">Production 推論</h3>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/batching/" data-link-title="Batching" data-link-desc="多 request 一起跑、攤平 model load 成本：production LLM inference 的核心優化、決定 throughput vs latency 取捨">Batching</a></td>
          <td>多 request 一起跑、攤平 memory bandwidth 成本、throughput vs latency 取捨</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/prefix-cache/" data-link-title="Prefix Cache" data-link-desc="把多個請求共用的前綴 prompt 的 KV cache 重用、省下重複 prefill 算力的優化、production 多用戶服務的常見設計">Prefix Cache</a></td>
          <td>多個請求共用前綴的 KV cache 重用優化</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/moe/" data-link-title="Mixture of Experts (MoE)" data-link-desc="把 transformer 的 FFN 層拆成多個專家、每 token 只啟用少數、總參數大但每 token 計算量小的架構">MoE</a></td>
          <td>Mixture of Experts 架構、總參數大但每 token 計算量小</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/active-parameter/" data-link-title="Active Parameter" data-link-desc="MoE 模型每生成一個 token 實際參與計算的參數量、跟模型總參數量不同、影響推論速度上限">Active Parameter</a></td>
          <td>MoE 每 token 實際參與計算的參數量</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/moe-cpu-offload/" data-link-title="MoE CPU 卸載" data-link-desc="把 Mixture-of-Experts 模型不活躍的專家層權重放在系統 RAM、用到再走 PCIe 拉回 GPU、讓有限 VRAM 跑得了更大模型">MoE CPU 卸載</a></td>
          <td>把 MoE 不活躍專家放系統 RAM、讓有限 VRAM 跑大模型</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/knowledge-cards/llama-cpp-tensor-split/" data-link-title="llama.cpp Tensor Split" data-link-desc="llama.cpp 多 GPU 場景中把模型張量按比例切到多張卡上的權重分配機制">llama.cpp Tensor Split</a></td>
          <td>多 GPU 場景把模型張量按比例切到多張卡上</td>
      </tr>
  </tbody>
</table>
<h2 id="卡片寫法">卡片寫法</h2>
<p>每張卡片維持四段：</p>
<ol>
<li><strong>核心概念</strong>：用一句話說明這個術語承擔什麼責任。</li>
<li><strong>概念位置</strong>：說明它在本地 LLM 三層架構（介面 / 伺服器 / 模型）的哪一層、跟其他概念的關係。</li>
<li><strong>可觀察訊號與例子</strong>：用真實使用情境說明這個概念何時會出現、會以什麼形式被讀者察覺。</li>
<li><strong>設計責任</strong>：使用者或工程師遇到這個概念時要做哪些判斷或設定。</li>
</ol>
<p>卡片之間互相連結，章節文章使用術語時優先連到卡片。卡片是概念索引，章節文章負責情境推導；兩者分工讓讀者可以快速查詢術語，也能完整跟著章節思考。</p>
<h2 id="卡片與章節的關係">卡片與章節的關係</h2>
<p>模組零的概念文章（<a href="/blog/llm/00-foundations/local-vs-cloud/" data-link-title="0.0 本地 vs 雲端 LLM" data-link-desc="從隱私、成本、速度、能力四個維度建立本地與雲端 LLM 的基本對照">本地 vs 雲端</a>、<a href="/blog/llm/00-foundations/why-llm-feels-slow/" data-link-title="0.1 為什麼 LLM 生字慢" data-link-desc="自回歸架構與記憶體頻寬瓶頸：為何即使 Mac 算力很強，本地 LLM 仍一個字一個字吐">為什麼 LLM 生字慢</a>、<a href="/blog/llm/00-foundations/three-layer-architecture/" data-link-title="0.2 介面 / 伺服器 / 模型三層架構" data-link-desc="把任何本地 LLM 工具放回正確的層級，用三層心智模型看懂工具關係">三層架構</a> 等）會引用大量卡片術語；模組一的實作文章（<a href="/blog/llm/01-local-llm-services/ollama/" data-link-title="1.0 Ollama：主流推論伺服器" data-link-desc="一行 brew 裝完、ollama run 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on localhost:11434">Ollama 安裝</a>、<a href="/blog/llm/01-local-llm-services/model-selection-priority/" data-link-title="1.4 寫 code 場景的模型選型優先順序" data-link-desc="Gemma 4 31B MTP → Qwen3-Coder 30B → Qwen3 14B → gpt-oss 20B 的取捨與適用情境">模型選型</a> 等）也會用到同一批詞彙。卡片讓兩個模組共用詞彙、避免各自重新定義。</p>
]]></content:encoded></item><item><title>Knowledge Cards</title><link>https://tarrragon.github.io/blog/backend/knowledge-cards/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/knowledge-cards/</guid><description>&lt;p>前置知識卡片的核心目標是把後端服務中的高密度術語拆成可獨立閱讀的 domain knowhow。服務選型文章會使用 broker、consumer lag、dead-letter、replay、降級、停機、readiness 等詞彙；這些詞彙背後都包含產品後果、操作責任與排障方式。&lt;/p>
&lt;p>這個模組先建立共同語言。每張卡片只處理一個知識節點，並用「概念位置、可觀察訊號、接近真實網路服務的例子、設計責任」說明它在後端系統中的角色。&lt;/p>
&lt;h2 id="術語建卡判準">術語建卡判準&lt;/h2>
&lt;p>知識卡片的建卡判準是術語是否承擔理解成本與判斷成本，核心重點在它如何影響服務理解，而非只看它是否已經在多篇文章重複出現。讀者如果缺少某個名詞的服務語意，就會難以理解服務路徑、風險邊界、artifact 欄位或下一步決策，這個名詞就值得建卡。&lt;/p>
&lt;p>適合建卡的術語通常有三個特徵：第一，它超過單純字面翻譯，並包含服務責任、操作條件或失敗代價；第二，讀者若缺少它就難以理解服務路徑、風險邊界或下一步決策，例如 validation query、rollback window、fallback read；第三，它可以被獨立說明成「概念位置、可觀察訊號、例子、設計責任」。出現頻率與是否影響實作判斷都可以當補充訊號，但不參與「是否要建卡」的必要判準。&lt;/p>
&lt;p>不適合建卡的是過度寬泛、沒有明確服務責任的詞。若名詞只是文章中的普通形容詞、單一欄位值、或只能在該句子內成立，優先在正文補清楚，不硬拆成卡片。&lt;/p>
&lt;h2 id="資料與一致性">資料與一致性&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/database/" data-link-title="Database" data-link-desc="說明 database 在後端系統中如何承擔正式狀態、查詢與一致性責任">Database&lt;/a>&lt;/td>
 &lt;td>正式狀態如何保存、查詢與保護&lt;/td>
 &lt;td>source of truth、transaction、backup&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/source-of-truth/" data-link-title="Source of Truth" data-link-desc="說明正式資料來源如何決定資料判斷、修復與一致性責任">Source of Truth&lt;/a>&lt;/td>
 &lt;td>哪個位置承擔正式資料判斷&lt;/td>
 &lt;td>database、cache、search index&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/search-index/" data-link-title="Search Index" data-link-desc="說明搜尋索引如何承擔全文檢索、排序與查詢體驗">Search Index&lt;/a>&lt;/td>
 &lt;td>搜尋體驗如何有獨立讀取模型&lt;/td>
 &lt;td>full-text、filter、ranking&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/full-text-search/" data-link-title="Full-Text Search" data-link-desc="說明全文檢索如何處理關鍵字匹配、語言分析與排序">Full-Text Search&lt;/a>&lt;/td>
 &lt;td>文本檢索如何支援關鍵字與相關性排序&lt;/td>
 &lt;td>search、documents、catalog&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/facet-query/" data-link-title="Facet Query" data-link-desc="說明分面查詢如何提供分類統計與篩選體驗">Facet Query&lt;/a>&lt;/td>
 &lt;td>搜尋結果如何提供可篩選聚合維度&lt;/td>
 &lt;td>filter、aggregation、UX&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/object-storage/" data-link-title="Object Storage" data-link-desc="說明大型非結構化檔案的保存、存取與生命週期管理">Object Storage&lt;/a>&lt;/td>
 &lt;td>大型檔案如何保存與控管生命週期&lt;/td>
 &lt;td>upload、export、backup&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/event-log/" data-link-title="Event Log" data-link-desc="說明事件歷史如何保存、重播與支援跨服務資料重建">Event Log&lt;/a>&lt;/td>
 &lt;td>歷史事件如何保存與重播&lt;/td>
 &lt;td>replay、audit、projection&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/read-model/" data-link-title="Read Model" data-link-desc="說明為查詢場景建立的讀取模型，與正式狀態的責任分離">Read Model&lt;/a>&lt;/td>
 &lt;td>查詢需求如何有獨立讀取資料形狀&lt;/td>
 &lt;td>projection、query model&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/projection/" data-link-title="Projection" data-link-desc="說明從事件流或資料變更推算出查詢用讀取視圖的轉換機制">Projection&lt;/a>&lt;/td>
 &lt;td>來源資料如何轉換成查詢視圖&lt;/td>
 &lt;td>events、materialized view&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-lifecycle/" data-link-title="Data Lifecycle" data-link-desc="說明資料從建立、使用、保留到刪除的責任邊界">資料生命週期&lt;/a>&lt;/td>
 &lt;td>資料如何建立、保留、封存與刪除&lt;/td>
 &lt;td>retention、audit、export&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-inconsistency/" data-link-title="Data Inconsistency" data-link-desc="說明多份資料暫時不同步時如何判斷產品後果與修復責任">資料不一致&lt;/a>&lt;/td>
 &lt;td>多份資料暫時不同步時如何辨識與修復&lt;/td>
 &lt;td>cache、replica、eventual consistency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/transaction/" data-link-title="Transaction" data-link-desc="說明 transaction 如何讓一組資料變更一起成功或一起回復">Transaction&lt;/a>&lt;/td>
 &lt;td>一組資料變更如何一起成功或一起回復&lt;/td>
 &lt;td>database、commit、rollback&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/transaction-boundary/" data-link-title="Transaction Boundary" data-link-desc="說明哪些資料變更應在同一個交易中一起成功或一起回復">Transaction Boundary&lt;/a>&lt;/td>
 &lt;td>哪些變更要一起成功或回復&lt;/td>
 &lt;td>database、unit of work&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/migration/" data-link-title="Migration" data-link-desc="說明系統如何把資料、流量或結構從舊狀態移到新狀態">Migration&lt;/a>&lt;/td>
 &lt;td>系統如何從舊狀態受控移到新狀態&lt;/td>
 &lt;td>release、cutover、backfill&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/schema-migration/" data-link-title="Schema Migration" data-link-desc="說明資料庫結構如何隨應用程式版本安全演進">Schema Migration&lt;/a>&lt;/td>
 &lt;td>資料庫結構如何隨版本安全演進&lt;/td>
 &lt;td>release、rollback、migration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/expand-contract/" data-link-title="Expand / Contract" data-link-desc="說明先擴充相容面、再收斂舊路徑的遷移做法">Expand / Contract&lt;/a>&lt;/td>
 &lt;td>先擴充相容面再收斂舊路徑的遷移做法&lt;/td>
 &lt;td>schema migration、online migration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/migration-gate/" data-link-title="Migration Gate" data-link-desc="說明遷移流程何時可以進入下一階段或正式切換">Migration Gate&lt;/a>&lt;/td>
 &lt;td>遷移流程如何決定能否進入下一階段&lt;/td>
 &lt;td>backfill、correctness check&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/mapping-table/" data-link-title="Mapping Table" data-link-desc="說明遷移或轉換期間如何把舊語意明確對應到新語意">Mapping Table&lt;/a>&lt;/td>
 &lt;td>舊資料語意如何明確對應到新語意&lt;/td>
 &lt;td>migration、backfill、validation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/validation-query/" data-link-title="Validation Query" data-link-desc="說明遷移、回填與修復期間如何用查詢證明資料語意是否一致">Validation Query&lt;/a>&lt;/td>
 &lt;td>查詢如何證明資料語意是否一致&lt;/td>
 &lt;td>migration、evidence package&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/read-compatibility/" data-link-title="Read Compatibility" data-link-desc="說明資料或服務演進期間讀取路徑如何同時支援新舊語意">Read Compatibility&lt;/a>&lt;/td>
 &lt;td>讀取路徑如何同時支援新舊語意&lt;/td>
 &lt;td>expand、cutover、fallback read&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/fallback-read/" data-link-title="Fallback Read" data-link-desc="說明讀取路徑切換失敗時如何暫時回到舊資料語意或舊讀取來源">Fallback Read&lt;/a>&lt;/td>
 &lt;td>切換失敗時如何暫時回到舊讀取語意&lt;/td>
 &lt;td>cutover、rollback window&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cutover-window/" data-link-title="Cutover Window" data-link-desc="說明正式切換發生的觀察窗口、停止條件與回退判讀範圍">Cutover Window&lt;/a>&lt;/td>
 &lt;td>正式切換如何被時間窗與訊號框住&lt;/td>
 &lt;td>cutover、release gate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/release-gate/" data-link-title="Release Gate" data-link-desc="說明變更在正式釋出前如何通過或阻擋">Release Gate&lt;/a>&lt;/td>
 &lt;td>變更如何在正式釋出前通過或阻擋&lt;/td>
 &lt;td>error budget、migration、review&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/gate-decision/" data-link-title="Gate Decision" data-link-desc="說明 release gate 如何把證據轉成放行、暫停、回退或補證據的決策">Gate Decision&lt;/a>&lt;/td>
 &lt;td>gate 如何把證據轉成下一步決策&lt;/td>
 &lt;td>release gate、rollout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rollback-rehearsal/" data-link-title="Rollback Rehearsal" data-link-desc="說明如何在正式事故前演練回滾流程">Rollback Rehearsal&lt;/a>&lt;/td>
 &lt;td>回滾流程如何在正式事故前演練&lt;/td>
 &lt;td>rollback strategy、migration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rollback-window/" data-link-title="Rollback Window" data-link-desc="說明變更進入 production 後還能用哪種方式回退或改路線的時間與條件">Rollback Window&lt;/a>&lt;/td>
 &lt;td>變更後還能用哪種方式回退或改路線&lt;/td>
 &lt;td>cutover、rollback strategy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rollback-condition/" data-link-title="Rollback Condition" data-link-desc="說明決策執行後出現哪些訊號時要撤回、回退或改路線">Rollback Condition&lt;/a>&lt;/td>
 &lt;td>決策後何時要撤回、回退或改路線&lt;/td>
 &lt;td>incident decision、rollback&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/fail-forward/" data-link-title="Fail-forward" data-link-desc="說明無法回到舊狀態時如何用受控前進完成修復">Fail-forward&lt;/a>&lt;/td>
 &lt;td>舊狀態已失效時如何受控前進修復&lt;/td>
 &lt;td>rollback window、incident decision&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/stop-condition/" data-link-title="Stop Condition" data-link-desc="說明變更、實驗或事故處理何時必須暫停、回退或改路線">Stop Condition&lt;/a>&lt;/td>
 &lt;td>何時必須暫停、回退或改路線&lt;/td>
 &lt;td>release gate、incident decision&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/isolation-level/" data-link-title="Isolation Level" data-link-desc="說明資料庫交易隔離級別如何影響並發讀寫結果">Isolation Level&lt;/a>&lt;/td>
 &lt;td>並發交易彼此看見哪些資料&lt;/td>
 &lt;td>transaction、lock、retry&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/connection-pool/" data-link-title="Connection Pool" data-link-desc="說明連線池如何限制下游資源並影響服務容量">Connection Pool&lt;/a>&lt;/td>
 &lt;td>application 如何限制下游連線壓力&lt;/td>
 &lt;td>database、Redis、broker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/database-sharding/" data-link-title="Database Sharding" data-link-desc="說明資料庫如何依 shard key 分散資料、路由請求與承擔跨 shard 查詢成本">Database Sharding&lt;/a>&lt;/td>
 &lt;td>資料庫如何依 shard key 分散與路由&lt;/td>
 &lt;td>Vitess、Citus、tenant key&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/write-ahead-log/" data-link-title="Write-Ahead Log" data-link-desc="說明資料庫如何先寫入 log 再合併回主資料，以提供持久性與崩潰復原">Write-Ahead Log&lt;/a>&lt;/td>
 &lt;td>寫入如何先記 log 再合併以支援復原&lt;/td>
 &lt;td>WAL、checkpoint、recovery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/single-writer-model/" data-link-title="Single Writer Model" data-link-desc="說明單寫者模型如何序列化寫入，並成為系統的容量邊界">Single Writer Model&lt;/a>&lt;/td>
 &lt;td>寫入如何被序列化成單一路徑&lt;/td>
 &lt;td>SQLite、primary lease、容量上限&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/embedded-database/" data-link-title="Embedded Database" data-link-desc="說明嵌入式資料庫如何隨 application process 運作，並把檔案生命週期責任交回應用">Embedded Database&lt;/a>&lt;/td>
 &lt;td>資料庫如何隨 application process 運作&lt;/td>
 &lt;td>SQLite、檔案生命週期、本地儲存&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/metadata-lock/" data-link-title="Metadata Lock" data-link-desc="說明 DDL 與既有交易如何在 table metadata 層互相排隊與阻塞">Metadata Lock&lt;/a>&lt;/td>
 &lt;td>DDL 與既有交易如何在 schema 層互相阻塞&lt;/td>
 &lt;td>ALTER、長交易、DDL window&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/table-partitioning/" data-link-title="Table Partitioning" data-link-desc="說明單一資料庫內如何把大表拆成多個分區，並由查詢規劃器只掃相關片段">Table Partitioning&lt;/a>&lt;/td>
 &lt;td>大表如何在單庫內拆成多個分區&lt;/td>
 &lt;td>range/list/hash、pruning、retention&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/read-write-split/" data-link-title="Read-Write Split" data-link-desc="說明讀寫流量如何分流到 primary 與 replica，以及它引入的一致性責任">Read-Write Split&lt;/a>&lt;/td>
 &lt;td>讀寫流量如何分流到 primary 與 replica&lt;/td>
 &lt;td>proxy、replica lag、read-after-write&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/transaction-pooling/" data-link-title="Transaction Pooling" data-link-desc="說明 connection pooler 的 transaction 綁定模式如何壓縮連線並改變 session 語意">Transaction Pooling&lt;/a>&lt;/td>
 &lt;td>連線如何只綁定單一 transaction&lt;/td>
 &lt;td>pooler、session state、SET LOCAL&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/document-store/" data-link-title="Document Store" data-link-desc="說明以 JSON 文件與彈性 schema 提供資料存取的模式，以及它仍需的治理邊界">Document Store&lt;/a>&lt;/td>
 &lt;td>資料如何以 JSON 文件與彈性 schema 存取&lt;/td>
 &lt;td>JSON、巢狀結構、index&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/local-first/" data-link-title="Local-First" data-link-desc="說明本機優先的資料架構如何讓離線可用，並把同步當成獨立問題">Local-First&lt;/a>&lt;/td>
 &lt;td>資料如何本機優先並離線可用&lt;/td>
 &lt;td>離線、多端同步、行動 app&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/read-after-write/" data-link-title="Read-After-Write Consistency" data-link-desc="說明寫入後能否立即讀到該筆寫入的一致性保證">Read-After-Write Consistency&lt;/a>&lt;/td>
 &lt;td>寫入後能否立即讀到該筆寫入&lt;/td>
 &lt;td>primary、lag guard、session&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/type-affinity/" data-link-title="Type Affinity" data-link-desc="說明 SQLite 如何用 type affinity 決定欄位的型別傾向與值的儲存方式">Type Affinity&lt;/a>&lt;/td>
 &lt;td>SQLite 欄位型別如何是傾向而非硬約束&lt;/td>
 &lt;td>SQLite、storage class、STRICT&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="快取與流量">快取與流量&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/timeout/" data-link-title="Timeout" data-link-desc="說明等待外部操作的時間上限如何保護資源與使用者體驗">Timeout&lt;/a>&lt;/td>
 &lt;td>單一步驟最久可以等待多久&lt;/td>
 &lt;td>API、database、broker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/deadline/" data-link-title="Deadline" data-link-desc="說明整體操作的截止時間如何沿著服務邊界傳遞">Deadline&lt;/a>&lt;/td>
 &lt;td>整體操作何時必須完成&lt;/td>
 &lt;td>request、job、workflow&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/exponential-backoff/" data-link-title="Exponential Backoff" data-link-desc="說明重試間隔如何逐步拉長以降低下游壓力">Exponential Backoff&lt;/a>&lt;/td>
 &lt;td>重試間隔如何逐步拉長&lt;/td>
 &lt;td>retry、API、worker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/jitter/" data-link-title="Jitter" data-link-desc="說明重試或排程加入隨機偏移如何降低同步尖峰">Jitter&lt;/a>&lt;/td>
 &lt;td>如何分散同步重試與排程尖峰&lt;/td>
 &lt;td>retry、TTL、reconnect&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/retry-storm/" data-link-title="Retry Storm" data-link-desc="說明大量重試如何把局部故障放大成系統壓力">Retry Storm&lt;/a>&lt;/td>
 &lt;td>大量重試如何放大下游壓力&lt;/td>
 &lt;td>timeout、dependency failure&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/thundering-herd/" data-link-title="Thundering Herd" data-link-desc="說明大量工作同時被喚醒或同時競爭資源時的尖峰風險">Thundering Herd&lt;/a>&lt;/td>
 &lt;td>大量工作同時醒來如何形成尖峰&lt;/td>
 &lt;td>reconnect、cache、lock&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/transient-failure/" data-link-title="Transient Failure" data-link-desc="說明暫時性故障如何影響重試、告警與使用者回應">Transient Failure&lt;/a>&lt;/td>
 &lt;td>暫時性故障如何影響重試與告警&lt;/td>
 &lt;td>network、failover、timeout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/partial-failure/" data-link-title="Partial Failure" data-link-desc="說明分散式系統中部分依賴失效時如何保留整體可用性">Partial Failure&lt;/a>&lt;/td>
 &lt;td>局部失效時如何保留整體可用性&lt;/td>
 &lt;td>distributed system、fallback&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cascading-failure/" data-link-title="Cascading Failure" data-link-desc="說明局部故障如何透過等待、重試與資源耗盡擴散到整個系統">Cascading Failure&lt;/a>&lt;/td>
 &lt;td>局部故障如何擴散成整體故障&lt;/td>
 &lt;td>dependency、retry、pool&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/load-shedding/" data-link-title="Load Shedding" data-link-desc="說明服務過載時如何主動拒絕低優先工作以保護核心能力">Load Shedding&lt;/a>&lt;/td>
 &lt;td>過載時如何主動拒絕低優先工作&lt;/td>
 &lt;td>overload、priority&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/token-bucket/" data-link-title="Token Bucket" data-link-desc="說明 token bucket 如何用配額與補充速率控制流量">Token Bucket&lt;/a>&lt;/td>
 &lt;td>如何用配額與補充速率控制流量&lt;/td>
 &lt;td>rate limit、retry budget&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/dependency-isolation/" data-link-title="Dependency Isolation" data-link-desc="說明如何隔離下游依賴，避免單一依賴耗盡共享資源">Dependency Isolation&lt;/a>&lt;/td>
 &lt;td>如何避免單一下游耗盡共享資源&lt;/td>
 &lt;td>pool、queue、dependency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/bulkhead/" data-link-title="Bulkhead" data-link-desc="說明 bulkhead 如何用資源分艙限制故障擴散">Bulkhead&lt;/a>&lt;/td>
 &lt;td>如何用資源分艙限制故障擴散&lt;/td>
 &lt;td>worker、tenant、pool&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/in-process-channel/" data-link-title="In-Process Channel" data-link-desc="說明單一 process 內用來傳遞工作的 channel 或 queue abstraction">In-Process Channel&lt;/a>&lt;/td>
 &lt;td>單一 process 內如何傳遞工作或訊號&lt;/td>
 &lt;td>channel、local queue&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/local-worker/" data-link-title="Local Worker" data-link-desc="說明同一個 process 內的背景工作模型與其生命週期邊界">Local Worker&lt;/a>&lt;/td>
 &lt;td>同 process 背景工作的責任與邊界&lt;/td>
 &lt;td>background task、shutdown&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/worker-pool/" data-link-title="Worker Pool" data-link-desc="說明一組 worker 如何限制同時處理量並保護下游資源">Worker Pool&lt;/a>&lt;/td>
 &lt;td>如何限制同時處理量&lt;/td>
 &lt;td>worker、background job&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/http-client/" data-link-title="HTTP Client" data-link-desc="說明服務呼叫外部 HTTP 依賴時需要管理 timeout、連線與重試">HTTP Client&lt;/a>&lt;/td>
 &lt;td>呼叫外部 HTTP 依賴時如何管理資源&lt;/td>
 &lt;td>API、dependency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/webhook/" data-link-title="Webhook" data-link-desc="說明外部系統回呼事件的接收、驗證與處理邊界">Webhook&lt;/a>&lt;/td>
 &lt;td>外部系統回呼事件如何驗證與處理&lt;/td>
 &lt;td>callback、signature、retry&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/websocket/" data-link-title="WebSocket" data-link-desc="說明 WebSocket 如何提供長連線雙向即時通訊">WebSocket&lt;/a>&lt;/td>
 &lt;td>長連線雙向即時通訊如何運作&lt;/td>
 &lt;td>chat、presence、push&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/sse/" data-link-title="Server-Sent Events (SSE)" data-link-desc="說明 SSE 如何透過 HTTP 長連線向 client 單向推送事件">Server-Sent Events (SSE)&lt;/a>&lt;/td>
 &lt;td>HTTP 單向事件串流如何推送更新&lt;/td>
 &lt;td>notification、progress&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/stream-pipeline/" data-link-title="Stream Pipeline" data-link-desc="說明連續資料流經多個處理階段時如何管理吞吐、順序與 backpressure ">Stream Pipeline&lt;/a>&lt;/td>
 &lt;td>連續資料流如何管理吞吐與 backpressure&lt;/td>
 &lt;td>stream、CDC、ETL&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/throughput/" data-link-title="Throughput" data-link-desc="整理系統單位時間內可處理的工作量">Throughput&lt;/a>&lt;/td>
 &lt;td>單位時間內可處理多少工作&lt;/td>
 &lt;td>load test、queue、broker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/buffer/" data-link-title="Buffer" data-link-desc="說明系統如何用暫存空間吸收短暫速度差與尖峰流量">Buffer&lt;/a>&lt;/td>
 &lt;td>暫存空間如何吸收短暫速度差&lt;/td>
 &lt;td>queue、socket、cache&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/queue/" data-link-title="Queue" data-link-desc="說明 queue 如何保存等待處理的工作並形成容量邊界">Queue&lt;/a>&lt;/td>
 &lt;td>等待處理的工作如何形成容量邊界&lt;/td>
 &lt;td>producer、consumer、backlog&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/socket/" data-link-title="Socket" data-link-desc="說明 network socket 如何成為 application 與網路之間的資料傳輸邊界">Socket&lt;/a>&lt;/td>
 &lt;td>網路連線如何成為資料讀寫與資源邊界&lt;/td>
 &lt;td>network、connection、timeout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/fallback/" data-link-title="Fallback" data-link-desc="說明主要路徑失敗時使用替代結果或替代流程的設計責任">Fallback&lt;/a>&lt;/td>
 &lt;td>主要路徑失敗時使用什麼替代結果&lt;/td>
 &lt;td>degradation、circuit breaker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/fail-fast/" data-link-title="Fail Fast" data-link-desc="說明已知無法完成時快速回應如何保護資源與上游判斷">Fail Fast&lt;/a>&lt;/td>
 &lt;td>已知會失敗時如何快速回應&lt;/td>
 &lt;td>circuit breaker、validation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/retry-budget/" data-link-title="Retry Budget" data-link-desc="說明重試次數如何受整體容量與錯誤預算限制">Retry Budget&lt;/a>&lt;/td>
 &lt;td>重試量如何受整體容量限制&lt;/td>
 &lt;td>retry、SLO、token bucket&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-aside/" data-link-title="Cache Aside" data-link-desc="說明 application 如何在讀取時自行管理快取與正式資料來源">Cache Aside&lt;/a>&lt;/td>
 &lt;td>application 如何讀快取與正式來源&lt;/td>
 &lt;td>Redis、read path&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-hit-miss/" data-link-title="Cache Hit / Miss" data-link-desc="說明快取命中與未命中如何影響讀取成本與下游壓力">Cache Hit / Miss&lt;/a>&lt;/td>
 &lt;td>讀取是否命中快取&lt;/td>
 &lt;td>cache、database pressure&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-hit-rate/" data-link-title="Cache Hit Rate" data-link-desc="說明快取命中比例如何衡量加速效果與下游保護">Cache Hit Rate&lt;/a>&lt;/td>
 &lt;td>命中比例如何衡量快取效益&lt;/td>
 &lt;td>dashboard、capacity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-warmup/" data-link-title="Cache Warmup" data-link-desc="說明服務啟動或活動前如何預先建立快取資料">Cache Warmup&lt;/a>&lt;/td>
 &lt;td>正式流量前如何預先載入快取&lt;/td>
 &lt;td>deployment、event&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-prefetching/" data-link-title="Cache Prefetching" data-link-desc="說明系統如何在資料被需要前預先載入快取">Cache Prefetching&lt;/a>&lt;/td>
 &lt;td>如何在資料被需要前預先載入&lt;/td>
 &lt;td>user flow、hot data&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cold-start/" data-link-title="Cold Start" data-link-desc="說明服務或快取剛啟動時尚未累積狀態造成的延遲與壓力">Cold Start&lt;/a>&lt;/td>
 &lt;td>新 instance 或空快取如何造成延遲&lt;/td>
 &lt;td>autoscaling、readiness&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/write-through-cache/" data-link-title="Write-Through Cache" data-link-desc="說明寫入時同步更新快取與正式來源的策略">Write-Through Cache&lt;/a>&lt;/td>
 &lt;td>寫入時如何同步更新快取&lt;/td>
 &lt;td>write path、freshness&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/write-behind-cache/" data-link-title="Write-Behind Cache" data-link-desc="說明先寫快取再非同步寫入正式來源的風險與用途">Write-Behind Cache&lt;/a>&lt;/td>
 &lt;td>先寫緩衝層再非同步持久化的風險&lt;/td>
 &lt;td>analytics、buffer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/stale-data/" data-link-title="Stale Data" data-link-desc="說明過期資料在快取、replica 與衍生資料中的產品影響">Stale Data&lt;/a>&lt;/td>
 &lt;td>過期資料如何影響產品結果&lt;/td>
 &lt;td>cache、replica&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/soft-ttl/" data-link-title="Soft TTL" data-link-desc="說明資料進入刷新期後仍可短暫使用以降低 stampede">Soft TTL&lt;/a>&lt;/td>
 &lt;td>進入刷新期後如何短暫使用舊資料&lt;/td>
 &lt;td>stampede、refresh&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/singleflight/" data-link-title="Singleflight" data-link-desc="說明相同工作同時發生時如何合併成一次下游請求">Singleflight&lt;/a>&lt;/td>
 &lt;td>相同工作如何合併成一次下游請求&lt;/td>
 &lt;td>cache miss、hot key&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/ttl/" data-link-title="TTL" data-link-desc="說明資料過期時間如何影響快取新鮮度、成本與一致性">TTL&lt;/a>&lt;/td>
 &lt;td>資料何時自動過期&lt;/td>
 &lt;td>cache、session、presence&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/eviction/" data-link-title="Eviction" data-link-desc="說明快取容量不足時哪些資料會被淘汰，以及淘汰如何影響服務">Eviction&lt;/a>&lt;/td>
 &lt;td>容量不足時哪些資料會被淘汰&lt;/td>
 &lt;td>Redis、local cache、CDN&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-invalidation/" data-link-title="Cache Invalidation" data-link-desc="說明快取資料何時更新、刪除或重建，以及失效策略如何影響一致性">快取失效策略&lt;/a>&lt;/td>
 &lt;td>快取資料何時更新、刪除或重建&lt;/td>
 &lt;td>Redis、CDN、多層快取&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/hot-key/" data-link-title="Hot Key" data-link-desc="說明單一 key 承受大量讀寫時如何形成容量瓶頸">Hot Key&lt;/a>&lt;/td>
 &lt;td>少數 key 如何形成容量瓶頸&lt;/td>
 &lt;td>Redis、partition、counter&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cache-stampede/" data-link-title="Cache Stampede" data-link-desc="說明快取同時失效時大量 request 如何壓垮正式來源">Cache Stampede&lt;/a>&lt;/td>
 &lt;td>快取同時 miss 如何壓垮正式來源&lt;/td>
 &lt;td>hot key、TTL、database&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rate-limit/" data-link-title="Rate Limit" data-link-desc="說明限流如何保護服務入口、下游依賴與租戶公平性">Rate Limit&lt;/a>&lt;/td>
 &lt;td>如何限制主體在一段時間內的資源使用量&lt;/td>
 &lt;td>API、tenant、worker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/backpressure/" data-link-title="Backpressure" data-link-desc="說明下游處理速度不足時系統如何讓上游依下游能力送出工作">Backpressure&lt;/a>&lt;/td>
 &lt;td>下游變慢時如何讓上游放慢&lt;/td>
 &lt;td>queue、worker、stream&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/buffer-pool/" data-link-title="Buffer Pool" data-link-desc="說明資料庫如何用記憶體快取磁碟頁，以降低 I/O 並影響查詢效能">Buffer Pool&lt;/a>&lt;/td>
 &lt;td>資料庫如何用記憶體快取磁碟頁&lt;/td>
 &lt;td>InnoDB、shared buffers、命中率&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="入口與部署">入口與部署&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/endpoint/" data-link-title="Service Endpoint" data-link-desc="說明服務如何對外暴露可被路由與存取的入口">Service Endpoint&lt;/a>&lt;/td>
 &lt;td>服務入口如何被路由與存取&lt;/td>
 &lt;td>API、service discovery、internal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/public-api-endpoint/" data-link-title="Public API Endpoint" data-link-desc="說明面向外部 client 的穩定 API 入口如何被管理">Public API Endpoint&lt;/a>&lt;/td>
 &lt;td>面向 client 的穩定對外入口&lt;/td>
 &lt;td>product API、SDK、client&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/api-gateway/" data-link-title="API Gateway" data-link-desc="說明外部流量如何先收斂到一層可集中控制的入口">API Gateway&lt;/a>&lt;/td>
 &lt;td>外部流量如何集中路由、驗證與轉發&lt;/td>
 &lt;td>auth、rate limit、routing、request id&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/request-routing/" data-link-title="Request Routing" data-link-desc="說明入口流量如何依規則被導向不同服務或處理路徑">Request Routing&lt;/a>&lt;/td>
 &lt;td>入口流量如何分派到不同服務或版本&lt;/td>
 &lt;td>host、path、tenant、version&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/admin-endpoint/" data-link-title="Admin Endpoint" data-link-desc="說明管理入口如何承擔高權限操作與稽核責任">Admin Endpoint&lt;/a>&lt;/td>
 &lt;td>高權限管理入口如何被隔離與稽核&lt;/td>
 &lt;td>admin、backoffice、control plane&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/diagnostic-endpoint/" data-link-title="Diagnostic Endpoint" data-link-desc="說明健康檢查、診斷與調試入口如何控制暴露面">Diagnostic Endpoint&lt;/a>&lt;/td>
 &lt;td>health、readiness 與 debug 入口&lt;/td>
 &lt;td>liveness、probe、metrics snapshot&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/internal-endpoint/" data-link-title="Internal Endpoint" data-link-desc="說明服務內部通訊入口如何配合網路邊界與服務發現">Internal Endpoint&lt;/a>&lt;/td>
 &lt;td>服務內部通訊入口如何受控&lt;/td>
 &lt;td>service-to-service、control plane&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/container/" data-link-title="Container" data-link-desc="說明容器如何包裝服務、隔離依賴與影響部署方式">Container&lt;/a>&lt;/td>
 &lt;td>服務如何被包裝成可交付單位&lt;/td>
 &lt;td>image、runtime、CI、Kubernetes&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/load-balancer/" data-link-title="Load Balancer" data-link-desc="說明流量如何分散、排空與導向健康節點">Load Balancer&lt;/a>&lt;/td>
 &lt;td>流量如何分散、排空與導向健康節點&lt;/td>
 &lt;td>ingress、draining、rolling update&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/draining/" data-link-title="Draining" data-link-desc="說明服務如何先停止接收新流量，再讓既有工作完成">Draining&lt;/a>&lt;/td>
 &lt;td>服務如何先停新流量再完成既有工作&lt;/td>
 &lt;td>rolling update、shutdown、cutover&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/sticky-session/" data-link-title="Sticky Session" data-link-desc="說明同一 client 如何在一段時間內持續命中同一個後端實例">Sticky Session&lt;/a>&lt;/td>
 &lt;td>同一 client 如何維持命中同一實例&lt;/td>
 &lt;td>session affinity、load balancer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/idle-timeout/" data-link-title="Idle Timeout" data-link-desc="說明連線或會話在多久沒有活動後應該被回收">Idle Timeout&lt;/a>&lt;/td>
 &lt;td>連線或會話多久沒活動後要回收&lt;/td>
 &lt;td>socket、load balancer、proxy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/health-check/" data-link-title="Health Check" data-link-desc="說明服務如何對外提供可供平台判斷狀態的健康回應">Health Check&lt;/a>&lt;/td>
 &lt;td>平台如何快速判斷服務狀態&lt;/td>
 &lt;td>load balancer、probe、diagnostic&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/resource-limit/" data-link-title="Resource Limit" data-link-desc="說明服務可使用的 CPU、memory 與相關資源上限如何影響行為">Resource Limit&lt;/a>&lt;/td>
 &lt;td>服務可用的 CPU / memory 上限如何影響行為&lt;/td>
 &lt;td>container、scheduler、runtime&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/probe/" data-link-title="Probe" data-link-desc="說明平台如何透過 probe 判斷服務狀態與接流量條件">Probe&lt;/a>&lt;/td>
 &lt;td>平台如何判斷存活與接流量條件&lt;/td>
 &lt;td>readiness、liveness、startup&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/config-rollout/" data-link-title="Config Rollout" data-link-desc="說明設定如何安全下發到正在運作的服務實例">Config Rollout&lt;/a>&lt;/td>
 &lt;td>設定如何安全下發到運作中的服務實例&lt;/td>
 &lt;td>feature flag、secret、runtime config&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/runtime-config/" data-link-title="Runtime Config" data-link-desc="說明服務在啟動與執行時如何讀取與組合設定">Runtime Config&lt;/a>&lt;/td>
 &lt;td>執行時設定如何被讀取、組合與覆寫&lt;/td>
 &lt;td>env var、secret、feature flag&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="通訊協定">通訊協定&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/protocol/" data-link-title="Communication Protocol" data-link-desc="說明不同系統如何對齊資料交換與錯誤語意">Communication Protocol&lt;/a>&lt;/td>
 &lt;td>不同系統如何對齊資料交換與錯誤語意&lt;/td>
 &lt;td>request/response、message、webhook&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/request-response-protocol/" data-link-title="Request/Response Protocol" data-link-desc="說明同步請求如何在 client 與 service 之間對齊互動規則">Request/Response Protocol&lt;/a>&lt;/td>
 &lt;td>同步呼叫如何對齊互動規則&lt;/td>
 &lt;td>HTTP API、gRPC、RPC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/message-protocol/" data-link-title="Message Protocol" data-link-desc="說明 queue 或 stream message 如何對齊格式與處理語意">Message Protocol&lt;/a>&lt;/td>
 &lt;td>queue / stream 訊息如何對齊格式與語意&lt;/td>
 &lt;td>event、job、delivery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/webhook-protocol/" data-link-title="Webhook Protocol" data-link-desc="說明外部回呼如何對齊簽章、重試與 payload 語意">Webhook Protocol&lt;/a>&lt;/td>
 &lt;td>外部回呼如何對齊簽章與 payload&lt;/td>
 &lt;td>callback、signature、retry&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="邊界與治理">邊界與治理&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/contract/" data-link-title="Boundary Contract" data-link-desc="說明跨邊界約定如何維持相容與可驗證">Boundary Contract&lt;/a>&lt;/td>
 &lt;td>邊界兩端如何維持一致約定&lt;/td>
 &lt;td>API contract、deployment contract、queue contract、load balancer contract&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/api-contract/" data-link-title="API Contract" data-link-desc="說明 request / response 邊界如何維持相容與可驗證">API Contract&lt;/a>&lt;/td>
 &lt;td>request / response 如何維持相容&lt;/td>
 &lt;td>client、SDK、public API&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/deployment-contract/" data-link-title="Deployment Contract" data-link-desc="說明服務與部署平台之間的生命週期約定">Deployment Contract&lt;/a>&lt;/td>
 &lt;td>application 與 platform 如何對齊生命週期&lt;/td>
 &lt;td>readiness、shutdown、rollout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/queue-contract/" data-link-title="Queue Contract" data-link-desc="說明佇列工作在重試、確認與重複投遞上的約定">Queue Contract&lt;/a>&lt;/td>
 &lt;td>producer / broker / consumer 如何對齊交付語意&lt;/td>
 &lt;td>ack、retry、DLQ、redelivery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/load-balancer-contract/" data-link-title="Load Balancer Contract" data-link-desc="說明服務與負載平衡器之間的流量與健康檢查約定">Load Balancer Contract&lt;/a>&lt;/td>
 &lt;td>服務與流量入口如何對齊健康與切流&lt;/td>
 &lt;td>health check、draining、idle timeout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/adapter/" data-link-title="Integration Adapter" data-link-desc="說明外部系統接入層如何轉換介面與隔離差異">Integration Adapter&lt;/a>&lt;/td>
 &lt;td>外部系統如何轉成內部需要的形狀&lt;/td>
 &lt;td>repository、payment、notification&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/repository-adapter/" data-link-title="Repository Adapter" data-link-desc="說明持久化層如何把資料模型轉成外部儲存介面">Repository Adapter&lt;/a>&lt;/td>
 &lt;td>持久化存取如何對齊應用模型&lt;/td>
 &lt;td>SQL、transaction、row mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/provider-adapter/" data-link-title="Provider Adapter" data-link-desc="說明第三方服務如何被包裝成內部穩定介面">Provider Adapter&lt;/a>&lt;/td>
 &lt;td>第三方服務如何被包裝成穩定介面&lt;/td>
 &lt;td>payment、email、SMS、storage&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/notification-adapter/" data-link-title="Notification Adapter" data-link-desc="說明通知通道如何把 domain event 轉成外部傳遞格式">Notification Adapter&lt;/a>&lt;/td>
 &lt;td>通知通道如何轉成外部發送格式&lt;/td>
 &lt;td>email、push、webhook&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/middleware/" data-link-title="Request Middleware" data-link-desc="說明請求處理鏈中的共通攔截與前後置處理">Request Middleware&lt;/a>&lt;/td>
 &lt;td>共通請求處理如何放在邊界上&lt;/td>
 &lt;td>auth、logging、tracing、validation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/authentication-middleware/" data-link-title="Authentication Middleware" data-link-desc="說明請求進入 handler 前如何完成身份驗證">Authentication Middleware&lt;/a>&lt;/td>
 &lt;td>請求進入前如何驗證身份&lt;/td>
 &lt;td>token、session、signature&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/authorization-middleware/" data-link-title="Authorization Middleware" data-link-desc="說明請求進入 handler 前如何完成權限判斷">Authorization Middleware&lt;/a>&lt;/td>
 &lt;td>請求進入前如何判斷權限&lt;/td>
 &lt;td>role、tenant、resource owner&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/observability-middleware/" data-link-title="Observability Middleware" data-link-desc="說明請求進入 handler 前後如何補上觀測欄位">Observability Middleware&lt;/a>&lt;/td>
 &lt;td>請求如何補上觀測欄位&lt;/td>
 &lt;td>request id、trace context&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/security-middleware/" data-link-title="Security Middleware" data-link-desc="說明請求進入 handler 前如何完成共通安全控制">Security Middleware&lt;/a>&lt;/td>
 &lt;td>請求如何套用共通安全控制&lt;/td>
 &lt;td>rate limit、redaction&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/validation-middleware/" data-link-title="Validation Middleware" data-link-desc="說明請求進入 handler 前如何完成共通驗證">Validation Middleware&lt;/a>&lt;/td>
 &lt;td>請求如何先做共通驗證&lt;/td>
 &lt;td>schema、header、payload shape&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/vendor-lock-in/" data-link-title="Vendor Lock-In" data-link-desc="說明採用供應商產品後，其 API 與格式滲入程式碼造成的退出成本">Vendor Lock-In&lt;/a>&lt;/td>
 &lt;td>供應商 API 滲入程式碼如何造成退出成本&lt;/td>
 &lt;td>adapter、exit route、選型&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/capability-outsourcing-depth/" data-link-title="Capability Outsourcing Depth（外包深度）" data-link-desc="說明外包一塊後端能力有三種深度（managed 基礎設施、feature SaaS、BaaS bundle）、深度決定保留多少控制權與遷出代價">Capability Outsourcing Depth&lt;/a>&lt;/td>
 &lt;td>外包一塊能力的三種深度如何決定控制權與遷出代價&lt;/td>
 &lt;td>managed 基礎設施、feature SaaS、BaaS bundle&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="訊息與事件">訊息與事件&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/broker/" data-link-title="Broker" data-link-desc="說明 broker 在訊息傳遞系統中負責保存、路由與交付訊息">Broker&lt;/a>&lt;/td>
 &lt;td>訊息離開單一 process 後由誰保存、路由與交付&lt;/td>
 &lt;td>queue、event、worker、stream&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/topic/" data-link-title="Topic" data-link-desc="說明 topic 如何把事件依主題分流給不同訂閱者">Topic&lt;/a>&lt;/td>
 &lt;td>事件如何依主題分流給不同訂閱者&lt;/td>
 &lt;td>broker、event、stream&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/pub-sub/" data-link-title="Pub/Sub" data-link-desc="說明 publish-subscribe 如何把事件即時分發給多個訂閱者">Pub/Sub&lt;/a>&lt;/td>
 &lt;td>訊息如何即時分發給多個訂閱者&lt;/td>
 &lt;td>realtime、notification、broadcast&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/fan-out/" data-link-title="Fan-out" data-link-desc="說明單一事件同時分發給多個下游的訊息拓撲">Fan-out&lt;/a>&lt;/td>
 &lt;td>單一事件如何同時送到多個下游&lt;/td>
 &lt;td>topic、subscription、event flow&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/durable-queue/" data-link-title="Durable Queue" data-link-desc="說明可持久化的 queue 如何在重啟與失敗後保留待處理工作">Durable Queue&lt;/a>&lt;/td>
 &lt;td>工作如何在故障後仍可被處理&lt;/td>
 &lt;td>persistence、ack/nack、retry&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/reliability-boundary/" data-link-title="Reliability Boundary" data-link-desc="說明系統在哪個邊界內承諾可靠傳遞，邊界外需要哪些補償機制">Reliability Boundary&lt;/a>&lt;/td>
 &lt;td>系統在哪些邊界內承諾可恢復傳遞&lt;/td>
 &lt;td>request、process、service boundary&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/offline-catchup/" data-link-title="Offline Catch-up" data-link-desc="說明訂閱者離線後如何補回缺失事件或狀態">Offline Catch-up&lt;/a>&lt;/td>
 &lt;td>離線期間漏失事件如何補齊&lt;/td>
 &lt;td>websocket、sync、reconnect&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/strong-reliability/" data-link-title="Strong Reliability" data-link-desc="說明高可靠事件路徑需要的保存、重試、去重與回復責任">Strong Reliability&lt;/a>&lt;/td>
 &lt;td>關鍵事件如何達到高可靠路徑&lt;/td>
 &lt;td>payment、inventory、audit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/routing-rule/" data-link-title="Routing Rule" data-link-desc="說明訊息系統如何依規則把訊息送到不同處理路徑">Routing Rule&lt;/a>&lt;/td>
 &lt;td>訊息如何依規則進入不同處理路徑&lt;/td>
 &lt;td>broker、queue、priority&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/producer/" data-link-title="Producer" data-link-desc="說明 producer 如何把工作、事件或資料送入後續處理路徑">Producer&lt;/a>&lt;/td>
 &lt;td>誰把工作、事件或資料送入處理路徑&lt;/td>
 &lt;td>queue、broker、stream&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/consumer/" data-link-title="Consumer" data-link-desc="說明 consumer 如何取得等待處理的工作並產生業務結果">Consumer&lt;/a>&lt;/td>
 &lt;td>誰取得等待處理的工作並產生結果&lt;/td>
 &lt;td>queue、worker、side effect&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/prefetch/" data-link-title="Prefetch" data-link-desc="說明 consumer 一次取得多少未完成訊息，以及它如何影響吞吐與公平性">Prefetch&lt;/a>&lt;/td>
 &lt;td>consumer 一次可持有多少未確認訊息&lt;/td>
 &lt;td>broker、consumer tuning&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/in-flight-message/" data-link-title="In-Flight Message" data-link-desc="說明已交給 consumer 但尚未完成確認的訊息狀態">In-Flight Message&lt;/a>&lt;/td>
 &lt;td>訊息已交給 consumer 但尚未完成&lt;/td>
 &lt;td>consumer、shutdown&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/unacked-message/" data-link-title="Unacked Message" data-link-desc="說明 broker 已投遞但尚未收到 consumer 確認的訊息">Unacked Message&lt;/a>&lt;/td>
 &lt;td>broker 尚未收到 consumer 確認的訊息&lt;/td>
 &lt;td>queue health、prefetch&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/ack-nack/" data-link-title="Ack / Nack" data-link-desc="說明 consumer 如何向 broker 回報訊息處理結果">Ack / Nack&lt;/a>&lt;/td>
 &lt;td>consumer 如何回報處理結果&lt;/td>
 &lt;td>broker、retry、DLQ&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/redelivery/" data-link-title="Redelivery" data-link-desc="說明 broker 重新投遞訊息時 consumer 需要承擔的重入責任">Redelivery&lt;/a>&lt;/td>
 &lt;td>broker 重新投遞訊息時如何保持安全&lt;/td>
 &lt;td>at-least-once、idempotency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/requeue/" data-link-title="Requeue" data-link-desc="說明處理失敗的訊息重新排回 queue 時的風險與控制條件">Requeue&lt;/a>&lt;/td>
 &lt;td>處理失敗訊息如何重新排回 queue&lt;/td>
 &lt;td>retry、nack&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/redelivery-loop/" data-link-title="Redelivery Loop" data-link-desc="說明同一訊息反覆投遞失敗如何消耗 consumer 容量">Redelivery Loop&lt;/a>&lt;/td>
 &lt;td>同一訊息反覆投遞失敗如何消耗容量&lt;/td>
 &lt;td>poison message、DLQ&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/poison-message/" data-link-title="Poison Message" data-link-desc="說明特定訊息內容如何穩定造成 consumer 失敗">Poison Message&lt;/a>&lt;/td>
 &lt;td>特定訊息內容如何穩定造成失敗&lt;/td>
 &lt;td>DLQ、schema&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/queue-depth/" data-link-title="Queue Depth" data-link-desc="說明 queue 中等待處理的訊息數如何反映 backlog 與容量壓力">Queue Depth&lt;/a>&lt;/td>
 &lt;td>queue 中等待處理的訊息數&lt;/td>
 &lt;td>backlog、capacity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/publisher-confirm/" data-link-title="Publisher Confirm" data-link-desc="說明 producer 如何確認 broker 已接收並承擔訊息">Publisher Confirm&lt;/a>&lt;/td>
 &lt;td>producer 如何確認 broker 已接收訊息&lt;/td>
 &lt;td>publish、outbox&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/message-persistence/" data-link-title="Message Persistence" data-link-desc="說明訊息是否落盤保存，以及 broker 重啟後能否恢復">Message Persistence&lt;/a>&lt;/td>
 &lt;td>訊息是否落盤保存&lt;/td>
 &lt;td>durability、cost&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/delivery-mode/" data-link-title="Delivery Mode" data-link-desc="說明訊息投遞模式如何影響可靠性、延遲與成本">Delivery Mode&lt;/a>&lt;/td>
 &lt;td>投遞模式如何影響可靠性與延遲&lt;/td>
 &lt;td>broker、event semantics&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/delivery-semantics/" data-link-title="Delivery Semantics" data-link-desc="說明事件投遞語意如何定義遺失、重複、順序與補償策略">Delivery Semantics&lt;/a>&lt;/td>
 &lt;td>事件投遞承諾如何決定補償策略&lt;/td>
 &lt;td>retry、idempotency、replay&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/consumer-capacity/" data-link-title="Consumer Capacity" data-link-desc="說明 consumer 群組每秒能穩定處理多少工作">Consumer Capacity&lt;/a>&lt;/td>
 &lt;td>consumer 群組每秒能處理多少工作&lt;/td>
 &lt;td>lag、scaling&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/competing-consumers/" data-link-title="Competing Consumers" data-link-desc="說明多個 consumer 共同處理同一個 queue 如何提高吞吐與影響順序">Competing Consumers&lt;/a>&lt;/td>
 &lt;td>多個 consumer 如何共同處理同一 queue&lt;/td>
 &lt;td>worker、throughput&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/consumer-group/" data-link-title="Consumer Group" data-link-desc="說明一組 consumer 如何共同分攤 stream 或 topic 的處理責任">Consumer Group&lt;/a>&lt;/td>
 &lt;td>多個 consumer 如何共同分攤 stream&lt;/td>
 &lt;td>Kafka、Redis Streams&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/partition/" data-link-title="Partition" data-link-desc="說明事件流如何切分成多個可並行處理的有序片段">Partition&lt;/a>&lt;/td>
 &lt;td>事件流如何切成可並行處理片段&lt;/td>
 &lt;td>ordering、hot key&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/offset/" data-link-title="Offset" data-link-desc="說明 consumer 在事件流中的讀取位置與重放基準">Offset&lt;/a>&lt;/td>
 &lt;td>consumer 在事件流中的讀取位置&lt;/td>
 &lt;td>replay、checkpoint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/retention/" data-link-title="Retention" data-link-desc="說明資料或事件保留多久，以及保留期限如何影響重放與成本">Retention&lt;/a>&lt;/td>
 &lt;td>資料或事件保留多久&lt;/td>
 &lt;td>stream、log、audit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/retry-policy/" data-link-title="Retry Policy" data-link-desc="說明重試策略如何區分暫時性錯誤、永久錯誤與副作用風險">Retry Policy&lt;/a>&lt;/td>
 &lt;td>失敗後何時再試、何時停止&lt;/td>
 &lt;td>timeout、broker、API&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/consumer-lag/" data-link-title="Consumer Lag" data-link-desc="說明 consumer lag 如何反映訊息堆積、處理能力與容量風險">Consumer Lag&lt;/a>&lt;/td>
 &lt;td>consumer 處理速度落後多少&lt;/td>
 &lt;td>queue health、capacity、alert&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/dead-letter-queue/" data-link-title="Dead-Letter Queue" data-link-desc="說明 dead-letter queue 如何隔離多次處理失敗的訊息">Dead-Letter Queue&lt;/a>&lt;/td>
 &lt;td>多次處理失敗的訊息如何隔離與診斷&lt;/td>
 &lt;td>retry、poison message、incident&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/replay-runbook/" data-link-title="Replay Runbook" data-link-desc="說明事件重放前需要控制的範圍、順序、驗證與副作用">Replay Runbook&lt;/a>&lt;/td>
 &lt;td>事件重放時如何控制範圍、順序與副作用&lt;/td>
 &lt;td>migration、事故復原、補資料&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/duplicate-delivery/" data-link-title="Duplicate Delivery" data-link-desc="說明同一個訊息被處理多次時如何保持結果穩定">重複投遞&lt;/a>&lt;/td>
 &lt;td>同一個工作被處理多次時如何保持結果穩定&lt;/td>
 &lt;td>at-least-once、idempotency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/idempotency/" data-link-title="Idempotency" data-link-desc="說明同一操作執行多次時如何保持結果一致">Idempotency&lt;/a>&lt;/td>
 &lt;td>同一操作多次執行時如何保持結果穩定&lt;/td>
 &lt;td>retry、payment、worker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/outbox-pattern/" data-link-title="Outbox Pattern" data-link-desc="說明資料庫狀態變更與事件發布如何透過 outbox 維持一致">Outbox Pattern&lt;/a>&lt;/td>
 &lt;td>資料變更與事件發布如何維持一致&lt;/td>
 &lt;td>transaction、broker&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="遷移與資料同步">遷移與資料同步&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/online-migration/" data-link-title="Online Migration" data-link-desc="說明服務持續接流量時如何完成資料或 schema 遷移">Online Migration&lt;/a>&lt;/td>
 &lt;td>服務持續接流量時如何遷移資料&lt;/td>
 &lt;td>database、release&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cutover-switchover/" data-link-title="Cutover / Switchover" data-link-desc="說明遷移期間如何把正式流量切到新路徑">Cutover / Switchover&lt;/a>&lt;/td>
 &lt;td>正式流量如何切到新路徑&lt;/td>
 &lt;td>migration、feature flag&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/fallback-plan/" data-link-title="Fallback Plan" data-link-desc="說明變更失敗時如何回到可接受狀態">Fallback Plan&lt;/a>&lt;/td>
 &lt;td>變更失敗時如何回到可接受狀態&lt;/td>
 &lt;td>release、migration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/change-data-capture/" data-link-title="Change Data Capture" data-link-desc="說明資料變更如何被捕捉並傳送到其他系統">Change Data Capture&lt;/a>&lt;/td>
 &lt;td>資料變更如何被捕捉並傳送&lt;/td>
 &lt;td>CDC、event stream&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/replication-lag/" data-link-title="Replication Lag" data-link-desc="說明資料副本落後正式來源多久，以及它如何影響讀取正確性">Replication Lag&lt;/a>&lt;/td>
 &lt;td>副本落後正式來源多久&lt;/td>
 &lt;td>replica、read model&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/checkpoint/" data-link-title="Checkpoint" data-link-desc="說明長時間處理流程如何記錄可恢復進度">Checkpoint&lt;/a>&lt;/td>
 &lt;td>長流程如何記錄可恢復進度&lt;/td>
 &lt;td>backfill、consumer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/backfill/" data-link-title="Backfill" data-link-desc="說明如何為既有資料補上新欄位、新索引或新衍生狀態">Backfill&lt;/a>&lt;/td>
 &lt;td>既有資料如何補上新欄位或新狀態&lt;/td>
 &lt;td>migration、repair&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&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;/td>
 &lt;td>同一變更同時寫兩個系統的風險&lt;/td>
 &lt;td>migration、split service&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/shadow-read/" data-link-title="Shadow Read" data-link-desc="說明正式讀取仍走舊路徑時如何暗中讀新路徑比對結果">Shadow Read&lt;/a>&lt;/td>
 &lt;td>正式讀舊路徑時如何暗中比對新路徑&lt;/td>
 &lt;td>cutover、validation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/correctness-check/" data-link-title="Correctness Check" data-link-desc="說明遷移或重構期間如何驗證新舊結果是否符合規則">Correctness Check&lt;/a>&lt;/td>
 &lt;td>新舊結果如何依規則比對&lt;/td>
 &lt;td>migration、refactor&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-completeness/" data-link-title="Data Completeness" data-link-desc="說明資料是否完整到足以支持查詢、遷移與決策">Data Completeness&lt;/a>&lt;/td>
 &lt;td>資料是否完整到足以支持目標用途&lt;/td>
 &lt;td>migration、audit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-reconciliation/" data-link-title="Data Reconciliation" data-link-desc="說明多個資料來源不一致時如何比對、修復與留下證據">Data Reconciliation&lt;/a>&lt;/td>
 &lt;td>多來源差異如何比對與修復&lt;/td>
 &lt;td>payment、eventual consistency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/replication-slot/" data-link-title="Replication Slot" data-link-desc="說明邏輯複製如何用 slot 追蹤消費進度，並對來源端造成保留壓力">Replication Slot&lt;/a>&lt;/td>
 &lt;td>邏輯複製如何追蹤進度並保留 WAL&lt;/td>
 &lt;td>CDC、slot lag、磁碟壓力&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/conflict-resolution/" data-link-title="Conflict Resolution" data-link-desc="說明並發或離線寫入產生衝突時，如何偵測、呈現與合併成可接受狀態">Conflict Resolution&lt;/a>&lt;/td>
 &lt;td>並發或離線寫入衝突如何合併&lt;/td>
 &lt;td>LWW、欄位合併、CRDT&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/logical-replication/" data-link-title="Logical Replication" data-link-desc="說明以表為粒度解碼 row-level 變更的複製方式，對照 byte-level 的實體複製">Logical Replication&lt;/a>&lt;/td>
 &lt;td>row-level 變更如何以表為粒度複製&lt;/td>
 &lt;td>physical、CDC、跨版本&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/replica-identity/" data-link-title="Replica Identity" data-link-desc="說明 row-level 變更事件如何帶穩定 key，讓下游能正確套用 update 與 delete">Replica Identity&lt;/a>&lt;/td>
 &lt;td>變更事件如何帶穩定 key 以套用 update/delete&lt;/td>
 &lt;td>CDC、primary key、row image&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/gtid/" data-link-title="GTID" data-link-desc="說明全域交易識別碼如何讓複製進度與故障切換不依賴實體 log 位置">GTID&lt;/a>&lt;/td>
 &lt;td>複製進度如何用全域交易識別碼表示&lt;/td>
 &lt;td>replication、failover、binlog&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/replication-channel/" data-link-title="Replication Channel" data-link-desc="說明多來源複製中，每個來源對應的獨立複製通道如何成為隔離單位">Replication Channel&lt;/a>&lt;/td>
 &lt;td>多來源複製如何用獨立通道隔離&lt;/td>
 &lt;td>multi-source、per-channel lag&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/tombstone/" data-link-title="Tombstone" data-link-desc="說明刪除如何用一筆標記記錄下來，讓刪除事件能跨副本與裝置傳播">Tombstone&lt;/a>&lt;/td>
 &lt;td>刪除如何用標記跨副本與裝置傳播&lt;/td>
 &lt;td>delete propagation、sync、CRDT&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="可觀測性與可靠性">可觀測性與可靠性&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/log/" data-link-title="Log" data-link-desc="說明 log 如何記錄單一事件的上下文並支援事故排查">Log&lt;/a>&lt;/td>
 &lt;td>單一事件如何留下可搜尋的上下文&lt;/td>
 &lt;td>incident、debug、audit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/log-schema/" data-link-title="Log Schema" data-link-desc="說明結構化 log 欄位如何支援搜尋、關聯與事故排查">Log Schema&lt;/a>&lt;/td>
 &lt;td>log 欄位如何支援搜尋與關聯&lt;/td>
 &lt;td>structured log、incident&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/metrics/" data-link-title="Metrics" data-link-desc="說明指標如何描述服務趨勢、容量與健康狀態">Metrics&lt;/a>&lt;/td>
 &lt;td>指標如何描述趨勢、容量與健康&lt;/td>
 &lt;td>Prometheus、dashboard&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/histogram/" data-link-title="Histogram" data-link-desc="說明 histogram 如何用分桶統計延遲、大小與分布">Histogram&lt;/a>&lt;/td>
 &lt;td>如何用分桶統計延遲與分布&lt;/td>
 &lt;td>latency、SLO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/bucket/" data-link-title="Bucket" data-link-desc="說明 histogram 分桶如何決定觀測解析度與成本">Bucket&lt;/a>&lt;/td>
 &lt;td>histogram 分桶如何影響解析度&lt;/td>
 &lt;td>metrics、cost&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/percentile/" data-link-title="Percentile" data-link-desc="說明 p95 與 p99 如何描述長尾延遲與使用者體驗">Percentile&lt;/a>&lt;/td>
 &lt;td>p95 / p99 如何描述長尾延遲&lt;/td>
 &lt;td>latency、UX&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/metric-cardinality/" data-link-title="Metric Cardinality" data-link-desc="說明 metric label 組合數量如何影響觀測成本與查詢穩定性">Metric Cardinality&lt;/a>&lt;/td>
 &lt;td>label 組合數如何影響成本&lt;/td>
 &lt;td>metrics、storage、query&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/trace/" data-link-title="Trace" data-link-desc="說明 trace 如何重建跨服務請求的路徑、耗時與依賴關係">Trace&lt;/a>&lt;/td>
 &lt;td>跨服務流程如何重建路徑與耗時&lt;/td>
 &lt;td>tracing、dependency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/trace-context/" data-link-title="Trace Context" data-link-desc="說明跨服務 request 如何用 trace context 串起路徑與耗時">Trace Context&lt;/a>&lt;/td>
 &lt;td>跨服務 request 如何串起路徑&lt;/td>
 &lt;td>tracing、OpenTelemetry&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/trace-id/" data-link-title="Trace ID" data-link-desc="說明分散式追蹤中同一條呼叫路徑的識別碼">Trace ID&lt;/a>&lt;/td>
 &lt;td>同一條 trace 的識別碼&lt;/td>
 &lt;td>tracing、log correlation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/span/" data-link-title="Span" data-link-desc="說明 trace 中一段工作如何記錄耗時、狀態與關聯">Span&lt;/a>&lt;/td>
 &lt;td>trace 中一段工作如何記錄耗時&lt;/td>
 &lt;td>tracing、dependency&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/correlation-id/" data-link-title="Correlation ID" data-link-desc="說明跨事件或跨服務的關聯識別碼如何支援排障">Correlation ID&lt;/a>&lt;/td>
 &lt;td>跨事件與跨服務如何關聯業務流程&lt;/td>
 &lt;td>order、payment、queue&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/request-id/" data-link-title="Request ID" data-link-desc="說明單次 request 的識別碼如何支援 log 搜尋與問題定位">Request ID&lt;/a>&lt;/td>
 &lt;td>單次 request 如何被追蹤&lt;/td>
 &lt;td>API、support&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/dashboard/" data-link-title="Dashboard" data-link-desc="說明 dashboard 如何把關鍵訊號組成可判讀的服務狀態畫面">Dashboard&lt;/a>&lt;/td>
 &lt;td>多個觀測訊號如何組成服務狀態畫面&lt;/td>
 &lt;td>incident、capacity、SLO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/sli-slo/" data-link-title="SLI / SLO" data-link-desc="說明服務品質指標與服務品質目標如何連接產品承諾">SLI / SLO&lt;/a>&lt;/td>
 &lt;td>服務品質如何連到產品承諾&lt;/td>
 &lt;td>alert、incident、error budget&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/error-budget/" data-link-title="Error Budget" data-link-desc="說明 SLO 允許的失敗額度如何影響發版與可靠性投入">Error Budget&lt;/a>&lt;/td>
 &lt;td>SLO 允許的失敗額度如何決策&lt;/td>
 &lt;td>release、reliability&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/burn-rate/" data-link-title="Burn Rate" data-link-desc="說明 error budget 消耗速度如何支援告警與事故分級">Burn Rate&lt;/a>&lt;/td>
 &lt;td>error budget 消耗速度如何告警&lt;/td>
 &lt;td>SLO alert&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/sampling/" data-link-title="Sampling" data-link-desc="說明觀測資料如何抽樣以控制成本並保留診斷能力">Sampling&lt;/a>&lt;/td>
 &lt;td>如何抽樣觀測資料以控制成本&lt;/td>
 &lt;td>trace、log&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/alert/" data-link-title="Alert" data-link-desc="說明 alert 如何把需要處理的服務症狀轉成可行動通知">Alert&lt;/a>&lt;/td>
 &lt;td>服務症狀如何轉成可行動通知&lt;/td>
 &lt;td>on-call、SLO、incident&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/runbook/" data-link-title="Runbook" data-link-desc="說明 runbook 如何把事故判斷與操作步驟標準化">Runbook&lt;/a>&lt;/td>
 &lt;td>事故判斷與操作步驟如何標準化&lt;/td>
 &lt;td>on-call、incident、replay&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/alert-runbook/" data-link-title="Alert Runbook" data-link-desc="說明告警如何連到可執行的排障與恢復流程">Alert Runbook&lt;/a>&lt;/td>
 &lt;td>告警如何連到可執行排障流程&lt;/td>
 &lt;td>on-call、dashboard&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/symptom-based-alert/" data-link-title="Symptom-Based Alert" data-link-desc="說明告警應優先偵測使用者可感知症狀">Symptom-Based Alert&lt;/a>&lt;/td>
 &lt;td>告警如何優先偵測產品症狀&lt;/td>
 &lt;td>SLO、on-call&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/runbook-link/" data-link-title="Runbook Link" data-link-desc="說明告警與 dashboard 如何直接連到處理流程">Runbook Link&lt;/a>&lt;/td>
 &lt;td>告警如何直接連到處理流程&lt;/td>
 &lt;td>alert、dashboard&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/alert-fatigue/" data-link-title="Alert Fatigue" data-link-desc="說明過多低品質告警如何降低 on-call 反應品質">Alert Fatigue&lt;/a>&lt;/td>
 &lt;td>低品質告警如何降低反應品質&lt;/td>
 &lt;td>on-call、alert policy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/degradation/" data-link-title="Degradation" data-link-desc="說明服務部分能力失效時如何保留核心功能與控制風險">降級&lt;/a>&lt;/td>
 &lt;td>服務部分能力失效時如何保留核心功能&lt;/td>
 &lt;td>failover、fallback、capacity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/circuit-breaker/" data-link-title="Circuit Breaker" data-link-desc="說明下游持續失敗時如何暫停呼叫並保護系統">Circuit Breaker&lt;/a>&lt;/td>
 &lt;td>下游持續失敗時如何暫停呼叫&lt;/td>
 &lt;td>timeout、fallback、degradation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/failover/" data-link-title="Failover" data-link-desc="說明主要服務或節點失效時如何切換到備援能力">Failover&lt;/a>&lt;/td>
 &lt;td>主要路徑失效時如何切到備援&lt;/td>
 &lt;td>HA、region、provider&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/autoscaling/" data-link-title="Autoscaling" data-link-desc="說明系統如何依負載自動調整服務實例數量">Autoscaling&lt;/a>&lt;/td>
 &lt;td>容量如何依指標自動擴縮&lt;/td>
 &lt;td>HPA、capacity、traffic burst&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rolling-update/" data-link-title="Rolling Update" data-link-desc="說明逐批替換服務版本的發版策略與風險控制">Rolling Update&lt;/a>&lt;/td>
 &lt;td>版本如何逐批替換並維持可用&lt;/td>
 &lt;td>deployment、release&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/service-registry/" data-link-title="Service Registry" data-link-desc="說明服務實例如何被註冊、維護與摘除">Service Registry&lt;/a>&lt;/td>
 &lt;td>服務實例如何被註冊、維護與摘除&lt;/td>
 &lt;td>heartbeat、TTL、metadata&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/service-discovery/" data-link-title="Service Discovery" data-link-desc="說明服務實例如何被查找與路由">Service Discovery&lt;/a>&lt;/td>
 &lt;td>服務實例如何被查找與路由&lt;/td>
 &lt;td>registry、DNS、load balancing&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/downtime/" data-link-title="Downtime" data-link-desc="說明服務中斷時需要評估的產品後果、資料保護與復原順序">停機&lt;/a>&lt;/td>
 &lt;td>服務中斷時要先保護哪些產品結果&lt;/td>
 &lt;td>incident、SLO、deployment&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/readiness/" data-link-title="Readiness" data-link-desc="說明 instance 何時可以安全接收流量，以及 readiness 如何和部署平台協作">Readiness&lt;/a>&lt;/td>
 &lt;td>instance 何時可以安全接收流量&lt;/td>
 &lt;td>Kubernetes、load balancer、rollout&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/health-check-liveness/" data-link-title="Liveness" data-link-desc="說明平台如何判斷 process 是否仍然存活，以及何時應重啟">Liveness&lt;/a>&lt;/td>
 &lt;td>平台如何判斷 process 是否仍然存活&lt;/td>
 &lt;td>Kubernetes、systemd&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/graceful-shutdown/" data-link-title="Graceful Shutdown" data-link-desc="說明服務停止前如何排空流量、完成工作與保存狀態">Graceful Shutdown&lt;/a>&lt;/td>
 &lt;td>instance 停止前如何排空流量與保存狀態&lt;/td>
 &lt;td>deployment、worker、long connection&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="效能工程與容量規劃">效能工程與容量規劃&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/little-law/" data-link-title="Little&amp;#39;s Law" data-link-desc="說明系統內並發數、到達率與逗留時間三者的數學關係">Little&amp;rsquo;s Law&lt;/a>&lt;/td>
 &lt;td>並發、到達率、逗留時間如何相互推導&lt;/td>
 &lt;td>capacity、saturation、SLO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/universal-scalability-law/" data-link-title="Universal Scalability Law (USL)" data-link-desc="說明系統擴容到一定規模後吞吐反而下降的數學模型">Universal Scalability Law&lt;/a>&lt;/td>
 &lt;td>擴容到某點後吞吐反而下降的數學原因&lt;/td>
 &lt;td>scalability、coordinator、consensus&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/saturation-point/" data-link-title="Saturation Point" data-link-desc="說明系統從線性穩態進入 latency 指數成長區的關鍵流量點">Saturation Point&lt;/a>&lt;/td>
 &lt;td>latency 進入指數成長的臨界流量&lt;/td>
 &lt;td>knee、capacity、headroom&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/use-method/" data-link-title="USE Method" data-link-desc="Brendan Gregg 提出的資源層 Utilization / Saturation / Errors 三維度量測法">USE Method&lt;/a>&lt;/td>
 &lt;td>資源層 Utilization / Saturation / Errors&lt;/td>
 &lt;td>bottleneck、resource、capacity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/red-method/" data-link-title="RED Method" data-link-desc="Tom Wilkie 提出的請求層 Rate / Errors / Duration 三維度量測法">RED Method&lt;/a>&lt;/td>
 &lt;td>請求層 Rate / Errors / Duration&lt;/td>
 &lt;td>SLO、latency、request&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/workload-model/" data-link-title="Workload Model" data-link-desc="描述 production traffic 形狀的可重播模型 — 容量規劃跟壓測的共同輸入">Workload Model&lt;/a>&lt;/td>
 &lt;td>production traffic shape 如何量化重播&lt;/td>
 &lt;td>load test、capacity、forecast&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/tail-latency/" data-link-title="Tail Latency" data-link-desc="說明 p99 / p999 等長尾延遲為何比平均延遲更能反映 saturation">Tail Latency&lt;/a>&lt;/td>
 &lt;td>p99 / p999 為何比平均更能反映 saturation&lt;/td>
 &lt;td>SLO、GC、cross-zone&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/hot-partition/" data-link-title="Hot Partition" data-link-desc="說明分散式 KV / OLTP 中、單一 partition 流量遠超其他的容量問題">Hot Partition&lt;/a>&lt;/td>
 &lt;td>單一 partition 流量過熱、名義容量達不到&lt;/td>
 &lt;td>DynamoDB、partition key、saturation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/peak-forecast/" data-link-title="Peak Forecast" data-link-desc="說明預期峰值流量的預測方法 — 容量規劃的第一個輸入">Peak Forecast&lt;/a>&lt;/td>
 &lt;td>預期峰值如何預測 — 容量公式輸入&lt;/td>
 &lt;td>capacity、event、growth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/headroom-budget/" data-link-title="Headroom Budget" data-link-desc="說明容量規劃中為應付異常 burst &amp;#43; AZ 故障 &amp;#43; forecast 誤差的安全餘量">Headroom Budget&lt;/a>&lt;/td>
 &lt;td>容量規劃的安全餘量&lt;/td>
 &lt;td>capacity、AZ failover、forecast 誤差&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/growth-curve/" data-link-title="Growth Curve" data-link-desc="說明用戶 / 流量隨時間成長的五種典型形狀、影響容量規劃方法">Growth Curve&lt;/a>&lt;/td>
 &lt;td>用戶 / 流量成長的五種形狀&lt;/td>
 &lt;td>linear、step、exponential、cyclical&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/predictive-scaling/" data-link-title="Predictive Scaling" data-link-desc="說明用歷史模式或 ML 模型預測流量、提前擴容的 autoscaler 模式">Predictive Scaling&lt;/a>&lt;/td>
 &lt;td>根據預測提前擴容&lt;/td>
 &lt;td>autoscaler、ML、daily pattern&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/scheduled-scaling/" data-link-title="Scheduled Scaling" data-link-desc="說明按已知時間表預先擴容的 autoscaler 模式">Scheduled Scaling&lt;/a>&lt;/td>
 &lt;td>按已知時間表預先擴容&lt;/td>
 &lt;td>event、pre-scaling、Black Friday&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&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>&lt;/td>
 &lt;td>production traffic 複製到新版本驗證&lt;/td>
 &lt;td>production validation、traffic mirror&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&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>&lt;/td>
 &lt;td>程式碼上線但 UI 入口暫不開放&lt;/td>
 &lt;td>feature flag、production validation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/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&lt;/a>&lt;/td>
 &lt;td>canary release 中的 latency 退化檢查&lt;/td>
 &lt;td>canary、release gate、rollback&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/profile-diff/" data-link-title="Profile Diff" data-link-desc="對比兩次 profile（如 release candidate vs baseline）找出 hottest 變化">Profile Diff&lt;/a>&lt;/td>
 &lt;td>比較兩次 profile 找退化原因&lt;/td>
 &lt;td>release、CPU、memory、lock&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/continuous-profiling/" data-link-title="Continuous Profiling" data-link-desc="在 production 持續取得低 overhead profile 的觀察方法">Continuous Profiling&lt;/a>&lt;/td>
 &lt;td>production 持續取低 overhead profile&lt;/td>
 &lt;td>flame graph、observability、tracing&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/cost-per-request/" data-link-title="Cost Per Request" data-link-desc="把雲端成本拆到單一 API 請求的 unit economics 模型">Cost Per Request&lt;/a>&lt;/td>
 &lt;td>雲端成本拆到單一請求的 unit economics&lt;/td>
 &lt;td>FinOps、capacity、TCO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/performance-budget/" data-link-title="Performance Budget" data-link-desc="跟 error budget 同類概念、但用於 latency / throughput 退化的可控額度">Performance Budget&lt;/a>&lt;/td>
 &lt;td>跟 error budget 並列的效能退化額度&lt;/td>
 &lt;td>SLO、release freeze、burn rate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/latency-budget/" data-link-title="Latency Budget" data-link-desc="把 user-perceived latency 拆到每個 stage 的配額、反推架構選擇">Latency Budget&lt;/a>&lt;/td>
 &lt;td>end-to-end latency 拆到每 stage 的配額&lt;/td>
 &lt;td>Little&amp;rsquo;s Law、stage、reverse calculation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/slo-baseline-drift/" data-link-title="SLO Baseline Drift" data-link-desc="SLO baseline 因業務變化 / surge / 架構改動而需要重新校準的現象">SLO Baseline Drift&lt;/a>&lt;/td>
 &lt;td>SLO baseline 因業務變化要重新校準&lt;/td>
 &lt;td>review、surge、product change&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/olap-offload/" data-link-title="OLAP Offload" data-link-desc="說明如何把分析型查詢從 OLTP 主庫卸載，以保護線上交易效能">OLAP Offload&lt;/a>&lt;/td>
 &lt;td>分析查詢如何從 OLTP 主庫卸載&lt;/td>
 &lt;td>replica、資料倉儲、CDC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/per-connection-memory/" data-link-title="Per-Connection Memory" data-link-desc="說明每條連線或每個操作的記憶體用量如何隨並發數放大">Per-Connection Memory&lt;/a>&lt;/td>
 &lt;td>每連線記憶體如何隨並發數放大&lt;/td>
 &lt;td>sort/join buffer、OOM、連線數&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="事故處理與復盤">事故處理與復盤&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/on-call/" data-link-title="On-Call" data-link-desc="說明值班制度如何承接告警、事故分級與升級流程">On-Call&lt;/a>&lt;/td>
 &lt;td>值班制度如何承接告警與事故流程&lt;/td>
 &lt;td>paging、handover、incident&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/handover-protocol/" data-link-title="Handover Protocol" data-link-desc="說明事故與值班交接時要傳遞哪些資訊、責任與完成條件">Handover Protocol&lt;/a>&lt;/td>
 &lt;td>值班或事故責任如何安全交接&lt;/td>
 &lt;td>on-call、escalation、incident&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/playbook/" data-link-title="Playbook" data-link-desc="說明場景化處置腳本如何降低事故處理不確定性">Playbook&lt;/a>&lt;/td>
 &lt;td>場景化處置如何快速啟動與執行&lt;/td>
 &lt;td>incident workflow、recovery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/ci-pipeline/" data-link-title="CI Pipeline" data-link-desc="說明持續整合流程如何在合併前驗證品質與相容性">CI Pipeline&lt;/a>&lt;/td>
 &lt;td>合併前如何自動驗證品質與相容性&lt;/td>
 &lt;td>tests、checks、merge gate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/load-test/" data-link-title="Load Test" data-link-desc="說明在預期流量下驗證容量、延遲與降級策略的測試">Load Test&lt;/a>&lt;/td>
 &lt;td>預期流量下如何驗證容量與延遲&lt;/td>
 &lt;td>performance、SLO、capacity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/chaos-test/" data-link-title="Chaos Test" data-link-desc="說明透過受控故障注入驗證系統在異常條件下的恢復能力">Chaos Test&lt;/a>&lt;/td>
 &lt;td>受控故障注入如何驗證韌性&lt;/td>
 &lt;td>resilience、failover、runbook&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/game-day/" data-link-title="Game Day" data-link-desc="說明事故演練如何驗證流程、工具與團隊協作">Game Day&lt;/a>&lt;/td>
 &lt;td>事故演練如何驗證流程與協作&lt;/td>
 &lt;td>drill、readiness、training&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/incident-severity/" data-link-title="Incident Severity" data-link-desc="說明事故分級如何把產品影響轉成對應處置節奏">Incident Severity&lt;/a>&lt;/td>
 &lt;td>事故如何依產品影響分級&lt;/td>
 &lt;td>on-call、incident、SLO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/incident-command-system/" data-link-title="Incident Command System" data-link-desc="說明事故期間的指揮角色、決策邊界與協作方式">Incident Command System&lt;/a>&lt;/td>
 &lt;td>事故期間如何分配指揮與執行角色&lt;/td>
 &lt;td>commander、scribe、owner&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/incident-communication-channel/" data-link-title="Incident Communication Channel" data-link-desc="說明事故期間內外部溝通要使用哪些固定通道與節奏">Incident Communication Channel&lt;/a>&lt;/td>
 &lt;td>事故期間如何同步對內對外資訊&lt;/td>
 &lt;td>internal chat、status update、bridge&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/escalation-policy/" data-link-title="Escalation Policy" data-link-desc="說明事故升級鏈與值班轉接規則">Escalation Policy&lt;/a>&lt;/td>
 &lt;td>事故無回應或無進展時如何升級&lt;/td>
 &lt;td>on-call、paging、handover&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/incident-timeline/" data-link-title="Incident Timeline" data-link-desc="說明事故時間線如何支援判斷、溝通與復盤">Incident Timeline&lt;/a>&lt;/td>
 &lt;td>事故事件如何形成一致時間軸&lt;/td>
 &lt;td>incident log、communication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/evidence-package/" data-link-title="Evidence Package" data-link-desc="說明觀測、驗證與事故流程如何把證據包成可交接、可回放的 artifact">Evidence Package&lt;/a>&lt;/td>
 &lt;td>觀測與事故證據如何交接與回放&lt;/td>
 &lt;td>observability、verification、PIR&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/time-range/" data-link-title="Time Range" data-link-desc="說明證據、查詢與事故判讀如何用時間窗保留可回放上下文">Time Range&lt;/a>&lt;/td>
 &lt;td>證據如何保留明確時間窗&lt;/td>
 &lt;td>evidence、incident timeline&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/query-link/" data-link-title="Query Link" data-link-desc="說明證據包如何保存可重跑查詢入口，而不是只保留截圖或口頭結論">Query Link&lt;/a>&lt;/td>
 &lt;td>證據如何保留可重跑查詢入口&lt;/td>
 &lt;td>evidence、handoff&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-quality/" data-link-title="Data Quality" data-link-desc="說明證據欄位如何標示 completeness、freshness、sampling 與資料限制">Data Quality&lt;/a>&lt;/td>
 &lt;td>證據如何標示完整度與限制&lt;/td>
 &lt;td>evidence、sampling、freshness&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/confidence/" data-link-title="Confidence" data-link-desc="說明證據包如何標示 confirmed、suspected 或 needs follow-up 的判讀信心">Confidence&lt;/a>&lt;/td>
 &lt;td>證據如何標示判讀信心等級&lt;/td>
 &lt;td>evidence、gate decision&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/known-gap/" data-link-title="Known Gap" data-link-desc="說明證據包如何明確保存已知缺口，避免下游高估證據完整性">Known Gap&lt;/a>&lt;/td>
 &lt;td>證據如何保存已知缺口&lt;/td>
 &lt;td>evidence、PIR、readiness&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/incident-decision-log/" data-link-title="Incident Decision Log" data-link-desc="說明事故期間如何保留決策、證據、owner 與回退條件">Incident Decision Log&lt;/a>&lt;/td>
 &lt;td>事故決策如何保存證據與回退條件&lt;/td>
 &lt;td>IC handoff、PIR、status update&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/steady-state/" data-link-title="Steady State" data-link-desc="說明可靠性實驗與事故恢復如何定義系統應維持的可接受狀態">Steady State&lt;/a>&lt;/td>
 &lt;td>實驗與事故恢復如何定義成功狀態&lt;/td>
 &lt;td>chaos、DR、recovery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&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;/td>
 &lt;td>故障影響面如何估算與隔離&lt;/td>
 &lt;td>dependency、shared resource&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rollback-strategy/" data-link-title="Rollback Strategy" data-link-desc="說明事故期間如何判斷回滾、回切與暫停變更">Rollback Strategy&lt;/a>&lt;/td>
 &lt;td>事故期間何時回滾與回切&lt;/td>
 &lt;td>deployment、release gate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/post-incident-review/" data-link-title="Post-Incident Review" data-link-desc="說明事故後如何完成復盤、學習與改進閉環">Post-Incident Review&lt;/a>&lt;/td>
 &lt;td>事故後如何形成改進閉環&lt;/td>
 &lt;td>retrospective、action items&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rca/" data-link-title="RCA" data-link-desc="說明根因分析如何區分觸發事件、系統弱點與防線缺口">RCA&lt;/a>&lt;/td>
 &lt;td>根因分析如何從證據推導改進&lt;/td>
 &lt;td>timeline、control gap&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rto/" data-link-title="RTO" data-link-desc="說明恢復時間目標如何約束事故回復策略">RTO&lt;/a>&lt;/td>
 &lt;td>服務回復時間目標如何定義&lt;/td>
 &lt;td>SLA/SLO、DR&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/rpo/" data-link-title="RPO" data-link-desc="說明恢復點目標如何定義可接受資料損失範圍">RPO&lt;/a>&lt;/td>
 &lt;td>可接受資料損失窗口如何定義&lt;/td>
 &lt;td>backup、replication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/mttr/" data-link-title="MTTR" data-link-desc="說明平均修復時間如何作為事故處理能力指標">MTTR&lt;/a>&lt;/td>
 &lt;td>平均修復時間如何反映處置能力&lt;/td>
 &lt;td>incident metrics、review&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/point-in-time-recovery/" data-link-title="Point-in-Time Recovery" data-link-desc="說明如何用完整備份加上後續變更日誌，把資料庫還原到任意時間點">Point-in-Time Recovery&lt;/a>&lt;/td>
 &lt;td>資料如何還原到過去任意時間點&lt;/td>
 &lt;td>base backup、WAL、RPO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/corruption-recovery/" data-link-title="Corruption Recovery" data-link-desc="說明資料損毀事故如何先辨識來源、保全證據，再決定修復或還原">Corruption Recovery&lt;/a>&lt;/td>
 &lt;td>資料損毀事故如何辨識來源並處置&lt;/td>
 &lt;td>checksum、evidence、restore&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="資安與資料保護">資安與資料保護&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>卡片&lt;/th>
 &lt;th>核心問題&lt;/th>
 &lt;th>常見出現位置&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/authorization/" data-link-title="Authorization" data-link-desc="說明授權如何判斷誰能對哪些資源執行哪些操作">Authorization&lt;/a>&lt;/td>
 &lt;td>誰能對哪些資源執行哪些操作&lt;/td>
 &lt;td>RBAC、ABAC、tenant&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/authentication/" data-link-title="Authentication" data-link-desc="說明系統如何確認呼叫者身份">Authentication&lt;/a>&lt;/td>
 &lt;td>系統如何確認呼叫者身份&lt;/td>
 &lt;td>login、API key、mTLS&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/credential/" data-link-title="Credential" data-link-desc="整理身分驗證與系統存取用秘密資料">Credential&lt;/a>&lt;/td>
 &lt;td>身分與系統存取用秘密如何保存與輪替&lt;/td>
 &lt;td>API key、password、private key&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/iam/" data-link-title="IAM" data-link-desc="說明 identity and access management 如何集中管理身分、角色與權限">IAM&lt;/a>&lt;/td>
 &lt;td>身分與權限如何集中治理&lt;/td>
 &lt;td>SSO、roles、policy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/bola-idor/" data-link-title="BOLA / IDOR" data-link-desc="說明物件層授權缺失如何讓使用者存取不屬於自己的資料">BOLA / IDOR&lt;/a>&lt;/td>
 &lt;td>使用者如何被限制只能存取授權物件&lt;/td>
 &lt;td>API、resource ID&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/bopla/" data-link-title="BOPLA" data-link-desc="說明屬性層授權缺失如何讓使用者讀寫不該暴露的欄位">BOPLA&lt;/a>&lt;/td>
 &lt;td>欄位層級如何授權讀寫&lt;/td>
 &lt;td>DTO、field policy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/mass-assignment/" data-link-title="Mass Assignment" data-link-desc="說明自動綁定 request 欄位如何造成未授權欄位被修改">Mass Assignment&lt;/a>&lt;/td>
 &lt;td>自動綁定欄位如何造成未授權修改&lt;/td>
 &lt;td>API、ORM&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/excessive-data-exposure/" data-link-title="Excessive Data Exposure" data-link-desc="說明 API 回傳過多資料如何增加敏感資訊外洩風險">Excessive Data Exposure&lt;/a>&lt;/td>
 &lt;td>API 回傳過多資料如何增加外洩風險&lt;/td>
 &lt;td>response、DTO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/unrestricted-resource-consumption/" data-link-title="Unrestricted Resource Consumption" data-link-desc="說明缺少資源限制如何讓 API 被濫用或拖垮">Unrestricted Resource Consumption&lt;/a>&lt;/td>
 &lt;td>API 如何限制昂貴資源使用&lt;/td>
 &lt;td>upload、export、query&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/function-level-authorization/" data-link-title="Function-Level Authorization" data-link-desc="說明功能操作本身也需要授權，不只資源 ID 需要授權">Function-Level Authorization&lt;/a>&lt;/td>
 &lt;td>功能操作本身如何授權&lt;/td>
 &lt;td>refund、export、admin&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/tenant-boundary/" data-link-title="Tenant Boundary" data-link-desc="說明多租戶系統如何隔離不同客戶或組織的資料與資源">Tenant Boundary&lt;/a>&lt;/td>
 &lt;td>多租戶資料與資源如何隔離&lt;/td>
 &lt;td>SaaS、RBAC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/least-privilege/" data-link-title="Least Privilege" data-link-desc="說明身份、服務與人員只應取得完成工作所需的最小權限">Least Privilege&lt;/a>&lt;/td>
 &lt;td>身份如何只取得必要權限&lt;/td>
 &lt;td>IAM、database user&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/security-misconfiguration/" data-link-title="Security Misconfiguration" data-link-desc="說明錯誤設定如何讓安全控制失效或暴露內部能力">Security Misconfiguration&lt;/a>&lt;/td>
 &lt;td>設定錯誤如何暴露內部能力&lt;/td>
 &lt;td>CORS、debug、cloud&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/attack-surface/" data-link-title="Attack Surface" data-link-desc="說明系統哪些對外暴露面會被先行探測與枚舉">Attack Surface&lt;/a>&lt;/td>
 &lt;td>系統哪些對外暴露面最先被探測&lt;/td>
 &lt;td>public API、admin route、webhook&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/trust-boundary/" data-link-title="Trust Boundary" data-link-desc="說明系統哪些位置開始不能沿用原本的信任假設">Trust Boundary&lt;/a>&lt;/td>
 &lt;td>哪些位置要重建信任假設&lt;/td>
 &lt;td>auth boundary、tenant、network&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/abuse-case/" data-link-title="Abuse Case" data-link-desc="說明合法功能如何被惡意轉用成突破或濫用路徑">Abuse Case&lt;/a>&lt;/td>
 &lt;td>合法功能如何被惡意轉用&lt;/td>
 &lt;td>export、invite、reset&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/waf/" data-link-title="WAF" data-link-desc="說明 Web Application Firewall 如何在入口層過濾常見攻擊與濫用">WAF&lt;/a>&lt;/td>
 &lt;td>入口層如何過濾常見攻擊與濫用&lt;/td>
 &lt;td>edge、bot、attack&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/feature-flag/" data-link-title="Feature Flag" data-link-desc="說明如何用可動態開關控制功能曝光與風險">Feature Flag&lt;/a>&lt;/td>
 &lt;td>功能開關如何分離部署與啟用&lt;/td>
 &lt;td>rollout、experiment、rollback&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/security-exception/" data-link-title="Security Exception" data-link-desc="說明資安風險例外如何以期限、補償控制與關閉條件管理">Security Exception&lt;/a>&lt;/td>
 &lt;td>風險例外如何以期限與關閉條件治理&lt;/td>
 &lt;td>risk acceptance、governance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/release-freeze/" data-link-title="Release Freeze" data-link-desc="說明高風險期間如何以凍結策略保護正式環境">Release Freeze&lt;/a>&lt;/td>
 &lt;td>高風險期間如何暫停特定變更&lt;/td>
 &lt;td>incident、vulnerability window&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/tripwire/" data-link-title="Tripwire" data-link-desc="說明風險決策在條件變化時如何自動回到評估流程">Tripwire&lt;/a>&lt;/td>
 &lt;td>風險決策何時自動回到重評估流程&lt;/td>
 &lt;td>threshold、escalation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/allowlist/" data-link-title="Allowlist" data-link-desc="說明如何用明確允許條件控制例外放行範圍">Allowlist&lt;/a>&lt;/td>
 &lt;td>例外放行如何維持可控範圍&lt;/td>
 &lt;td>freeze exception、policy control&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/input-validation/" data-link-title="Input Validation" data-link-desc="說明進入系統的資料如何先被檢查格式、範圍與語意">Input Validation&lt;/a>&lt;/td>
 &lt;td>入口資料如何檢查格式與語意&lt;/td>
 &lt;td>API、webhook&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/ssrf/" data-link-title="SSRF" data-link-desc="說明伺服器端請求被濫用時如何存取內部網路或 metadata 服務">SSRF&lt;/a>&lt;/td>
 &lt;td>伺服器端請求如何被濫用&lt;/td>
 &lt;td>URL fetch、webhook&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/pii/" data-link-title="PII" data-link-desc="說明可識別個人的資料如何影響權限、遮罩、保留與稽核">PII&lt;/a>&lt;/td>
 &lt;td>可識別個人的資料如何保護&lt;/td>
 &lt;td>masking、retention&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-classification/" data-link-title="Data Classification" data-link-desc="說明資料分級如何決定保護、存取、保留與匯出規則">Data Classification&lt;/a>&lt;/td>
 &lt;td>資料分級如何決定保護規則&lt;/td>
 &lt;td>security、compliance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-masking/" data-link-title="Data Masking" data-link-desc="說明敏感資料如何在顯示、匯出、log 與測試資料中降低暴露">Data Masking&lt;/a>&lt;/td>
 &lt;td>敏感資料如何降低暴露&lt;/td>
 &lt;td>export、log、support tool&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/secret-management/" data-link-title="Secret Management" data-link-desc="說明 token、key、password 與憑證如何保存、輪替與撤銷">Secret Management&lt;/a>&lt;/td>
 &lt;td>token、key、password 如何保存與輪替&lt;/td>
 &lt;td>credential、deployment&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/tls-mtls/" data-link-title="TLS / mTLS" data-link-desc="說明傳輸加密與雙向憑證驗證如何保護跨邊界資料流">TLS / mTLS&lt;/a>&lt;/td>
 &lt;td>傳輸加密與雙向身份驗證如何保護資料流&lt;/td>
 &lt;td>service-to-service、API&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/website-certificate-lifecycle/" data-link-title="Website Certificate Lifecycle" data-link-desc="說明網站 TLS 憑證從簽發到續期與撤銷的全流程責任">Website Certificate Lifecycle&lt;/a>&lt;/td>
 &lt;td>網站憑證從簽發到續期與撤銷如何治理&lt;/td>
 &lt;td>HTTPS、edge、ingress&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/acme-automation/" data-link-title="ACME Automation" data-link-desc="說明網站憑證如何透過 ACME 自動簽發與續期">ACME Automation&lt;/a>&lt;/td>
 &lt;td>網站憑證如何自動簽發與續期&lt;/td>
 &lt;td>Let&amp;rsquo;s Encrypt、DNS-01、HTTP-01&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/certificate-chain-trust/" data-link-title="Certificate Chain and Trust Root" data-link-desc="說明網站憑證鏈與信任根如何影響連線可用性與驗證結果">Certificate Chain and Trust Root&lt;/a>&lt;/td>
 &lt;td>憑證鏈與信任根如何影響握手&lt;/td>
 &lt;td>intermediate CA、trust store&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/certificate-rotation-renewal/" data-link-title="Certificate Rotation and Renewal" data-link-desc="說明網站憑證如何安全續期與輪替以避免停機">Certificate Rotation and Renewal&lt;/a>&lt;/td>
 &lt;td>憑證與私鑰如何不中斷更新&lt;/td>
 &lt;td>expiry、zero-downtime&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/certificate-revocation/" data-link-title="Certificate Revocation" data-link-desc="說明憑證洩漏或誤發時如何撤銷並控制影響範圍">Certificate Revocation&lt;/a>&lt;/td>
 &lt;td>憑證失效時如何撤銷與替換&lt;/td>
 &lt;td>key compromise、incident&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/artifact-provenance/" data-link-title="Artifact Provenance" data-link-desc="說明交付物的來源、完整性與簽章關聯如何建立信任">Artifact Provenance&lt;/a>&lt;/td>
 &lt;td>交付物來源與完整性如何建立可驗證信任&lt;/td>
 &lt;td>CI、supply chain、release gate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/audit-log/" data-link-title="Audit Log" data-link-desc="說明高風險操作如何留下可追溯、可稽核的紀錄">Audit Log&lt;/a>&lt;/td>
 &lt;td>高風險操作如何留下責任證據&lt;/td>
 &lt;td>admin、export、permission&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/row-level-security/" data-link-title="Row-Level Security" data-link-desc="說明資料庫如何用 policy 限制同一張表中哪些 row 對某個角色可見或可寫">Row-Level Security&lt;/a>&lt;/td>
 &lt;td>資料庫如何用 policy 過濾可見的 row&lt;/td>
 &lt;td>RLS、多租戶、policy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/at-rest-encryption/" data-link-title="At-Rest Encryption" data-link-desc="說明資料落到儲存媒介前的加密層，以及它對應的威脅模型">At-Rest Encryption&lt;/a>&lt;/td>
 &lt;td>落地資料如何在儲存層加密&lt;/td>
 &lt;td>tablespace、backup、金鑰&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/key-management/" data-link-title="Key Management" data-link-desc="說明加密金鑰如何產生、保存、輪替，以及還原時如何依賴金鑰">Key Management&lt;/a>&lt;/td>
 &lt;td>加密金鑰如何產生、保存與輪替&lt;/td>
 &lt;td>KMS、keyring、rotation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/break-glass-access/" data-link-title="Break-Glass Access" data-link-desc="說明緊急情況下臨時授予的高權限存取，如何用工單、時限與事後審查治理">Break-Glass Access&lt;/a>&lt;/td>
 &lt;td>緊急高權限存取如何用工單與時限治理&lt;/td>
 &lt;td>emergency、ticket、audit&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="使用方式">使用方式&lt;/h2>
&lt;p>知識卡片是章節引用單位。選型文章遇到術語時，應連到對應卡片；服務實體章節需要更深入時，再從卡片延伸到具體工具操作。&lt;/p></description><content:encoded><![CDATA[<p>前置知識卡片的核心目標是把後端服務中的高密度術語拆成可獨立閱讀的 domain knowhow。服務選型文章會使用 broker、consumer lag、dead-letter、replay、降級、停機、readiness 等詞彙；這些詞彙背後都包含產品後果、操作責任與排障方式。</p>
<p>這個模組先建立共同語言。每張卡片只處理一個知識節點，並用「概念位置、可觀察訊號、接近真實網路服務的例子、設計責任」說明它在後端系統中的角色。</p>
<h2 id="術語建卡判準">術語建卡判準</h2>
<p>知識卡片的建卡判準是術語是否承擔理解成本與判斷成本，核心重點在它如何影響服務理解，而非只看它是否已經在多篇文章重複出現。讀者如果缺少某個名詞的服務語意，就會難以理解服務路徑、風險邊界、artifact 欄位或下一步決策，這個名詞就值得建卡。</p>
<p>適合建卡的術語通常有三個特徵：第一，它超過單純字面翻譯，並包含服務責任、操作條件或失敗代價；第二，讀者若缺少它就難以理解服務路徑、風險邊界或下一步決策，例如 validation query、rollback window、fallback read；第三，它可以被獨立說明成「概念位置、可觀察訊號、例子、設計責任」。出現頻率與是否影響實作判斷都可以當補充訊號，但不參與「是否要建卡」的必要判準。</p>
<p>不適合建卡的是過度寬泛、沒有明確服務責任的詞。若名詞只是文章中的普通形容詞、單一欄位值、或只能在該句子內成立，優先在正文補清楚，不硬拆成卡片。</p>
<h2 id="資料與一致性">資料與一致性</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/database/" data-link-title="Database" data-link-desc="說明 database 在後端系統中如何承擔正式狀態、查詢與一致性責任">Database</a></td>
          <td>正式狀態如何保存、查詢與保護</td>
          <td>source of truth、transaction、backup</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/source-of-truth/" data-link-title="Source of Truth" data-link-desc="說明正式資料來源如何決定資料判斷、修復與一致性責任">Source of Truth</a></td>
          <td>哪個位置承擔正式資料判斷</td>
          <td>database、cache、search index</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/search-index/" data-link-title="Search Index" data-link-desc="說明搜尋索引如何承擔全文檢索、排序與查詢體驗">Search Index</a></td>
          <td>搜尋體驗如何有獨立讀取模型</td>
          <td>full-text、filter、ranking</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/full-text-search/" data-link-title="Full-Text Search" data-link-desc="說明全文檢索如何處理關鍵字匹配、語言分析與排序">Full-Text Search</a></td>
          <td>文本檢索如何支援關鍵字與相關性排序</td>
          <td>search、documents、catalog</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/facet-query/" data-link-title="Facet Query" data-link-desc="說明分面查詢如何提供分類統計與篩選體驗">Facet Query</a></td>
          <td>搜尋結果如何提供可篩選聚合維度</td>
          <td>filter、aggregation、UX</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/object-storage/" data-link-title="Object Storage" data-link-desc="說明大型非結構化檔案的保存、存取與生命週期管理">Object Storage</a></td>
          <td>大型檔案如何保存與控管生命週期</td>
          <td>upload、export、backup</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/event-log/" data-link-title="Event Log" data-link-desc="說明事件歷史如何保存、重播與支援跨服務資料重建">Event Log</a></td>
          <td>歷史事件如何保存與重播</td>
          <td>replay、audit、projection</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/read-model/" data-link-title="Read Model" data-link-desc="說明為查詢場景建立的讀取模型，與正式狀態的責任分離">Read Model</a></td>
          <td>查詢需求如何有獨立讀取資料形狀</td>
          <td>projection、query model</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/projection/" data-link-title="Projection" data-link-desc="說明從事件流或資料變更推算出查詢用讀取視圖的轉換機制">Projection</a></td>
          <td>來源資料如何轉換成查詢視圖</td>
          <td>events、materialized view</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-lifecycle/" data-link-title="Data Lifecycle" data-link-desc="說明資料從建立、使用、保留到刪除的責任邊界">資料生命週期</a></td>
          <td>資料如何建立、保留、封存與刪除</td>
          <td>retention、audit、export</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-inconsistency/" data-link-title="Data Inconsistency" data-link-desc="說明多份資料暫時不同步時如何判斷產品後果與修復責任">資料不一致</a></td>
          <td>多份資料暫時不同步時如何辨識與修復</td>
          <td>cache、replica、eventual consistency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/transaction/" data-link-title="Transaction" data-link-desc="說明 transaction 如何讓一組資料變更一起成功或一起回復">Transaction</a></td>
          <td>一組資料變更如何一起成功或一起回復</td>
          <td>database、commit、rollback</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/transaction-boundary/" data-link-title="Transaction Boundary" data-link-desc="說明哪些資料變更應在同一個交易中一起成功或一起回復">Transaction Boundary</a></td>
          <td>哪些變更要一起成功或回復</td>
          <td>database、unit of work</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/migration/" data-link-title="Migration" data-link-desc="說明系統如何把資料、流量或結構從舊狀態移到新狀態">Migration</a></td>
          <td>系統如何從舊狀態受控移到新狀態</td>
          <td>release、cutover、backfill</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/schema-migration/" data-link-title="Schema Migration" data-link-desc="說明資料庫結構如何隨應用程式版本安全演進">Schema Migration</a></td>
          <td>資料庫結構如何隨版本安全演進</td>
          <td>release、rollback、migration</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/expand-contract/" data-link-title="Expand / Contract" data-link-desc="說明先擴充相容面、再收斂舊路徑的遷移做法">Expand / Contract</a></td>
          <td>先擴充相容面再收斂舊路徑的遷移做法</td>
          <td>schema migration、online migration</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/migration-gate/" data-link-title="Migration Gate" data-link-desc="說明遷移流程何時可以進入下一階段或正式切換">Migration Gate</a></td>
          <td>遷移流程如何決定能否進入下一階段</td>
          <td>backfill、correctness check</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/mapping-table/" data-link-title="Mapping Table" data-link-desc="說明遷移或轉換期間如何把舊語意明確對應到新語意">Mapping Table</a></td>
          <td>舊資料語意如何明確對應到新語意</td>
          <td>migration、backfill、validation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/validation-query/" data-link-title="Validation Query" data-link-desc="說明遷移、回填與修復期間如何用查詢證明資料語意是否一致">Validation Query</a></td>
          <td>查詢如何證明資料語意是否一致</td>
          <td>migration、evidence package</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/read-compatibility/" data-link-title="Read Compatibility" data-link-desc="說明資料或服務演進期間讀取路徑如何同時支援新舊語意">Read Compatibility</a></td>
          <td>讀取路徑如何同時支援新舊語意</td>
          <td>expand、cutover、fallback read</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/fallback-read/" data-link-title="Fallback Read" data-link-desc="說明讀取路徑切換失敗時如何暫時回到舊資料語意或舊讀取來源">Fallback Read</a></td>
          <td>切換失敗時如何暫時回到舊讀取語意</td>
          <td>cutover、rollback window</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cutover-window/" data-link-title="Cutover Window" data-link-desc="說明正式切換發生的觀察窗口、停止條件與回退判讀範圍">Cutover Window</a></td>
          <td>正式切換如何被時間窗與訊號框住</td>
          <td>cutover、release gate</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/release-gate/" data-link-title="Release Gate" data-link-desc="說明變更在正式釋出前如何通過或阻擋">Release Gate</a></td>
          <td>變更如何在正式釋出前通過或阻擋</td>
          <td>error budget、migration、review</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/gate-decision/" data-link-title="Gate Decision" data-link-desc="說明 release gate 如何把證據轉成放行、暫停、回退或補證據的決策">Gate Decision</a></td>
          <td>gate 如何把證據轉成下一步決策</td>
          <td>release gate、rollout</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rollback-rehearsal/" data-link-title="Rollback Rehearsal" data-link-desc="說明如何在正式事故前演練回滾流程">Rollback Rehearsal</a></td>
          <td>回滾流程如何在正式事故前演練</td>
          <td>rollback strategy、migration</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rollback-window/" data-link-title="Rollback Window" data-link-desc="說明變更進入 production 後還能用哪種方式回退或改路線的時間與條件">Rollback Window</a></td>
          <td>變更後還能用哪種方式回退或改路線</td>
          <td>cutover、rollback strategy</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rollback-condition/" data-link-title="Rollback Condition" data-link-desc="說明決策執行後出現哪些訊號時要撤回、回退或改路線">Rollback Condition</a></td>
          <td>決策後何時要撤回、回退或改路線</td>
          <td>incident decision、rollback</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/fail-forward/" data-link-title="Fail-forward" data-link-desc="說明無法回到舊狀態時如何用受控前進完成修復">Fail-forward</a></td>
          <td>舊狀態已失效時如何受控前進修復</td>
          <td>rollback window、incident decision</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/stop-condition/" data-link-title="Stop Condition" data-link-desc="說明變更、實驗或事故處理何時必須暫停、回退或改路線">Stop Condition</a></td>
          <td>何時必須暫停、回退或改路線</td>
          <td>release gate、incident decision</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/isolation-level/" data-link-title="Isolation Level" data-link-desc="說明資料庫交易隔離級別如何影響並發讀寫結果">Isolation Level</a></td>
          <td>並發交易彼此看見哪些資料</td>
          <td>transaction、lock、retry</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/connection-pool/" data-link-title="Connection Pool" data-link-desc="說明連線池如何限制下游資源並影響服務容量">Connection Pool</a></td>
          <td>application 如何限制下游連線壓力</td>
          <td>database、Redis、broker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/database-sharding/" data-link-title="Database Sharding" data-link-desc="說明資料庫如何依 shard key 分散資料、路由請求與承擔跨 shard 查詢成本">Database Sharding</a></td>
          <td>資料庫如何依 shard key 分散與路由</td>
          <td>Vitess、Citus、tenant key</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/write-ahead-log/" data-link-title="Write-Ahead Log" data-link-desc="說明資料庫如何先寫入 log 再合併回主資料，以提供持久性與崩潰復原">Write-Ahead Log</a></td>
          <td>寫入如何先記 log 再合併以支援復原</td>
          <td>WAL、checkpoint、recovery</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/single-writer-model/" data-link-title="Single Writer Model" data-link-desc="說明單寫者模型如何序列化寫入，並成為系統的容量邊界">Single Writer Model</a></td>
          <td>寫入如何被序列化成單一路徑</td>
          <td>SQLite、primary lease、容量上限</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/embedded-database/" data-link-title="Embedded Database" data-link-desc="說明嵌入式資料庫如何隨 application process 運作，並把檔案生命週期責任交回應用">Embedded Database</a></td>
          <td>資料庫如何隨 application process 運作</td>
          <td>SQLite、檔案生命週期、本地儲存</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/metadata-lock/" data-link-title="Metadata Lock" data-link-desc="說明 DDL 與既有交易如何在 table metadata 層互相排隊與阻塞">Metadata Lock</a></td>
          <td>DDL 與既有交易如何在 schema 層互相阻塞</td>
          <td>ALTER、長交易、DDL window</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/table-partitioning/" data-link-title="Table Partitioning" data-link-desc="說明單一資料庫內如何把大表拆成多個分區，並由查詢規劃器只掃相關片段">Table Partitioning</a></td>
          <td>大表如何在單庫內拆成多個分區</td>
          <td>range/list/hash、pruning、retention</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/read-write-split/" data-link-title="Read-Write Split" data-link-desc="說明讀寫流量如何分流到 primary 與 replica，以及它引入的一致性責任">Read-Write Split</a></td>
          <td>讀寫流量如何分流到 primary 與 replica</td>
          <td>proxy、replica lag、read-after-write</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/transaction-pooling/" data-link-title="Transaction Pooling" data-link-desc="說明 connection pooler 的 transaction 綁定模式如何壓縮連線並改變 session 語意">Transaction Pooling</a></td>
          <td>連線如何只綁定單一 transaction</td>
          <td>pooler、session state、SET LOCAL</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/document-store/" data-link-title="Document Store" data-link-desc="說明以 JSON 文件與彈性 schema 提供資料存取的模式，以及它仍需的治理邊界">Document Store</a></td>
          <td>資料如何以 JSON 文件與彈性 schema 存取</td>
          <td>JSON、巢狀結構、index</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/local-first/" data-link-title="Local-First" data-link-desc="說明本機優先的資料架構如何讓離線可用，並把同步當成獨立問題">Local-First</a></td>
          <td>資料如何本機優先並離線可用</td>
          <td>離線、多端同步、行動 app</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/read-after-write/" data-link-title="Read-After-Write Consistency" data-link-desc="說明寫入後能否立即讀到該筆寫入的一致性保證">Read-After-Write Consistency</a></td>
          <td>寫入後能否立即讀到該筆寫入</td>
          <td>primary、lag guard、session</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/type-affinity/" data-link-title="Type Affinity" data-link-desc="說明 SQLite 如何用 type affinity 決定欄位的型別傾向與值的儲存方式">Type Affinity</a></td>
          <td>SQLite 欄位型別如何是傾向而非硬約束</td>
          <td>SQLite、storage class、STRICT</td>
      </tr>
  </tbody>
</table>
<h2 id="快取與流量">快取與流量</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/timeout/" data-link-title="Timeout" data-link-desc="說明等待外部操作的時間上限如何保護資源與使用者體驗">Timeout</a></td>
          <td>單一步驟最久可以等待多久</td>
          <td>API、database、broker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/deadline/" data-link-title="Deadline" data-link-desc="說明整體操作的截止時間如何沿著服務邊界傳遞">Deadline</a></td>
          <td>整體操作何時必須完成</td>
          <td>request、job、workflow</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/exponential-backoff/" data-link-title="Exponential Backoff" data-link-desc="說明重試間隔如何逐步拉長以降低下游壓力">Exponential Backoff</a></td>
          <td>重試間隔如何逐步拉長</td>
          <td>retry、API、worker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/jitter/" data-link-title="Jitter" data-link-desc="說明重試或排程加入隨機偏移如何降低同步尖峰">Jitter</a></td>
          <td>如何分散同步重試與排程尖峰</td>
          <td>retry、TTL、reconnect</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/retry-storm/" data-link-title="Retry Storm" data-link-desc="說明大量重試如何把局部故障放大成系統壓力">Retry Storm</a></td>
          <td>大量重試如何放大下游壓力</td>
          <td>timeout、dependency failure</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/thundering-herd/" data-link-title="Thundering Herd" data-link-desc="說明大量工作同時被喚醒或同時競爭資源時的尖峰風險">Thundering Herd</a></td>
          <td>大量工作同時醒來如何形成尖峰</td>
          <td>reconnect、cache、lock</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/transient-failure/" data-link-title="Transient Failure" data-link-desc="說明暫時性故障如何影響重試、告警與使用者回應">Transient Failure</a></td>
          <td>暫時性故障如何影響重試與告警</td>
          <td>network、failover、timeout</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/partial-failure/" data-link-title="Partial Failure" data-link-desc="說明分散式系統中部分依賴失效時如何保留整體可用性">Partial Failure</a></td>
          <td>局部失效時如何保留整體可用性</td>
          <td>distributed system、fallback</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cascading-failure/" data-link-title="Cascading Failure" data-link-desc="說明局部故障如何透過等待、重試與資源耗盡擴散到整個系統">Cascading Failure</a></td>
          <td>局部故障如何擴散成整體故障</td>
          <td>dependency、retry、pool</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/load-shedding/" data-link-title="Load Shedding" data-link-desc="說明服務過載時如何主動拒絕低優先工作以保護核心能力">Load Shedding</a></td>
          <td>過載時如何主動拒絕低優先工作</td>
          <td>overload、priority</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/token-bucket/" data-link-title="Token Bucket" data-link-desc="說明 token bucket 如何用配額與補充速率控制流量">Token Bucket</a></td>
          <td>如何用配額與補充速率控制流量</td>
          <td>rate limit、retry budget</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/dependency-isolation/" data-link-title="Dependency Isolation" data-link-desc="說明如何隔離下游依賴，避免單一依賴耗盡共享資源">Dependency Isolation</a></td>
          <td>如何避免單一下游耗盡共享資源</td>
          <td>pool、queue、dependency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/bulkhead/" data-link-title="Bulkhead" data-link-desc="說明 bulkhead 如何用資源分艙限制故障擴散">Bulkhead</a></td>
          <td>如何用資源分艙限制故障擴散</td>
          <td>worker、tenant、pool</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/in-process-channel/" data-link-title="In-Process Channel" data-link-desc="說明單一 process 內用來傳遞工作的 channel 或 queue abstraction">In-Process Channel</a></td>
          <td>單一 process 內如何傳遞工作或訊號</td>
          <td>channel、local queue</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/local-worker/" data-link-title="Local Worker" data-link-desc="說明同一個 process 內的背景工作模型與其生命週期邊界">Local Worker</a></td>
          <td>同 process 背景工作的責任與邊界</td>
          <td>background task、shutdown</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/worker-pool/" data-link-title="Worker Pool" data-link-desc="說明一組 worker 如何限制同時處理量並保護下游資源">Worker Pool</a></td>
          <td>如何限制同時處理量</td>
          <td>worker、background job</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/http-client/" data-link-title="HTTP Client" data-link-desc="說明服務呼叫外部 HTTP 依賴時需要管理 timeout、連線與重試">HTTP Client</a></td>
          <td>呼叫外部 HTTP 依賴時如何管理資源</td>
          <td>API、dependency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/webhook/" data-link-title="Webhook" data-link-desc="說明外部系統回呼事件的接收、驗證與處理邊界">Webhook</a></td>
          <td>外部系統回呼事件如何驗證與處理</td>
          <td>callback、signature、retry</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/websocket/" data-link-title="WebSocket" data-link-desc="說明 WebSocket 如何提供長連線雙向即時通訊">WebSocket</a></td>
          <td>長連線雙向即時通訊如何運作</td>
          <td>chat、presence、push</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/sse/" data-link-title="Server-Sent Events (SSE)" data-link-desc="說明 SSE 如何透過 HTTP 長連線向 client 單向推送事件">Server-Sent Events (SSE)</a></td>
          <td>HTTP 單向事件串流如何推送更新</td>
          <td>notification、progress</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/stream-pipeline/" data-link-title="Stream Pipeline" data-link-desc="說明連續資料流經多個處理階段時如何管理吞吐、順序與 backpressure ">Stream Pipeline</a></td>
          <td>連續資料流如何管理吞吐與 backpressure</td>
          <td>stream、CDC、ETL</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/throughput/" data-link-title="Throughput" data-link-desc="整理系統單位時間內可處理的工作量">Throughput</a></td>
          <td>單位時間內可處理多少工作</td>
          <td>load test、queue、broker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/buffer/" data-link-title="Buffer" data-link-desc="說明系統如何用暫存空間吸收短暫速度差與尖峰流量">Buffer</a></td>
          <td>暫存空間如何吸收短暫速度差</td>
          <td>queue、socket、cache</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/queue/" data-link-title="Queue" data-link-desc="說明 queue 如何保存等待處理的工作並形成容量邊界">Queue</a></td>
          <td>等待處理的工作如何形成容量邊界</td>
          <td>producer、consumer、backlog</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/socket/" data-link-title="Socket" data-link-desc="說明 network socket 如何成為 application 與網路之間的資料傳輸邊界">Socket</a></td>
          <td>網路連線如何成為資料讀寫與資源邊界</td>
          <td>network、connection、timeout</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/fallback/" data-link-title="Fallback" data-link-desc="說明主要路徑失敗時使用替代結果或替代流程的設計責任">Fallback</a></td>
          <td>主要路徑失敗時使用什麼替代結果</td>
          <td>degradation、circuit breaker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/fail-fast/" data-link-title="Fail Fast" data-link-desc="說明已知無法完成時快速回應如何保護資源與上游判斷">Fail Fast</a></td>
          <td>已知會失敗時如何快速回應</td>
          <td>circuit breaker、validation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/retry-budget/" data-link-title="Retry Budget" data-link-desc="說明重試次數如何受整體容量與錯誤預算限制">Retry Budget</a></td>
          <td>重試量如何受整體容量限制</td>
          <td>retry、SLO、token bucket</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-aside/" data-link-title="Cache Aside" data-link-desc="說明 application 如何在讀取時自行管理快取與正式資料來源">Cache Aside</a></td>
          <td>application 如何讀快取與正式來源</td>
          <td>Redis、read path</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-hit-miss/" data-link-title="Cache Hit / Miss" data-link-desc="說明快取命中與未命中如何影響讀取成本與下游壓力">Cache Hit / Miss</a></td>
          <td>讀取是否命中快取</td>
          <td>cache、database pressure</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-hit-rate/" data-link-title="Cache Hit Rate" data-link-desc="說明快取命中比例如何衡量加速效果與下游保護">Cache Hit Rate</a></td>
          <td>命中比例如何衡量快取效益</td>
          <td>dashboard、capacity</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-warmup/" data-link-title="Cache Warmup" data-link-desc="說明服務啟動或活動前如何預先建立快取資料">Cache Warmup</a></td>
          <td>正式流量前如何預先載入快取</td>
          <td>deployment、event</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-prefetching/" data-link-title="Cache Prefetching" data-link-desc="說明系統如何在資料被需要前預先載入快取">Cache Prefetching</a></td>
          <td>如何在資料被需要前預先載入</td>
          <td>user flow、hot data</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cold-start/" data-link-title="Cold Start" data-link-desc="說明服務或快取剛啟動時尚未累積狀態造成的延遲與壓力">Cold Start</a></td>
          <td>新 instance 或空快取如何造成延遲</td>
          <td>autoscaling、readiness</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/write-through-cache/" data-link-title="Write-Through Cache" data-link-desc="說明寫入時同步更新快取與正式來源的策略">Write-Through Cache</a></td>
          <td>寫入時如何同步更新快取</td>
          <td>write path、freshness</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/write-behind-cache/" data-link-title="Write-Behind Cache" data-link-desc="說明先寫快取再非同步寫入正式來源的風險與用途">Write-Behind Cache</a></td>
          <td>先寫緩衝層再非同步持久化的風險</td>
          <td>analytics、buffer</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/stale-data/" data-link-title="Stale Data" data-link-desc="說明過期資料在快取、replica 與衍生資料中的產品影響">Stale Data</a></td>
          <td>過期資料如何影響產品結果</td>
          <td>cache、replica</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/soft-ttl/" data-link-title="Soft TTL" data-link-desc="說明資料進入刷新期後仍可短暫使用以降低 stampede">Soft TTL</a></td>
          <td>進入刷新期後如何短暫使用舊資料</td>
          <td>stampede、refresh</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/singleflight/" data-link-title="Singleflight" data-link-desc="說明相同工作同時發生時如何合併成一次下游請求">Singleflight</a></td>
          <td>相同工作如何合併成一次下游請求</td>
          <td>cache miss、hot key</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/ttl/" data-link-title="TTL" data-link-desc="說明資料過期時間如何影響快取新鮮度、成本與一致性">TTL</a></td>
          <td>資料何時自動過期</td>
          <td>cache、session、presence</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/eviction/" data-link-title="Eviction" data-link-desc="說明快取容量不足時哪些資料會被淘汰，以及淘汰如何影響服務">Eviction</a></td>
          <td>容量不足時哪些資料會被淘汰</td>
          <td>Redis、local cache、CDN</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-invalidation/" data-link-title="Cache Invalidation" data-link-desc="說明快取資料何時更新、刪除或重建，以及失效策略如何影響一致性">快取失效策略</a></td>
          <td>快取資料何時更新、刪除或重建</td>
          <td>Redis、CDN、多層快取</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/hot-key/" data-link-title="Hot Key" data-link-desc="說明單一 key 承受大量讀寫時如何形成容量瓶頸">Hot Key</a></td>
          <td>少數 key 如何形成容量瓶頸</td>
          <td>Redis、partition、counter</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cache-stampede/" data-link-title="Cache Stampede" data-link-desc="說明快取同時失效時大量 request 如何壓垮正式來源">Cache Stampede</a></td>
          <td>快取同時 miss 如何壓垮正式來源</td>
          <td>hot key、TTL、database</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rate-limit/" data-link-title="Rate Limit" data-link-desc="說明限流如何保護服務入口、下游依賴與租戶公平性">Rate Limit</a></td>
          <td>如何限制主體在一段時間內的資源使用量</td>
          <td>API、tenant、worker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/backpressure/" data-link-title="Backpressure" data-link-desc="說明下游處理速度不足時系統如何讓上游依下游能力送出工作">Backpressure</a></td>
          <td>下游變慢時如何讓上游放慢</td>
          <td>queue、worker、stream</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/buffer-pool/" data-link-title="Buffer Pool" data-link-desc="說明資料庫如何用記憶體快取磁碟頁，以降低 I/O 並影響查詢效能">Buffer Pool</a></td>
          <td>資料庫如何用記憶體快取磁碟頁</td>
          <td>InnoDB、shared buffers、命中率</td>
      </tr>
  </tbody>
</table>
<h2 id="入口與部署">入口與部署</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/endpoint/" data-link-title="Service Endpoint" data-link-desc="說明服務如何對外暴露可被路由與存取的入口">Service Endpoint</a></td>
          <td>服務入口如何被路由與存取</td>
          <td>API、service discovery、internal</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/public-api-endpoint/" data-link-title="Public API Endpoint" data-link-desc="說明面向外部 client 的穩定 API 入口如何被管理">Public API Endpoint</a></td>
          <td>面向 client 的穩定對外入口</td>
          <td>product API、SDK、client</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/api-gateway/" data-link-title="API Gateway" data-link-desc="說明外部流量如何先收斂到一層可集中控制的入口">API Gateway</a></td>
          <td>外部流量如何集中路由、驗證與轉發</td>
          <td>auth、rate limit、routing、request id</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/request-routing/" data-link-title="Request Routing" data-link-desc="說明入口流量如何依規則被導向不同服務或處理路徑">Request Routing</a></td>
          <td>入口流量如何分派到不同服務或版本</td>
          <td>host、path、tenant、version</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/admin-endpoint/" data-link-title="Admin Endpoint" data-link-desc="說明管理入口如何承擔高權限操作與稽核責任">Admin Endpoint</a></td>
          <td>高權限管理入口如何被隔離與稽核</td>
          <td>admin、backoffice、control plane</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/diagnostic-endpoint/" data-link-title="Diagnostic Endpoint" data-link-desc="說明健康檢查、診斷與調試入口如何控制暴露面">Diagnostic Endpoint</a></td>
          <td>health、readiness 與 debug 入口</td>
          <td>liveness、probe、metrics snapshot</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/internal-endpoint/" data-link-title="Internal Endpoint" data-link-desc="說明服務內部通訊入口如何配合網路邊界與服務發現">Internal Endpoint</a></td>
          <td>服務內部通訊入口如何受控</td>
          <td>service-to-service、control plane</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/container/" data-link-title="Container" data-link-desc="說明容器如何包裝服務、隔離依賴與影響部署方式">Container</a></td>
          <td>服務如何被包裝成可交付單位</td>
          <td>image、runtime、CI、Kubernetes</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/load-balancer/" data-link-title="Load Balancer" data-link-desc="說明流量如何分散、排空與導向健康節點">Load Balancer</a></td>
          <td>流量如何分散、排空與導向健康節點</td>
          <td>ingress、draining、rolling update</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/draining/" data-link-title="Draining" data-link-desc="說明服務如何先停止接收新流量，再讓既有工作完成">Draining</a></td>
          <td>服務如何先停新流量再完成既有工作</td>
          <td>rolling update、shutdown、cutover</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/sticky-session/" data-link-title="Sticky Session" data-link-desc="說明同一 client 如何在一段時間內持續命中同一個後端實例">Sticky Session</a></td>
          <td>同一 client 如何維持命中同一實例</td>
          <td>session affinity、load balancer</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/idle-timeout/" data-link-title="Idle Timeout" data-link-desc="說明連線或會話在多久沒有活動後應該被回收">Idle Timeout</a></td>
          <td>連線或會話多久沒活動後要回收</td>
          <td>socket、load balancer、proxy</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/health-check/" data-link-title="Health Check" data-link-desc="說明服務如何對外提供可供平台判斷狀態的健康回應">Health Check</a></td>
          <td>平台如何快速判斷服務狀態</td>
          <td>load balancer、probe、diagnostic</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/resource-limit/" data-link-title="Resource Limit" data-link-desc="說明服務可使用的 CPU、memory 與相關資源上限如何影響行為">Resource Limit</a></td>
          <td>服務可用的 CPU / memory 上限如何影響行為</td>
          <td>container、scheduler、runtime</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/probe/" data-link-title="Probe" data-link-desc="說明平台如何透過 probe 判斷服務狀態與接流量條件">Probe</a></td>
          <td>平台如何判斷存活與接流量條件</td>
          <td>readiness、liveness、startup</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/config-rollout/" data-link-title="Config Rollout" data-link-desc="說明設定如何安全下發到正在運作的服務實例">Config Rollout</a></td>
          <td>設定如何安全下發到運作中的服務實例</td>
          <td>feature flag、secret、runtime config</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/runtime-config/" data-link-title="Runtime Config" data-link-desc="說明服務在啟動與執行時如何讀取與組合設定">Runtime Config</a></td>
          <td>執行時設定如何被讀取、組合與覆寫</td>
          <td>env var、secret、feature flag</td>
      </tr>
  </tbody>
</table>
<h2 id="通訊協定">通訊協定</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/protocol/" data-link-title="Communication Protocol" data-link-desc="說明不同系統如何對齊資料交換與錯誤語意">Communication Protocol</a></td>
          <td>不同系統如何對齊資料交換與錯誤語意</td>
          <td>request/response、message、webhook</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/request-response-protocol/" data-link-title="Request/Response Protocol" data-link-desc="說明同步請求如何在 client 與 service 之間對齊互動規則">Request/Response Protocol</a></td>
          <td>同步呼叫如何對齊互動規則</td>
          <td>HTTP API、gRPC、RPC</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/message-protocol/" data-link-title="Message Protocol" data-link-desc="說明 queue 或 stream message 如何對齊格式與處理語意">Message Protocol</a></td>
          <td>queue / stream 訊息如何對齊格式與語意</td>
          <td>event、job、delivery</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/webhook-protocol/" data-link-title="Webhook Protocol" data-link-desc="說明外部回呼如何對齊簽章、重試與 payload 語意">Webhook Protocol</a></td>
          <td>外部回呼如何對齊簽章與 payload</td>
          <td>callback、signature、retry</td>
      </tr>
  </tbody>
</table>
<h2 id="邊界與治理">邊界與治理</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/contract/" data-link-title="Boundary Contract" data-link-desc="說明跨邊界約定如何維持相容與可驗證">Boundary Contract</a></td>
          <td>邊界兩端如何維持一致約定</td>
          <td>API contract、deployment contract、queue contract、load balancer contract</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/api-contract/" data-link-title="API Contract" data-link-desc="說明 request / response 邊界如何維持相容與可驗證">API Contract</a></td>
          <td>request / response 如何維持相容</td>
          <td>client、SDK、public API</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/deployment-contract/" data-link-title="Deployment Contract" data-link-desc="說明服務與部署平台之間的生命週期約定">Deployment Contract</a></td>
          <td>application 與 platform 如何對齊生命週期</td>
          <td>readiness、shutdown、rollout</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/queue-contract/" data-link-title="Queue Contract" data-link-desc="說明佇列工作在重試、確認與重複投遞上的約定">Queue Contract</a></td>
          <td>producer / broker / consumer 如何對齊交付語意</td>
          <td>ack、retry、DLQ、redelivery</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/load-balancer-contract/" data-link-title="Load Balancer Contract" data-link-desc="說明服務與負載平衡器之間的流量與健康檢查約定">Load Balancer Contract</a></td>
          <td>服務與流量入口如何對齊健康與切流</td>
          <td>health check、draining、idle timeout</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/adapter/" data-link-title="Integration Adapter" data-link-desc="說明外部系統接入層如何轉換介面與隔離差異">Integration Adapter</a></td>
          <td>外部系統如何轉成內部需要的形狀</td>
          <td>repository、payment、notification</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/repository-adapter/" data-link-title="Repository Adapter" data-link-desc="說明持久化層如何把資料模型轉成外部儲存介面">Repository Adapter</a></td>
          <td>持久化存取如何對齊應用模型</td>
          <td>SQL、transaction、row mapping</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/provider-adapter/" data-link-title="Provider Adapter" data-link-desc="說明第三方服務如何被包裝成內部穩定介面">Provider Adapter</a></td>
          <td>第三方服務如何被包裝成穩定介面</td>
          <td>payment、email、SMS、storage</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/notification-adapter/" data-link-title="Notification Adapter" data-link-desc="說明通知通道如何把 domain event 轉成外部傳遞格式">Notification Adapter</a></td>
          <td>通知通道如何轉成外部發送格式</td>
          <td>email、push、webhook</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/middleware/" data-link-title="Request Middleware" data-link-desc="說明請求處理鏈中的共通攔截與前後置處理">Request Middleware</a></td>
          <td>共通請求處理如何放在邊界上</td>
          <td>auth、logging、tracing、validation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/authentication-middleware/" data-link-title="Authentication Middleware" data-link-desc="說明請求進入 handler 前如何完成身份驗證">Authentication Middleware</a></td>
          <td>請求進入前如何驗證身份</td>
          <td>token、session、signature</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/authorization-middleware/" data-link-title="Authorization Middleware" data-link-desc="說明請求進入 handler 前如何完成權限判斷">Authorization Middleware</a></td>
          <td>請求進入前如何判斷權限</td>
          <td>role、tenant、resource owner</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/observability-middleware/" data-link-title="Observability Middleware" data-link-desc="說明請求進入 handler 前後如何補上觀測欄位">Observability Middleware</a></td>
          <td>請求如何補上觀測欄位</td>
          <td>request id、trace context</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/security-middleware/" data-link-title="Security Middleware" data-link-desc="說明請求進入 handler 前如何完成共通安全控制">Security Middleware</a></td>
          <td>請求如何套用共通安全控制</td>
          <td>rate limit、redaction</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/validation-middleware/" data-link-title="Validation Middleware" data-link-desc="說明請求進入 handler 前如何完成共通驗證">Validation Middleware</a></td>
          <td>請求如何先做共通驗證</td>
          <td>schema、header、payload shape</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/vendor-lock-in/" data-link-title="Vendor Lock-In" data-link-desc="說明採用供應商產品後，其 API 與格式滲入程式碼造成的退出成本">Vendor Lock-In</a></td>
          <td>供應商 API 滲入程式碼如何造成退出成本</td>
          <td>adapter、exit route、選型</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/capability-outsourcing-depth/" data-link-title="Capability Outsourcing Depth（外包深度）" data-link-desc="說明外包一塊後端能力有三種深度（managed 基礎設施、feature SaaS、BaaS bundle）、深度決定保留多少控制權與遷出代價">Capability Outsourcing Depth</a></td>
          <td>外包一塊能力的三種深度如何決定控制權與遷出代價</td>
          <td>managed 基礎設施、feature SaaS、BaaS bundle</td>
      </tr>
  </tbody>
</table>
<h2 id="訊息與事件">訊息與事件</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/broker/" data-link-title="Broker" data-link-desc="說明 broker 在訊息傳遞系統中負責保存、路由與交付訊息">Broker</a></td>
          <td>訊息離開單一 process 後由誰保存、路由與交付</td>
          <td>queue、event、worker、stream</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/topic/" data-link-title="Topic" data-link-desc="說明 topic 如何把事件依主題分流給不同訂閱者">Topic</a></td>
          <td>事件如何依主題分流給不同訂閱者</td>
          <td>broker、event、stream</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/pub-sub/" data-link-title="Pub/Sub" data-link-desc="說明 publish-subscribe 如何把事件即時分發給多個訂閱者">Pub/Sub</a></td>
          <td>訊息如何即時分發給多個訂閱者</td>
          <td>realtime、notification、broadcast</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/fan-out/" data-link-title="Fan-out" data-link-desc="說明單一事件同時分發給多個下游的訊息拓撲">Fan-out</a></td>
          <td>單一事件如何同時送到多個下游</td>
          <td>topic、subscription、event flow</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/durable-queue/" data-link-title="Durable Queue" data-link-desc="說明可持久化的 queue 如何在重啟與失敗後保留待處理工作">Durable Queue</a></td>
          <td>工作如何在故障後仍可被處理</td>
          <td>persistence、ack/nack、retry</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/reliability-boundary/" data-link-title="Reliability Boundary" data-link-desc="說明系統在哪個邊界內承諾可靠傳遞，邊界外需要哪些補償機制">Reliability Boundary</a></td>
          <td>系統在哪些邊界內承諾可恢復傳遞</td>
          <td>request、process、service boundary</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/offline-catchup/" data-link-title="Offline Catch-up" data-link-desc="說明訂閱者離線後如何補回缺失事件或狀態">Offline Catch-up</a></td>
          <td>離線期間漏失事件如何補齊</td>
          <td>websocket、sync、reconnect</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/strong-reliability/" data-link-title="Strong Reliability" data-link-desc="說明高可靠事件路徑需要的保存、重試、去重與回復責任">Strong Reliability</a></td>
          <td>關鍵事件如何達到高可靠路徑</td>
          <td>payment、inventory、audit</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/routing-rule/" data-link-title="Routing Rule" data-link-desc="說明訊息系統如何依規則把訊息送到不同處理路徑">Routing Rule</a></td>
          <td>訊息如何依規則進入不同處理路徑</td>
          <td>broker、queue、priority</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/producer/" data-link-title="Producer" data-link-desc="說明 producer 如何把工作、事件或資料送入後續處理路徑">Producer</a></td>
          <td>誰把工作、事件或資料送入處理路徑</td>
          <td>queue、broker、stream</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/consumer/" data-link-title="Consumer" data-link-desc="說明 consumer 如何取得等待處理的工作並產生業務結果">Consumer</a></td>
          <td>誰取得等待處理的工作並產生結果</td>
          <td>queue、worker、side effect</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/prefetch/" data-link-title="Prefetch" data-link-desc="說明 consumer 一次取得多少未完成訊息，以及它如何影響吞吐與公平性">Prefetch</a></td>
          <td>consumer 一次可持有多少未確認訊息</td>
          <td>broker、consumer tuning</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/in-flight-message/" data-link-title="In-Flight Message" data-link-desc="說明已交給 consumer 但尚未完成確認的訊息狀態">In-Flight Message</a></td>
          <td>訊息已交給 consumer 但尚未完成</td>
          <td>consumer、shutdown</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/unacked-message/" data-link-title="Unacked Message" data-link-desc="說明 broker 已投遞但尚未收到 consumer 確認的訊息">Unacked Message</a></td>
          <td>broker 尚未收到 consumer 確認的訊息</td>
          <td>queue health、prefetch</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/ack-nack/" data-link-title="Ack / Nack" data-link-desc="說明 consumer 如何向 broker 回報訊息處理結果">Ack / Nack</a></td>
          <td>consumer 如何回報處理結果</td>
          <td>broker、retry、DLQ</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/redelivery/" data-link-title="Redelivery" data-link-desc="說明 broker 重新投遞訊息時 consumer 需要承擔的重入責任">Redelivery</a></td>
          <td>broker 重新投遞訊息時如何保持安全</td>
          <td>at-least-once、idempotency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/requeue/" data-link-title="Requeue" data-link-desc="說明處理失敗的訊息重新排回 queue 時的風險與控制條件">Requeue</a></td>
          <td>處理失敗訊息如何重新排回 queue</td>
          <td>retry、nack</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/redelivery-loop/" data-link-title="Redelivery Loop" data-link-desc="說明同一訊息反覆投遞失敗如何消耗 consumer 容量">Redelivery Loop</a></td>
          <td>同一訊息反覆投遞失敗如何消耗容量</td>
          <td>poison message、DLQ</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/poison-message/" data-link-title="Poison Message" data-link-desc="說明特定訊息內容如何穩定造成 consumer 失敗">Poison Message</a></td>
          <td>特定訊息內容如何穩定造成失敗</td>
          <td>DLQ、schema</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/queue-depth/" data-link-title="Queue Depth" data-link-desc="說明 queue 中等待處理的訊息數如何反映 backlog 與容量壓力">Queue Depth</a></td>
          <td>queue 中等待處理的訊息數</td>
          <td>backlog、capacity</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/publisher-confirm/" data-link-title="Publisher Confirm" data-link-desc="說明 producer 如何確認 broker 已接收並承擔訊息">Publisher Confirm</a></td>
          <td>producer 如何確認 broker 已接收訊息</td>
          <td>publish、outbox</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/message-persistence/" data-link-title="Message Persistence" data-link-desc="說明訊息是否落盤保存，以及 broker 重啟後能否恢復">Message Persistence</a></td>
          <td>訊息是否落盤保存</td>
          <td>durability、cost</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/delivery-mode/" data-link-title="Delivery Mode" data-link-desc="說明訊息投遞模式如何影響可靠性、延遲與成本">Delivery Mode</a></td>
          <td>投遞模式如何影響可靠性與延遲</td>
          <td>broker、event semantics</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/delivery-semantics/" data-link-title="Delivery Semantics" data-link-desc="說明事件投遞語意如何定義遺失、重複、順序與補償策略">Delivery Semantics</a></td>
          <td>事件投遞承諾如何決定補償策略</td>
          <td>retry、idempotency、replay</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/consumer-capacity/" data-link-title="Consumer Capacity" data-link-desc="說明 consumer 群組每秒能穩定處理多少工作">Consumer Capacity</a></td>
          <td>consumer 群組每秒能處理多少工作</td>
          <td>lag、scaling</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/competing-consumers/" data-link-title="Competing Consumers" data-link-desc="說明多個 consumer 共同處理同一個 queue 如何提高吞吐與影響順序">Competing Consumers</a></td>
          <td>多個 consumer 如何共同處理同一 queue</td>
          <td>worker、throughput</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/consumer-group/" data-link-title="Consumer Group" data-link-desc="說明一組 consumer 如何共同分攤 stream 或 topic 的處理責任">Consumer Group</a></td>
          <td>多個 consumer 如何共同分攤 stream</td>
          <td>Kafka、Redis Streams</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/partition/" data-link-title="Partition" data-link-desc="說明事件流如何切分成多個可並行處理的有序片段">Partition</a></td>
          <td>事件流如何切成可並行處理片段</td>
          <td>ordering、hot key</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/offset/" data-link-title="Offset" data-link-desc="說明 consumer 在事件流中的讀取位置與重放基準">Offset</a></td>
          <td>consumer 在事件流中的讀取位置</td>
          <td>replay、checkpoint</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/retention/" data-link-title="Retention" data-link-desc="說明資料或事件保留多久，以及保留期限如何影響重放與成本">Retention</a></td>
          <td>資料或事件保留多久</td>
          <td>stream、log、audit</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/retry-policy/" data-link-title="Retry Policy" data-link-desc="說明重試策略如何區分暫時性錯誤、永久錯誤與副作用風險">Retry Policy</a></td>
          <td>失敗後何時再試、何時停止</td>
          <td>timeout、broker、API</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/consumer-lag/" data-link-title="Consumer Lag" data-link-desc="說明 consumer lag 如何反映訊息堆積、處理能力與容量風險">Consumer Lag</a></td>
          <td>consumer 處理速度落後多少</td>
          <td>queue health、capacity、alert</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/dead-letter-queue/" data-link-title="Dead-Letter Queue" data-link-desc="說明 dead-letter queue 如何隔離多次處理失敗的訊息">Dead-Letter Queue</a></td>
          <td>多次處理失敗的訊息如何隔離與診斷</td>
          <td>retry、poison message、incident</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/replay-runbook/" data-link-title="Replay Runbook" data-link-desc="說明事件重放前需要控制的範圍、順序、驗證與副作用">Replay Runbook</a></td>
          <td>事件重放時如何控制範圍、順序與副作用</td>
          <td>migration、事故復原、補資料</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/duplicate-delivery/" data-link-title="Duplicate Delivery" data-link-desc="說明同一個訊息被處理多次時如何保持結果穩定">重複投遞</a></td>
          <td>同一個工作被處理多次時如何保持結果穩定</td>
          <td>at-least-once、idempotency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/idempotency/" data-link-title="Idempotency" data-link-desc="說明同一操作執行多次時如何保持結果一致">Idempotency</a></td>
          <td>同一操作多次執行時如何保持結果穩定</td>
          <td>retry、payment、worker</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/outbox-pattern/" data-link-title="Outbox Pattern" data-link-desc="說明資料庫狀態變更與事件發布如何透過 outbox 維持一致">Outbox Pattern</a></td>
          <td>資料變更與事件發布如何維持一致</td>
          <td>transaction、broker</td>
      </tr>
  </tbody>
</table>
<h2 id="遷移與資料同步">遷移與資料同步</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/online-migration/" data-link-title="Online Migration" data-link-desc="說明服務持續接流量時如何完成資料或 schema 遷移">Online Migration</a></td>
          <td>服務持續接流量時如何遷移資料</td>
          <td>database、release</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cutover-switchover/" data-link-title="Cutover / Switchover" data-link-desc="說明遷移期間如何把正式流量切到新路徑">Cutover / Switchover</a></td>
          <td>正式流量如何切到新路徑</td>
          <td>migration、feature flag</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/fallback-plan/" data-link-title="Fallback Plan" data-link-desc="說明變更失敗時如何回到可接受狀態">Fallback Plan</a></td>
          <td>變更失敗時如何回到可接受狀態</td>
          <td>release、migration</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/change-data-capture/" data-link-title="Change Data Capture" data-link-desc="說明資料變更如何被捕捉並傳送到其他系統">Change Data Capture</a></td>
          <td>資料變更如何被捕捉並傳送</td>
          <td>CDC、event stream</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/replication-lag/" data-link-title="Replication Lag" data-link-desc="說明資料副本落後正式來源多久，以及它如何影響讀取正確性">Replication Lag</a></td>
          <td>副本落後正式來源多久</td>
          <td>replica、read model</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/checkpoint/" data-link-title="Checkpoint" data-link-desc="說明長時間處理流程如何記錄可恢復進度">Checkpoint</a></td>
          <td>長流程如何記錄可恢復進度</td>
          <td>backfill、consumer</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/backfill/" data-link-title="Backfill" data-link-desc="說明如何為既有資料補上新欄位、新索引或新衍生狀態">Backfill</a></td>
          <td>既有資料如何補上新欄位或新狀態</td>
          <td>migration、repair</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/dual-write/" data-link-title="Dual Write" data-link-desc="說明同一變更同時寫入兩個系統時的一致性風險">Dual Write</a></td>
          <td>同一變更同時寫兩個系統的風險</td>
          <td>migration、split service</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/shadow-read/" data-link-title="Shadow Read" data-link-desc="說明正式讀取仍走舊路徑時如何暗中讀新路徑比對結果">Shadow Read</a></td>
          <td>正式讀舊路徑時如何暗中比對新路徑</td>
          <td>cutover、validation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/correctness-check/" data-link-title="Correctness Check" data-link-desc="說明遷移或重構期間如何驗證新舊結果是否符合規則">Correctness Check</a></td>
          <td>新舊結果如何依規則比對</td>
          <td>migration、refactor</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-completeness/" data-link-title="Data Completeness" data-link-desc="說明資料是否完整到足以支持查詢、遷移與決策">Data Completeness</a></td>
          <td>資料是否完整到足以支持目標用途</td>
          <td>migration、audit</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-reconciliation/" data-link-title="Data Reconciliation" data-link-desc="說明多個資料來源不一致時如何比對、修復與留下證據">Data Reconciliation</a></td>
          <td>多來源差異如何比對與修復</td>
          <td>payment、eventual consistency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/replication-slot/" data-link-title="Replication Slot" data-link-desc="說明邏輯複製如何用 slot 追蹤消費進度，並對來源端造成保留壓力">Replication Slot</a></td>
          <td>邏輯複製如何追蹤進度並保留 WAL</td>
          <td>CDC、slot lag、磁碟壓力</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/conflict-resolution/" data-link-title="Conflict Resolution" data-link-desc="說明並發或離線寫入產生衝突時，如何偵測、呈現與合併成可接受狀態">Conflict Resolution</a></td>
          <td>並發或離線寫入衝突如何合併</td>
          <td>LWW、欄位合併、CRDT</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/logical-replication/" data-link-title="Logical Replication" data-link-desc="說明以表為粒度解碼 row-level 變更的複製方式，對照 byte-level 的實體複製">Logical Replication</a></td>
          <td>row-level 變更如何以表為粒度複製</td>
          <td>physical、CDC、跨版本</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/replica-identity/" data-link-title="Replica Identity" data-link-desc="說明 row-level 變更事件如何帶穩定 key，讓下游能正確套用 update 與 delete">Replica Identity</a></td>
          <td>變更事件如何帶穩定 key 以套用 update/delete</td>
          <td>CDC、primary key、row image</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/gtid/" data-link-title="GTID" data-link-desc="說明全域交易識別碼如何讓複製進度與故障切換不依賴實體 log 位置">GTID</a></td>
          <td>複製進度如何用全域交易識別碼表示</td>
          <td>replication、failover、binlog</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/replication-channel/" data-link-title="Replication Channel" data-link-desc="說明多來源複製中，每個來源對應的獨立複製通道如何成為隔離單位">Replication Channel</a></td>
          <td>多來源複製如何用獨立通道隔離</td>
          <td>multi-source、per-channel lag</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/tombstone/" data-link-title="Tombstone" data-link-desc="說明刪除如何用一筆標記記錄下來，讓刪除事件能跨副本與裝置傳播">Tombstone</a></td>
          <td>刪除如何用標記跨副本與裝置傳播</td>
          <td>delete propagation、sync、CRDT</td>
      </tr>
  </tbody>
</table>
<h2 id="可觀測性與可靠性">可觀測性與可靠性</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/log/" data-link-title="Log" data-link-desc="說明 log 如何記錄單一事件的上下文並支援事故排查">Log</a></td>
          <td>單一事件如何留下可搜尋的上下文</td>
          <td>incident、debug、audit</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/log-schema/" data-link-title="Log Schema" data-link-desc="說明結構化 log 欄位如何支援搜尋、關聯與事故排查">Log Schema</a></td>
          <td>log 欄位如何支援搜尋與關聯</td>
          <td>structured log、incident</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/metrics/" data-link-title="Metrics" data-link-desc="說明指標如何描述服務趨勢、容量與健康狀態">Metrics</a></td>
          <td>指標如何描述趨勢、容量與健康</td>
          <td>Prometheus、dashboard</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/histogram/" data-link-title="Histogram" data-link-desc="說明 histogram 如何用分桶統計延遲、大小與分布">Histogram</a></td>
          <td>如何用分桶統計延遲與分布</td>
          <td>latency、SLO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/bucket/" data-link-title="Bucket" data-link-desc="說明 histogram 分桶如何決定觀測解析度與成本">Bucket</a></td>
          <td>histogram 分桶如何影響解析度</td>
          <td>metrics、cost</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/percentile/" data-link-title="Percentile" data-link-desc="說明 p95 與 p99 如何描述長尾延遲與使用者體驗">Percentile</a></td>
          <td>p95 / p99 如何描述長尾延遲</td>
          <td>latency、UX</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/metric-cardinality/" data-link-title="Metric Cardinality" data-link-desc="說明 metric label 組合數量如何影響觀測成本與查詢穩定性">Metric Cardinality</a></td>
          <td>label 組合數如何影響成本</td>
          <td>metrics、storage、query</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/trace/" data-link-title="Trace" data-link-desc="說明 trace 如何重建跨服務請求的路徑、耗時與依賴關係">Trace</a></td>
          <td>跨服務流程如何重建路徑與耗時</td>
          <td>tracing、dependency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/trace-context/" data-link-title="Trace Context" data-link-desc="說明跨服務 request 如何用 trace context 串起路徑與耗時">Trace Context</a></td>
          <td>跨服務 request 如何串起路徑</td>
          <td>tracing、OpenTelemetry</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/trace-id/" data-link-title="Trace ID" data-link-desc="說明分散式追蹤中同一條呼叫路徑的識別碼">Trace ID</a></td>
          <td>同一條 trace 的識別碼</td>
          <td>tracing、log correlation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/span/" data-link-title="Span" data-link-desc="說明 trace 中一段工作如何記錄耗時、狀態與關聯">Span</a></td>
          <td>trace 中一段工作如何記錄耗時</td>
          <td>tracing、dependency</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/correlation-id/" data-link-title="Correlation ID" data-link-desc="說明跨事件或跨服務的關聯識別碼如何支援排障">Correlation ID</a></td>
          <td>跨事件與跨服務如何關聯業務流程</td>
          <td>order、payment、queue</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/request-id/" data-link-title="Request ID" data-link-desc="說明單次 request 的識別碼如何支援 log 搜尋與問題定位">Request ID</a></td>
          <td>單次 request 如何被追蹤</td>
          <td>API、support</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/dashboard/" data-link-title="Dashboard" data-link-desc="說明 dashboard 如何把關鍵訊號組成可判讀的服務狀態畫面">Dashboard</a></td>
          <td>多個觀測訊號如何組成服務狀態畫面</td>
          <td>incident、capacity、SLO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/sli-slo/" data-link-title="SLI / SLO" data-link-desc="說明服務品質指標與服務品質目標如何連接產品承諾">SLI / SLO</a></td>
          <td>服務品質如何連到產品承諾</td>
          <td>alert、incident、error budget</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/error-budget/" data-link-title="Error Budget" data-link-desc="說明 SLO 允許的失敗額度如何影響發版與可靠性投入">Error Budget</a></td>
          <td>SLO 允許的失敗額度如何決策</td>
          <td>release、reliability</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/burn-rate/" data-link-title="Burn Rate" data-link-desc="說明 error budget 消耗速度如何支援告警與事故分級">Burn Rate</a></td>
          <td>error budget 消耗速度如何告警</td>
          <td>SLO alert</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/sampling/" data-link-title="Sampling" data-link-desc="說明觀測資料如何抽樣以控制成本並保留診斷能力">Sampling</a></td>
          <td>如何抽樣觀測資料以控制成本</td>
          <td>trace、log</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/alert/" data-link-title="Alert" data-link-desc="說明 alert 如何把需要處理的服務症狀轉成可行動通知">Alert</a></td>
          <td>服務症狀如何轉成可行動通知</td>
          <td>on-call、SLO、incident</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/runbook/" data-link-title="Runbook" data-link-desc="說明 runbook 如何把事故判斷與操作步驟標準化">Runbook</a></td>
          <td>事故判斷與操作步驟如何標準化</td>
          <td>on-call、incident、replay</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/alert-runbook/" data-link-title="Alert Runbook" data-link-desc="說明告警如何連到可執行的排障與恢復流程">Alert Runbook</a></td>
          <td>告警如何連到可執行排障流程</td>
          <td>on-call、dashboard</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/symptom-based-alert/" data-link-title="Symptom-Based Alert" data-link-desc="說明告警應優先偵測使用者可感知症狀">Symptom-Based Alert</a></td>
          <td>告警如何優先偵測產品症狀</td>
          <td>SLO、on-call</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/runbook-link/" data-link-title="Runbook Link" data-link-desc="說明告警與 dashboard 如何直接連到處理流程">Runbook Link</a></td>
          <td>告警如何直接連到處理流程</td>
          <td>alert、dashboard</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/alert-fatigue/" data-link-title="Alert Fatigue" data-link-desc="說明過多低品質告警如何降低 on-call 反應品質">Alert Fatigue</a></td>
          <td>低品質告警如何降低反應品質</td>
          <td>on-call、alert policy</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/degradation/" data-link-title="Degradation" data-link-desc="說明服務部分能力失效時如何保留核心功能與控制風險">降級</a></td>
          <td>服務部分能力失效時如何保留核心功能</td>
          <td>failover、fallback、capacity</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/circuit-breaker/" data-link-title="Circuit Breaker" data-link-desc="說明下游持續失敗時如何暫停呼叫並保護系統">Circuit Breaker</a></td>
          <td>下游持續失敗時如何暫停呼叫</td>
          <td>timeout、fallback、degradation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/failover/" data-link-title="Failover" data-link-desc="說明主要服務或節點失效時如何切換到備援能力">Failover</a></td>
          <td>主要路徑失效時如何切到備援</td>
          <td>HA、region、provider</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/autoscaling/" data-link-title="Autoscaling" data-link-desc="說明系統如何依負載自動調整服務實例數量">Autoscaling</a></td>
          <td>容量如何依指標自動擴縮</td>
          <td>HPA、capacity、traffic burst</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rolling-update/" data-link-title="Rolling Update" data-link-desc="說明逐批替換服務版本的發版策略與風險控制">Rolling Update</a></td>
          <td>版本如何逐批替換並維持可用</td>
          <td>deployment、release</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/service-registry/" data-link-title="Service Registry" data-link-desc="說明服務實例如何被註冊、維護與摘除">Service Registry</a></td>
          <td>服務實例如何被註冊、維護與摘除</td>
          <td>heartbeat、TTL、metadata</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/service-discovery/" data-link-title="Service Discovery" data-link-desc="說明服務實例如何被查找與路由">Service Discovery</a></td>
          <td>服務實例如何被查找與路由</td>
          <td>registry、DNS、load balancing</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/downtime/" data-link-title="Downtime" data-link-desc="說明服務中斷時需要評估的產品後果、資料保護與復原順序">停機</a></td>
          <td>服務中斷時要先保護哪些產品結果</td>
          <td>incident、SLO、deployment</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/readiness/" data-link-title="Readiness" data-link-desc="說明 instance 何時可以安全接收流量，以及 readiness 如何和部署平台協作">Readiness</a></td>
          <td>instance 何時可以安全接收流量</td>
          <td>Kubernetes、load balancer、rollout</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/health-check-liveness/" data-link-title="Liveness" data-link-desc="說明平台如何判斷 process 是否仍然存活，以及何時應重啟">Liveness</a></td>
          <td>平台如何判斷 process 是否仍然存活</td>
          <td>Kubernetes、systemd</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/graceful-shutdown/" data-link-title="Graceful Shutdown" data-link-desc="說明服務停止前如何排空流量、完成工作與保存狀態">Graceful Shutdown</a></td>
          <td>instance 停止前如何排空流量與保存狀態</td>
          <td>deployment、worker、long connection</td>
      </tr>
  </tbody>
</table>
<h2 id="效能工程與容量規劃">效能工程與容量規劃</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/little-law/" data-link-title="Little&#39;s Law" data-link-desc="說明系統內並發數、到達率與逗留時間三者的數學關係">Little&rsquo;s Law</a></td>
          <td>並發、到達率、逗留時間如何相互推導</td>
          <td>capacity、saturation、SLO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/universal-scalability-law/" data-link-title="Universal Scalability Law (USL)" data-link-desc="說明系統擴容到一定規模後吞吐反而下降的數學模型">Universal Scalability Law</a></td>
          <td>擴容到某點後吞吐反而下降的數學原因</td>
          <td>scalability、coordinator、consensus</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/saturation-point/" data-link-title="Saturation Point" data-link-desc="說明系統從線性穩態進入 latency 指數成長區的關鍵流量點">Saturation Point</a></td>
          <td>latency 進入指數成長的臨界流量</td>
          <td>knee、capacity、headroom</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/use-method/" data-link-title="USE Method" data-link-desc="Brendan Gregg 提出的資源層 Utilization / Saturation / Errors 三維度量測法">USE Method</a></td>
          <td>資源層 Utilization / Saturation / Errors</td>
          <td>bottleneck、resource、capacity</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/red-method/" data-link-title="RED Method" data-link-desc="Tom Wilkie 提出的請求層 Rate / Errors / Duration 三維度量測法">RED Method</a></td>
          <td>請求層 Rate / Errors / Duration</td>
          <td>SLO、latency、request</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/workload-model/" data-link-title="Workload Model" data-link-desc="描述 production traffic 形狀的可重播模型 — 容量規劃跟壓測的共同輸入">Workload Model</a></td>
          <td>production traffic shape 如何量化重播</td>
          <td>load test、capacity、forecast</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/tail-latency/" data-link-title="Tail Latency" data-link-desc="說明 p99 / p999 等長尾延遲為何比平均延遲更能反映 saturation">Tail Latency</a></td>
          <td>p99 / p999 為何比平均更能反映 saturation</td>
          <td>SLO、GC、cross-zone</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/hot-partition/" data-link-title="Hot Partition" data-link-desc="說明分散式 KV / OLTP 中、單一 partition 流量遠超其他的容量問題">Hot Partition</a></td>
          <td>單一 partition 流量過熱、名義容量達不到</td>
          <td>DynamoDB、partition key、saturation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/peak-forecast/" data-link-title="Peak Forecast" data-link-desc="說明預期峰值流量的預測方法 — 容量規劃的第一個輸入">Peak Forecast</a></td>
          <td>預期峰值如何預測 — 容量公式輸入</td>
          <td>capacity、event、growth</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/headroom-budget/" data-link-title="Headroom Budget" data-link-desc="說明容量規劃中為應付異常 burst &#43; AZ 故障 &#43; forecast 誤差的安全餘量">Headroom Budget</a></td>
          <td>容量規劃的安全餘量</td>
          <td>capacity、AZ failover、forecast 誤差</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/growth-curve/" data-link-title="Growth Curve" data-link-desc="說明用戶 / 流量隨時間成長的五種典型形狀、影響容量規劃方法">Growth Curve</a></td>
          <td>用戶 / 流量成長的五種形狀</td>
          <td>linear、step、exponential、cyclical</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/predictive-scaling/" data-link-title="Predictive Scaling" data-link-desc="說明用歷史模式或 ML 模型預測流量、提前擴容的 autoscaler 模式">Predictive Scaling</a></td>
          <td>根據預測提前擴容</td>
          <td>autoscaler、ML、daily pattern</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/scheduled-scaling/" data-link-title="Scheduled Scaling" data-link-desc="說明按已知時間表預先擴容的 autoscaler 模式">Scheduled Scaling</a></td>
          <td>按已知時間表預先擴容</td>
          <td>event、pre-scaling、Black Friday</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/shadow-traffic/" data-link-title="Shadow Traffic" data-link-desc="把 production traffic 複製到新版本驗證、但不返回結果給用戶的測試模式">Shadow Traffic</a></td>
          <td>production traffic 複製到新版本驗證</td>
          <td>production validation、traffic mirror</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/dark-launch/" data-link-title="Dark Launch" data-link-desc="新功能上線但暫不開放 UI 入口、走 production traffic 但對用戶不可見的發布模式">Dark Launch</a></td>
          <td>程式碼上線但 UI 入口暫不開放</td>
          <td>feature flag、production validation</td>
      </tr>
      <tr>
          <td><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></td>
          <td>canary release 中的 latency 退化檢查</td>
          <td>canary、release gate、rollback</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/profile-diff/" data-link-title="Profile Diff" data-link-desc="對比兩次 profile（如 release candidate vs baseline）找出 hottest 變化">Profile Diff</a></td>
          <td>比較兩次 profile 找退化原因</td>
          <td>release、CPU、memory、lock</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/continuous-profiling/" data-link-title="Continuous Profiling" data-link-desc="在 production 持續取得低 overhead profile 的觀察方法">Continuous Profiling</a></td>
          <td>production 持續取低 overhead profile</td>
          <td>flame graph、observability、tracing</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/cost-per-request/" data-link-title="Cost Per Request" data-link-desc="把雲端成本拆到單一 API 請求的 unit economics 模型">Cost Per Request</a></td>
          <td>雲端成本拆到單一請求的 unit economics</td>
          <td>FinOps、capacity、TCO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/performance-budget/" data-link-title="Performance Budget" data-link-desc="跟 error budget 同類概念、但用於 latency / throughput 退化的可控額度">Performance Budget</a></td>
          <td>跟 error budget 並列的效能退化額度</td>
          <td>SLO、release freeze、burn rate</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/latency-budget/" data-link-title="Latency Budget" data-link-desc="把 user-perceived latency 拆到每個 stage 的配額、反推架構選擇">Latency Budget</a></td>
          <td>end-to-end latency 拆到每 stage 的配額</td>
          <td>Little&rsquo;s Law、stage、reverse calculation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/slo-baseline-drift/" data-link-title="SLO Baseline Drift" data-link-desc="SLO baseline 因業務變化 / surge / 架構改動而需要重新校準的現象">SLO Baseline Drift</a></td>
          <td>SLO baseline 因業務變化要重新校準</td>
          <td>review、surge、product change</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/olap-offload/" data-link-title="OLAP Offload" data-link-desc="說明如何把分析型查詢從 OLTP 主庫卸載，以保護線上交易效能">OLAP Offload</a></td>
          <td>分析查詢如何從 OLTP 主庫卸載</td>
          <td>replica、資料倉儲、CDC</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/per-connection-memory/" data-link-title="Per-Connection Memory" data-link-desc="說明每條連線或每個操作的記憶體用量如何隨並發數放大">Per-Connection Memory</a></td>
          <td>每連線記憶體如何隨並發數放大</td>
          <td>sort/join buffer、OOM、連線數</td>
      </tr>
  </tbody>
</table>
<h2 id="事故處理與復盤">事故處理與復盤</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/on-call/" data-link-title="On-Call" data-link-desc="說明值班制度如何承接告警、事故分級與升級流程">On-Call</a></td>
          <td>值班制度如何承接告警與事故流程</td>
          <td>paging、handover、incident</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/handover-protocol/" data-link-title="Handover Protocol" data-link-desc="說明事故與值班交接時要傳遞哪些資訊、責任與完成條件">Handover Protocol</a></td>
          <td>值班或事故責任如何安全交接</td>
          <td>on-call、escalation、incident</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/playbook/" data-link-title="Playbook" data-link-desc="說明場景化處置腳本如何降低事故處理不確定性">Playbook</a></td>
          <td>場景化處置如何快速啟動與執行</td>
          <td>incident workflow、recovery</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/ci-pipeline/" data-link-title="CI Pipeline" data-link-desc="說明持續整合流程如何在合併前驗證品質與相容性">CI Pipeline</a></td>
          <td>合併前如何自動驗證品質與相容性</td>
          <td>tests、checks、merge gate</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/load-test/" data-link-title="Load Test" data-link-desc="說明在預期流量下驗證容量、延遲與降級策略的測試">Load Test</a></td>
          <td>預期流量下如何驗證容量與延遲</td>
          <td>performance、SLO、capacity</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/chaos-test/" data-link-title="Chaos Test" data-link-desc="說明透過受控故障注入驗證系統在異常條件下的恢復能力">Chaos Test</a></td>
          <td>受控故障注入如何驗證韌性</td>
          <td>resilience、failover、runbook</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/game-day/" data-link-title="Game Day" data-link-desc="說明事故演練如何驗證流程、工具與團隊協作">Game Day</a></td>
          <td>事故演練如何驗證流程與協作</td>
          <td>drill、readiness、training</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/incident-severity/" data-link-title="Incident Severity" data-link-desc="說明事故分級如何把產品影響轉成對應處置節奏">Incident Severity</a></td>
          <td>事故如何依產品影響分級</td>
          <td>on-call、incident、SLO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/incident-command-system/" data-link-title="Incident Command System" data-link-desc="說明事故期間的指揮角色、決策邊界與協作方式">Incident Command System</a></td>
          <td>事故期間如何分配指揮與執行角色</td>
          <td>commander、scribe、owner</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/incident-communication-channel/" data-link-title="Incident Communication Channel" data-link-desc="說明事故期間內外部溝通要使用哪些固定通道與節奏">Incident Communication Channel</a></td>
          <td>事故期間如何同步對內對外資訊</td>
          <td>internal chat、status update、bridge</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/escalation-policy/" data-link-title="Escalation Policy" data-link-desc="說明事故升級鏈與值班轉接規則">Escalation Policy</a></td>
          <td>事故無回應或無進展時如何升級</td>
          <td>on-call、paging、handover</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/incident-timeline/" data-link-title="Incident Timeline" data-link-desc="說明事故時間線如何支援判斷、溝通與復盤">Incident Timeline</a></td>
          <td>事故事件如何形成一致時間軸</td>
          <td>incident log、communication</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/evidence-package/" data-link-title="Evidence Package" data-link-desc="說明觀測、驗證與事故流程如何把證據包成可交接、可回放的 artifact">Evidence Package</a></td>
          <td>觀測與事故證據如何交接與回放</td>
          <td>observability、verification、PIR</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/time-range/" data-link-title="Time Range" data-link-desc="說明證據、查詢與事故判讀如何用時間窗保留可回放上下文">Time Range</a></td>
          <td>證據如何保留明確時間窗</td>
          <td>evidence、incident timeline</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/query-link/" data-link-title="Query Link" data-link-desc="說明證據包如何保存可重跑查詢入口，而不是只保留截圖或口頭結論">Query Link</a></td>
          <td>證據如何保留可重跑查詢入口</td>
          <td>evidence、handoff</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-quality/" data-link-title="Data Quality" data-link-desc="說明證據欄位如何標示 completeness、freshness、sampling 與資料限制">Data Quality</a></td>
          <td>證據如何標示完整度與限制</td>
          <td>evidence、sampling、freshness</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/confidence/" data-link-title="Confidence" data-link-desc="說明證據包如何標示 confirmed、suspected 或 needs follow-up 的判讀信心">Confidence</a></td>
          <td>證據如何標示判讀信心等級</td>
          <td>evidence、gate decision</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/known-gap/" data-link-title="Known Gap" data-link-desc="說明證據包如何明確保存已知缺口，避免下游高估證據完整性">Known Gap</a></td>
          <td>證據如何保存已知缺口</td>
          <td>evidence、PIR、readiness</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/incident-decision-log/" data-link-title="Incident Decision Log" data-link-desc="說明事故期間如何保留決策、證據、owner 與回退條件">Incident Decision Log</a></td>
          <td>事故決策如何保存證據與回退條件</td>
          <td>IC handoff、PIR、status update</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/steady-state/" data-link-title="Steady State" data-link-desc="說明可靠性實驗與事故恢復如何定義系統應維持的可接受狀態">Steady State</a></td>
          <td>實驗與事故恢復如何定義成功狀態</td>
          <td>chaos、DR、recovery</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/blast-radius/" data-link-title="Blast Radius" data-link-desc="說明事故影響面如何估算與隔離">Blast Radius</a></td>
          <td>故障影響面如何估算與隔離</td>
          <td>dependency、shared resource</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rollback-strategy/" data-link-title="Rollback Strategy" data-link-desc="說明事故期間如何判斷回滾、回切與暫停變更">Rollback Strategy</a></td>
          <td>事故期間何時回滾與回切</td>
          <td>deployment、release gate</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/post-incident-review/" data-link-title="Post-Incident Review" data-link-desc="說明事故後如何完成復盤、學習與改進閉環">Post-Incident Review</a></td>
          <td>事故後如何形成改進閉環</td>
          <td>retrospective、action items</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rca/" data-link-title="RCA" data-link-desc="說明根因分析如何區分觸發事件、系統弱點與防線缺口">RCA</a></td>
          <td>根因分析如何從證據推導改進</td>
          <td>timeline、control gap</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rto/" data-link-title="RTO" data-link-desc="說明恢復時間目標如何約束事故回復策略">RTO</a></td>
          <td>服務回復時間目標如何定義</td>
          <td>SLA/SLO、DR</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/rpo/" data-link-title="RPO" data-link-desc="說明恢復點目標如何定義可接受資料損失範圍">RPO</a></td>
          <td>可接受資料損失窗口如何定義</td>
          <td>backup、replication</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/mttr/" data-link-title="MTTR" data-link-desc="說明平均修復時間如何作為事故處理能力指標">MTTR</a></td>
          <td>平均修復時間如何反映處置能力</td>
          <td>incident metrics、review</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/point-in-time-recovery/" data-link-title="Point-in-Time Recovery" data-link-desc="說明如何用完整備份加上後續變更日誌，把資料庫還原到任意時間點">Point-in-Time Recovery</a></td>
          <td>資料如何還原到過去任意時間點</td>
          <td>base backup、WAL、RPO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/corruption-recovery/" data-link-title="Corruption Recovery" data-link-desc="說明資料損毀事故如何先辨識來源、保全證據，再決定修復或還原">Corruption Recovery</a></td>
          <td>資料損毀事故如何辨識來源並處置</td>
          <td>checksum、evidence、restore</td>
      </tr>
  </tbody>
</table>
<h2 id="資安與資料保護">資安與資料保護</h2>
<table>
  <thead>
      <tr>
          <th>卡片</th>
          <th>核心問題</th>
          <th>常見出現位置</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/authorization/" data-link-title="Authorization" data-link-desc="說明授權如何判斷誰能對哪些資源執行哪些操作">Authorization</a></td>
          <td>誰能對哪些資源執行哪些操作</td>
          <td>RBAC、ABAC、tenant</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/authentication/" data-link-title="Authentication" data-link-desc="說明系統如何確認呼叫者身份">Authentication</a></td>
          <td>系統如何確認呼叫者身份</td>
          <td>login、API key、mTLS</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/credential/" data-link-title="Credential" data-link-desc="整理身分驗證與系統存取用秘密資料">Credential</a></td>
          <td>身分與系統存取用秘密如何保存與輪替</td>
          <td>API key、password、private key</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/iam/" data-link-title="IAM" data-link-desc="說明 identity and access management 如何集中管理身分、角色與權限">IAM</a></td>
          <td>身分與權限如何集中治理</td>
          <td>SSO、roles、policy</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/bola-idor/" data-link-title="BOLA / IDOR" data-link-desc="說明物件層授權缺失如何讓使用者存取不屬於自己的資料">BOLA / IDOR</a></td>
          <td>使用者如何被限制只能存取授權物件</td>
          <td>API、resource ID</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/bopla/" data-link-title="BOPLA" data-link-desc="說明屬性層授權缺失如何讓使用者讀寫不該暴露的欄位">BOPLA</a></td>
          <td>欄位層級如何授權讀寫</td>
          <td>DTO、field policy</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/mass-assignment/" data-link-title="Mass Assignment" data-link-desc="說明自動綁定 request 欄位如何造成未授權欄位被修改">Mass Assignment</a></td>
          <td>自動綁定欄位如何造成未授權修改</td>
          <td>API、ORM</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/excessive-data-exposure/" data-link-title="Excessive Data Exposure" data-link-desc="說明 API 回傳過多資料如何增加敏感資訊外洩風險">Excessive Data Exposure</a></td>
          <td>API 回傳過多資料如何增加外洩風險</td>
          <td>response、DTO</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/unrestricted-resource-consumption/" data-link-title="Unrestricted Resource Consumption" data-link-desc="說明缺少資源限制如何讓 API 被濫用或拖垮">Unrestricted Resource Consumption</a></td>
          <td>API 如何限制昂貴資源使用</td>
          <td>upload、export、query</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/function-level-authorization/" data-link-title="Function-Level Authorization" data-link-desc="說明功能操作本身也需要授權，不只資源 ID 需要授權">Function-Level Authorization</a></td>
          <td>功能操作本身如何授權</td>
          <td>refund、export、admin</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/tenant-boundary/" data-link-title="Tenant Boundary" data-link-desc="說明多租戶系統如何隔離不同客戶或組織的資料與資源">Tenant Boundary</a></td>
          <td>多租戶資料與資源如何隔離</td>
          <td>SaaS、RBAC</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/least-privilege/" data-link-title="Least Privilege" data-link-desc="說明身份、服務與人員只應取得完成工作所需的最小權限">Least Privilege</a></td>
          <td>身份如何只取得必要權限</td>
          <td>IAM、database user</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/security-misconfiguration/" data-link-title="Security Misconfiguration" data-link-desc="說明錯誤設定如何讓安全控制失效或暴露內部能力">Security Misconfiguration</a></td>
          <td>設定錯誤如何暴露內部能力</td>
          <td>CORS、debug、cloud</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/attack-surface/" data-link-title="Attack Surface" data-link-desc="說明系統哪些對外暴露面會被先行探測與枚舉">Attack Surface</a></td>
          <td>系統哪些對外暴露面最先被探測</td>
          <td>public API、admin route、webhook</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/trust-boundary/" data-link-title="Trust Boundary" data-link-desc="說明系統哪些位置開始不能沿用原本的信任假設">Trust Boundary</a></td>
          <td>哪些位置要重建信任假設</td>
          <td>auth boundary、tenant、network</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/abuse-case/" data-link-title="Abuse Case" data-link-desc="說明合法功能如何被惡意轉用成突破或濫用路徑">Abuse Case</a></td>
          <td>合法功能如何被惡意轉用</td>
          <td>export、invite、reset</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/waf/" data-link-title="WAF" data-link-desc="說明 Web Application Firewall 如何在入口層過濾常見攻擊與濫用">WAF</a></td>
          <td>入口層如何過濾常見攻擊與濫用</td>
          <td>edge、bot、attack</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/feature-flag/" data-link-title="Feature Flag" data-link-desc="說明如何用可動態開關控制功能曝光與風險">Feature Flag</a></td>
          <td>功能開關如何分離部署與啟用</td>
          <td>rollout、experiment、rollback</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/security-exception/" data-link-title="Security Exception" data-link-desc="說明資安風險例外如何以期限、補償控制與關閉條件管理">Security Exception</a></td>
          <td>風險例外如何以期限與關閉條件治理</td>
          <td>risk acceptance、governance</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/release-freeze/" data-link-title="Release Freeze" data-link-desc="說明高風險期間如何以凍結策略保護正式環境">Release Freeze</a></td>
          <td>高風險期間如何暫停特定變更</td>
          <td>incident、vulnerability window</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/tripwire/" data-link-title="Tripwire" data-link-desc="說明風險決策在條件變化時如何自動回到評估流程">Tripwire</a></td>
          <td>風險決策何時自動回到重評估流程</td>
          <td>threshold、escalation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/allowlist/" data-link-title="Allowlist" data-link-desc="說明如何用明確允許條件控制例外放行範圍">Allowlist</a></td>
          <td>例外放行如何維持可控範圍</td>
          <td>freeze exception、policy control</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/input-validation/" data-link-title="Input Validation" data-link-desc="說明進入系統的資料如何先被檢查格式、範圍與語意">Input Validation</a></td>
          <td>入口資料如何檢查格式與語意</td>
          <td>API、webhook</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/ssrf/" data-link-title="SSRF" data-link-desc="說明伺服器端請求被濫用時如何存取內部網路或 metadata 服務">SSRF</a></td>
          <td>伺服器端請求如何被濫用</td>
          <td>URL fetch、webhook</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/pii/" data-link-title="PII" data-link-desc="說明可識別個人的資料如何影響權限、遮罩、保留與稽核">PII</a></td>
          <td>可識別個人的資料如何保護</td>
          <td>masking、retention</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-classification/" data-link-title="Data Classification" data-link-desc="說明資料分級如何決定保護、存取、保留與匯出規則">Data Classification</a></td>
          <td>資料分級如何決定保護規則</td>
          <td>security、compliance</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/data-masking/" data-link-title="Data Masking" data-link-desc="說明敏感資料如何在顯示、匯出、log 與測試資料中降低暴露">Data Masking</a></td>
          <td>敏感資料如何降低暴露</td>
          <td>export、log、support tool</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/secret-management/" data-link-title="Secret Management" data-link-desc="說明 token、key、password 與憑證如何保存、輪替與撤銷">Secret Management</a></td>
          <td>token、key、password 如何保存與輪替</td>
          <td>credential、deployment</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/tls-mtls/" data-link-title="TLS / mTLS" data-link-desc="說明傳輸加密與雙向憑證驗證如何保護跨邊界資料流">TLS / mTLS</a></td>
          <td>傳輸加密與雙向身份驗證如何保護資料流</td>
          <td>service-to-service、API</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/website-certificate-lifecycle/" data-link-title="Website Certificate Lifecycle" data-link-desc="說明網站 TLS 憑證從簽發到續期與撤銷的全流程責任">Website Certificate Lifecycle</a></td>
          <td>網站憑證從簽發到續期與撤銷如何治理</td>
          <td>HTTPS、edge、ingress</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/acme-automation/" data-link-title="ACME Automation" data-link-desc="說明網站憑證如何透過 ACME 自動簽發與續期">ACME Automation</a></td>
          <td>網站憑證如何自動簽發與續期</td>
          <td>Let&rsquo;s Encrypt、DNS-01、HTTP-01</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/certificate-chain-trust/" data-link-title="Certificate Chain and Trust Root" data-link-desc="說明網站憑證鏈與信任根如何影響連線可用性與驗證結果">Certificate Chain and Trust Root</a></td>
          <td>憑證鏈與信任根如何影響握手</td>
          <td>intermediate CA、trust store</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/certificate-rotation-renewal/" data-link-title="Certificate Rotation and Renewal" data-link-desc="說明網站憑證如何安全續期與輪替以避免停機">Certificate Rotation and Renewal</a></td>
          <td>憑證與私鑰如何不中斷更新</td>
          <td>expiry、zero-downtime</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/certificate-revocation/" data-link-title="Certificate Revocation" data-link-desc="說明憑證洩漏或誤發時如何撤銷並控制影響範圍">Certificate Revocation</a></td>
          <td>憑證失效時如何撤銷與替換</td>
          <td>key compromise、incident</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/artifact-provenance/" data-link-title="Artifact Provenance" data-link-desc="說明交付物的來源、完整性與簽章關聯如何建立信任">Artifact Provenance</a></td>
          <td>交付物來源與完整性如何建立可驗證信任</td>
          <td>CI、supply chain、release gate</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/audit-log/" data-link-title="Audit Log" data-link-desc="說明高風險操作如何留下可追溯、可稽核的紀錄">Audit Log</a></td>
          <td>高風險操作如何留下責任證據</td>
          <td>admin、export、permission</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/row-level-security/" data-link-title="Row-Level Security" data-link-desc="說明資料庫如何用 policy 限制同一張表中哪些 row 對某個角色可見或可寫">Row-Level Security</a></td>
          <td>資料庫如何用 policy 過濾可見的 row</td>
          <td>RLS、多租戶、policy</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/at-rest-encryption/" data-link-title="At-Rest Encryption" data-link-desc="說明資料落到儲存媒介前的加密層，以及它對應的威脅模型">At-Rest Encryption</a></td>
          <td>落地資料如何在儲存層加密</td>
          <td>tablespace、backup、金鑰</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/key-management/" data-link-title="Key Management" data-link-desc="說明加密金鑰如何產生、保存、輪替，以及還原時如何依賴金鑰">Key Management</a></td>
          <td>加密金鑰如何產生、保存與輪替</td>
          <td>KMS、keyring、rotation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/knowledge-cards/break-glass-access/" data-link-title="Break-Glass Access" data-link-desc="說明緊急情況下臨時授予的高權限存取，如何用工單、時限與事後審查治理">Break-Glass Access</a></td>
          <td>緊急高權限存取如何用工單與時限治理</td>
          <td>emergency、ticket、audit</td>
      </tr>
  </tbody>
</table>
<h2 id="使用方式">使用方式</h2>
<p>知識卡片是章節引用單位。選型文章遇到術語時，應連到對應卡片；服務實體章節需要更深入時，再從卡片延伸到具體工具操作。</p>
<p>卡片先回答概念本質，再放例子與提醒。這個順序讓讀者先知道該概念在系統裡承擔什麼責任，再理解 RabbitMQ、Redis、Kubernetes 或 observability 平台中的具體名稱。</p>
]]></content:encoded></item></channel></rss>