分散式系統是現代大規模應用程式的基礎架構。本模組涵蓋分散式系統的核心理論、彈性設計、效能最佳化與架構模式。
為什麼分散式系統很重要#
在分散式系統的世界裡,故障是常態而非例外。正如 Amazon AWS 的設計原則所強調的 Design for Failure:不要試圖避免故障,而是把處理故障的程式碼當成正常功能,寫入架構與程式碼中。
分散式系統的核心挑戰不是避免故障,而是在故障發生時如何優雅地處理,確保系統的可用性與資料的一致性。
系統可用性的計算#
系統可用性的計算公式:
$$Availability = \frac{MTTF}{MTTF + MTTR}$$
其中:
- MTTF (Mean Time To Failure):平均故障前的時間,系統可靠性越高,MTTF 越長
- MTTR (Mean Time To Recovery):平均修復時間,這個時間越短越好
為了提高可用性,我們要麼提高系統的無故障時間,要麼減少故障恢復時間。
故障的主要來源#
無計劃的故障#
- 網路問題:網路連結例外、頻寬擁塞
- 效能問題:資料庫慢查詢、Full GC、硬碟 IO 過高、CPU 飆高
- 安全問題:DDoS 攻擊等
- 硬體問題:硬碟損壞、網卡故障、機房斷電
有計劃的停機#
- 日常任務:備份、容量規劃、安全管理
- 運維相關:資料庫維護、應用維護、中間件維護
- 升級相關:資料庫、應用、作業系統升級
本模組內容#
| 章節 | 主題 | 說明 |
|---|---|---|
| 基礎理論 | CAP、BASE、一致性模型 | 分散式系統的理論基礎 |
| 彈性設計 | 熔斷、限流、降級 | 確保系統在故障下的可用性 |
| 效能設計 | 快取、非同步、分片 | 提升系統吞吐量與回應時間 |
| 架構模式 | 微服務、Service Mesh、API Gateway | 現代分散式架構的設計模式 |
核心設計原則#
彈性設計 (Resiliency)#
系統在不健康甚至出錯的情況下,仍有能力維持運作並恢復正常:
彈力設計 = 容錯能力 + 可伸縮性 + 一致性保障 + 大流量處理- 容錯能力:服務隔離、非同步呼叫、請求冪等性
- 可伸縮性:有狀態/無狀態服務設計
- 一致性:補償事務、重試機制
- 大流量處理:熔斷、降級、限流
效能設計#
- 快取:Cache Aside、Read/Write Through、Write Behind
- 非同步處理:事件驅動、訊息佇列
- 資料庫擴展:讀寫分離、分庫分表
管理設計#
- 分散式鎖:確保分散式環境下的互斥操作
- 組態中心:統一管理分散式服務的組態
- 服務網格:控制面與資料面分離
分散式系統的設計沒有銀彈,每個設計決策都是取捨 (trade-off)。在一致性、可用性和效能之間,需要根據業務需求做出適當的權衡。
學習路徑建議#
- 理解理論基礎:先掌握 CAP、BASE 等核心理論
- 學習彈性設計:了解如何設計能容忍故障的系統
- 最佳化效能:學習快取、非同步等效能最佳化手段
- 架構實踐:將理論應用到微服務、Service Mesh 等實際架構中