分散式系統是現代大規模應用程式的基礎架構。本模組涵蓋分散式系統的核心理論、彈性設計、效能最佳化與架構模式。

為什麼分散式系統很重要#

在分散式系統的世界裡,故障是常態而非例外。正如 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)。在一致性、可用性和效能之間,需要根據業務需求做出適當的權衡。

學習路徑建議#

  1. 理解理論基礎:先掌握 CAP、BASE 等核心理論
  2. 學習彈性設計:了解如何設計能容忍故障的系統
  3. 最佳化效能:學習快取、非同步等效能最佳化手段
  4. 架構實踐:將理論應用到微服務、Service Mesh 等實際架構中