learn:distributed-system
目錄表
分散式系統學習筆記
Distributed Systems 是把一台電腦可以做完的事情分到很多台電腦上。
但不管 Application 要完成什麼,都只包含兩件事:
- 資料儲存 storage
- 運算 computation
Distributed system 就是把這兩個問題從一台電腦上,「分散」到多台電腦上而已。
目標: Scalability
只用一台電腦要做擴展的話,直覺就是把資源往上加,但這樣成本會太高。
使用多台電腦就可以用較低的成本換取相近的效能,不過會增加一些麻煩,這就是 Distributed System 要討論的東西。
三個 Scalability 的方向
- Size Scalability:增加系統的 Node 時,系統跑的速度應該要線性提昇;資料變多時讀取速度不會因此而變得過慢
- Geographic Scalability:服務橫跨的區域變大,在美國使用和在台灣使用都不會因此變得很慢
- Administrative Scalability:不會因為增加了幾顆 node,就增加過多的管理成本。
兩個評估角度: Performance & Availability
- Performance: Response Speed, High throughput, Less Resource
- Availability (Fault Tolerance): 讓使用者以為我們的服務一直是 alive 的
Availability = uptime / (uptime + downtime)
Scalability 的困難之處
- Node 增加時會產生 overhead
- 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