目錄表

分散式系統學習筆記

Distributed Systems 是把一台電腦可以做完的事情分到很多台電腦上。

但不管 Application 要完成什麼,都只包含兩件事:

  1. 資料儲存 storage
  2. 運算 computation

Distributed system 就是把這兩個問題從一台電腦上,「分散」到多台電腦上而已。


目標: Scalability

只用一台電腦要做擴展的話,直覺就是把資源往上加,但這樣成本會太高。

使用多台電腦就可以用較低的成本換取相近的效能,不過會增加一些麻煩,這就是 Distributed System 要討論的東西。

三個 Scalability 的方向

  1. Size Scalability:增加系統的 Node 時,系統跑的速度應該要線性提昇;資料變多時讀取速度不會因此而變得過慢
  2. Geographic Scalability:服務橫跨的區域變大,在美國使用和在台灣使用都不會因此變得很慢
  3. Administrative Scalability:不會因為增加了幾顆 node,就增加過多的管理成本。

兩個評估角度: Performance & Availability

Availability = uptime / (uptime + downtime)

Scalability 的困難之處

  1. Node 增加時會產生 overhead
  2. Node 之間的距離

面對分散式系統的兩個常用技巧: Partition 和 Replicate

對 Performance & Availability 的影響

Partition Replicate
Performance 降低搜尋的目標集 增加存取吞吐量
Availability 縮窄損害範圍 提供備援資料

建立抽象模型以解決分散式系統問題

例子:

兩個面向評估抽象化:易理解程度 & 成本考量

什麼叫「抽象程度更高」

一般日常中,聽到「你講得很抽象」跟這邊指的不是同一件事。

可以先把這邊講的抽象想成是「簡化事情的複雜程度」。

所以「A 比 B 的抽象程度更高」,指的是 A 刻意忽視了 B 的某些細節,以方便管理,所以 A 更易於理解。

當我們每次進行抽象化時,都會失去對一些東西的掌握;假如遇到某些效能瓶頸時,還是得往實際面去解決,這時候就得重新審視那些被忽略的地方。

Ref