知識主題
分散式系統
從一次遠端操作的不確定結果出發,逐步理解多份資料的一致性、共同決定的形成,以及跨服務工作的正確性邊界。
主題說明與延伸閱讀
從一次遠端操作的不確定結果出發,逐步理解多份資料的一致性、共同決定的形成,以及跨服務工作的正確性邊界。 主線以文章匯出服務貫穿,先說明問題與所需保證,再引入機制與取捨,不預設採用微服務或特定雲端產品。
目前狀態:完整主線規劃 18 篇,已撰寫第一與第二階段共 8 篇,其餘 10 篇待撰寫。 查證日期:2026-11-04。已寫文章依原始論文、Linux man-pages、gRPC 與 AWS 官方工程文件整理;查證範圍與來源見各篇。案例均為概念推演,未執行分散式部署、壓力或故障注入實驗。
先備知識與閱讀方式
讀者需能理解一次請求與回應、基本網路通訊及資料庫交易;不要求先學完其他主題,也不要求先讀演算法論文。遇到對應概念時,可回查 API、電腦網路與關聯式資料庫。
每一階段承接前一階段留下的問題。建議第一次依主線閱讀;已有背景的讀者可直接查閱當篇的模型、例子與限制。本系列主要處理程序停止與恢復、通訊異常、並行操作與過載;拜占庭容錯、區塊鏈與特定產品部署不在目前主線。
第一階段:一次操作為什麼難以確認(已撰寫)
| 順序與文章 | 要解決的問題 | 接到下一篇的問題 |
|---|---|---|
| 01 分散式系統、部分失敗與故障模型 | 逾時為何無法證明失敗?模型、安全性與活性如何限制保證? | 結果未知時,如何安全重送? |
| 02 從重送請求到冪等副作用 | 如何把操作識別、去重紀錄與業務寫入放進一致的原子邊界? | 即使效果不重複,重試會不會壓垮服務? |
| 03 過載、時間預算與背壓 | 如何共同控制流入、執行、排隊與重試成本? | 計時與事件排序是否能用同一種時間戳? |
| 04 時鐘、事件順序與因果關係 | 實體時間、單調時鐘、Lamport clock 與向量時鐘各自能證明什麼? | 建立工作之後,另一個副本的查詢必須看見它嗎? |
完成這一階段後,應能區分傳送、執行、提交、回應與觀測,並指出重試和時鐘無法自行補上的保證。
第二階段:多份狀態能承諾什麼(已撰寫)
| 順序與文章 | 要解決的問題 | 接到下一篇的問題 |
|---|---|---|
| 05 一致性模型與操作歷程 | 「讀到最新」該如何精確定義?線性、循序、因果與會話保證有何差異? | 寫入何時才算被副本確認?切換時會丟資料嗎? |
| 06 複寫、確認與故障切換 | 同步、非同步與半同步複寫能防止資料遺失嗎?裂腦如何發生? | 在無主架構中,多數派交集能否保證強一致? |
| 07 Quorum、版本與衝突修復 | 為何 W + R > N 不自動等於線性一致?版本向量與讀修復如何處理並行分歧? | 當網路完全斷開無法同步時,系統被迫做出什麼抉擇? |
| 08 網路分割與 CAP 的適用邊界 | 分割期間為何必須在線性一致(CP)與可用性(AP)二選一?PACELC 平時權衡什麼? | 當節點必須對唯一的狀態機日誌達成協議時,共識如何可能? |
完成這一階段後,能精準定義多副本讀寫契約,說明多數派交集的極限,並在網路分割情境中指出具體的違約操作。
第三階段:共同決定與安全的所有權(待撰寫)
09–12 用上一階段的契約解釋協調為何必要,然後處理持有者停止與恢復的風險:
- 共識、安全性與不可能性邊界:共識條件、狀態機複寫與 FLP 的時序前提。
- Raft 與複寫日誌:任期、選舉、提交與套用,並說明讀取及客戶端重試的額外條件。
- 租約、分散式鎖與 fencing:舊持有者恢復後為何仍可能寫入,以及受保護資源如何拒絕過期持有者。
- 分片、路由與資料搬遷:資料放置、熱點、再平衡及搬遷期間的寫入所有權;區分資料分片與網路分割。
第四階段:跨越單一原子邊界(待撰寫)
13–16 從單一交易與協調的邊界出發,研究跨服務的提交、補償、投遞與合併:
- 原子提交與兩階段提交:prepare、持久決策、in-doubt 與阻塞;區分原子提交、共識與隔離。
- Saga 與業務補償:局部交易、編排與協同、補償失敗與人工介入;不能把補償當成完整 rollback。
- 投遞語意、Outbox 與 Inbox:資料庫與事件雙寫、relay 重送、消費去重,以及 exactly-once 的具體範圍。
- 收斂、合併與 CRDT:哪些資料可以安全合併,以及哪些業務不變式仍需要協調。
第五階段:用證據檢驗完整設計(待撰寫)
17–18 回收前面所有承諾,從故障歷程檢驗端到端設計:
- 分散式觀測、故障注入與歷程驗證:追蹤識別、trace、log、metric、歷程 checker 與可重現故障;區分測試和證明。
- 整合案例:可靠的文章匯出服務:從最小可行版本逐步增加機制,列出不變式、狀態轉移、故障矩陣、恢復與仍需人工處理的情況。
與既有主題的分工
- API 共通知識:負責呼叫者看見的輸入、輸出、錯誤與重送契約;本主題補履行契約所需的狀態與協調。
- 關聯式資料庫:負責 SQL、約束與單資料庫交易;本主題說明跨節點與跨服務時保證如何改變。
- 電腦網路:負責封包與傳輸協定;本主題研究應用狀態,不能把連線可靠等同業務效果只做一次。
- AWS:提供服務專屬能力與限制;本主題先建立通用模型,不以產品名稱替代保證。
- Web 應用資安:處理攻擊、信任與權限;容錯與一致性不能替代這些防護。
後續方向
先完成上述主線,再依需要延伸更完整的 Paxos/BFT、跨區部署、流處理、事件治理與進階形式驗證。這些方向不代表目前已有文章或實驗結果。