系統設計與品質標準

從需求收集到架構設計到品質檢查表。「怎麼做出好的系統」的完整方法論。

系統規劃

API 設計

Proto 規劃

好產品的定義

設計工具與方法

需求與估算方法論

分散式系統基礎

概念層,不是 pattern(在 C04)也不是運維(在 infra I04)——是「為什麼分散式系統難」的底層邏輯。

  • CAP Theorem 深入解決的問題:你有多個節點,網路可能中斷,partition 發生時要繼續服務(AP)還是拒絕服務保一致(CP)?CAP 說明這兩件事不可兼得。etcd 選 CP(etcd 不一致就 Kubernetes cluster 壞了),Cassandra 選 AP(讀到舊資料比服務中斷更可接受)。PACELC 延伸解釋正常時的 latency vs consistency 取捨。
  • Paxos)解決的問題:多個節點如何就「誰是 leader」「這筆 write 算不算 committed」達成一致——沒有 consensus,任意節點都可以自稱 leader,資料就分裂了(split-brain)。Raft 是 etcd / ZooKeeper / Consul 底層能夠自動選 leader、node 掛掉後自動恢復的機制。Paxos 更早但複雜,Raft 以可理解性為設計目標。
  • Logical Clock解決的問題:兩個節點各自做了修改,時間戳無法判斷誰先(機器時鐘不同步,NTP 誤差幾百毫秒)。Lamport Clock 用「邏輯計數器」代替物理時間;Vector Clock 進一步能判斷「這兩個更新是有因果關係的,還是並發的(需要衝突解決)」。Amazon DynamoDB、Riak 用 Vector Clock 偵測 replica 之間的衝突。
  • Eventual Consistency 分類解決的問題:Strong consistency 需要所有副本同步(延遲高),Eventual Consistency 又太模糊(多久是「最終」?能不能讀到自己剛寫的?)。這篇把 EC 從弱到強分 5 層,讓你能說出「我們需要 Read-your-writes,不需要 Linearizability」,而不是一句「eventual consistency 就好」草草帶過。
  • 分散式系統常見失敗模式解決的問題:為什麼 1994 年寫的 8 條 Fallacies 到 2024 年還在被違反?因為人類直覺是單機的,而分散式的反直覺坑(網路不可靠、延遲不為零、拓撲不固定)每一代工程師都會重踩。這篇是你第一次設計分散式系統前的地雷地圖。
  • 系統設計 Anti-patterns解決的問題:為什麼一個設計 review 通過了,到 production 還是出問題?通常是設計過程本身有缺陷:跳過估算所以不知道量級、誤以為能同時保 CAP 三個、為了 microservice 而拆 microservice 帶來分散式 transaction 複雜度卻沒有規模上的收益。

品質標準檢查表(已搬至 standards/)

「好的 X 該有什麼」系列已搬到 standards,因主詞是「專案 / 系統」不是「設計方法論」,不適合留在 system-design/。

延伸閱讀

壓測數據驅動的系統設計決策,見 微服務之旅系列

此資料夾下有 18 條筆記。