📌 30 秒摘要(Layer 3)
現代應用的難點多在「資料」而非「運算」。本書把資料系統拆解成一套可評估的骨架:任何系統都在追求可靠、可擴展、可維護三大目標;再逐層深入資料模型、儲存引擎、編碼演進,以及分散式的三大支柱——複製、分區、交易,最後談分散式系統的根本難題(不可靠的時鐘/網路)與一致性和共識。是理解「資料在多台機器間如何正確流動」的聖經。
🗺 心智圖(Canvas)
設計資料密集型應用
Link to original
🧰 這本書給我的工具
- 工具-可靠可擴展可維護 — 評估/設計任何資料系統時的總框架
- 工具-資料複製 — 資料要放多份、做高可用/讀擴展時
- 工具-資料分區 — 單機裝不下、要水平擴展時
- 工具-交易與隔離等級 — 併發下資料正確性/一致性時
- 工具-線性一致性與共識 — 分散式下要不要強一致、CAP 取捨時
- 工具-資料編碼與演進 — schema/API 要能滾動升級時
✨ 關鍵重點(Layer 1–2)
- 三大目標:Reliability(容錯)、Scalability(用負載參數與百分位延遲描述)、Maintainability。
- 儲存引擎:LSM-Tree(寫優化)vs B-Tree(讀優化)的取捨。
- 複製:單主/多主/無主;同步 vs 非同步;複製延遲造成的讀取異常。
- 分區:按範圍或雜湊;再平衡;次級索引分區。
- 交易:ACID;隔離等級(讀已提交、快照隔離、可序列化)解決的併發異常。
- 分散式難題:不可靠的網路/時鐘、部分失效;線性一致性、CAP、共識(如 Raft/Paxos)。
- 批次 vs 串流處理:MapReduce 到事件流。
💬 金句原文(Layer 0)
- 「可靠性意味著:即使出錯,系統仍能繼續正確運作。」
- 「一個節點無法知道另一個節點的任何確切狀態——只能靠訊息推測。」
🔗 相關
- 領域驅動設計 —— 互補視角,本書談資料系統怎麼運作,DDD 談邊界與模型該怎麼切