使用者工具

網站工具


learn:distributed-system

分散式系統學習筆記

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

  • Performance: Response Speed, High throughput, Less Resource
  • Availability (Fault Tolerance): 讓使用者以為我們的服務一直是 alive 的
Availability = uptime / (uptime + downtime)

Scalability 的困難之處

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

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

  • Partition: 把資料切成多個小塊
  • Replicate: 把資料複製多份

對 Performance & Availability 的影響

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

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

例子:

  • System model (asynchronous / synchronous)
  • Failure model (crash-fail, partitions, Byzantine)
  • Consistency model (strong, eventual)

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

  • 易理解程度: 盡可能像是在用單台電腦
  • 成本考量: 越像一台電腦,成本越高

什麼叫「抽象程度更高」

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

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

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

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

Ref

learn/distributed-system.txt · 上一次變更: 2022/05/14 10:37 由 admin_wi1d5ky

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki