非抽象大型系統設計(NALSD)

★★★★Draft

FromSRE Workbook

📚 From the Books

非抽象大型系統設計(NALSD)Capacity Planning

方塊圖不會在真實硬體上跑。NALSD 的「非抽象」就是逼你把白板設計一路算到真實數字——多少磁碟、多少 IOPS、多少 RAM、多少台機器——因為所有系統終究要跑在真實的電腦、資料中心和網路上。前期多算一點,通常能省下最後一刻因物理限制而被迫重來的設計變更。

🧠 Intuition

IMPORTANT

NALSD 是一種迭代式方法:從白板上的基本系統圖出發,一路把設計具體化為資源提案。它的價值不在於算出完美答案,而在於結合多個不完美但合理的估算,來更透徹地理解設計——早期假設會大幅影響計算,但完美假設從不是要求。

⚖️ Tradeoffs

停在方塊圖 vs 算到真實數字
  • 抽象方塊圖能表達「有哪些元件、怎麼連」,但無法告訴你它跑不跑得動:單機起點看似可行,一算才發現要約 2,500 個磁碟(每 HDD 200 IOPS)、約 1,563 台機器(每台 64 GB RAM)才撐得住。
  • 把設計算到真實數字,才會看見隱藏約束:單台機器的 CPU、記憶體、儲存、電源、網路、散熱全是單點故障,光是一次電源重啟就嚴重影響使用者。
  • 代價是前期要動筆估算、要接受假設不完美;但這正是 NALSD 主張的:早點把物理限制攤開,勝過在最後一刻被迫改設計。
單機夠用 vs 何時該分散式/分片/多資料中心
  • 每一步迭代都由「資源計算是否過關」驅動:單機因 SPOF 與 RAM/IOPS 不可行 → 走向分散式(MapReduce);但小批次處理無法滿足資料延遲 SLO,於是改用持續串流關聯的 LogJoiner 設計。
  • 當某元件的資料量超過單機容量(如 QueryMap 每日約 2 TB 遠超 64 GB RAM、IOPS 也過高),就以 query_id 雜湊分片,讓多個處理器並行,並用重複分片降低故障遺失風險。
  • 單一資料中心託管所有分片仍是單點故障——資料中心斷線就全停;於是再迭代到多資料中心,以共識演算法跨地理複製狀態,代價是每次寫入至少一次跨節點往返的延遲。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading

🔗 Dive Deeper