為什么需要分布式
- 通過復制(replication)實現容錯
- CPUs/mem/disk/net的水平擴容
分布式的難點
- 復雜。多個并發(fā)部分
- 部分失敗問題
- 難以實現的性能潛力
分布式領域有個著名的CAP定律
- Consistency:一致性,需要處理部分失敗的問題。比如關系型數據庫的ACID。
- Availability:可用性,避免單點。
- Partition tolerance:分區(qū)容忍性,即擴展性,按需擴展。
有個說法是三者最多只能取其二。主要的矛盾點在于一致性和擴展性,因為實現按需擴展,必定會存在不一致的情況。因此分布式系統(tǒng)往往都會是CA或者是AP。最典型的的就是傳統(tǒng)關系型數據庫(CA)和NoSQL(AP)。
分布式系統(tǒng)往往會有以下幾個方面:
- 存儲
- 通信
- 計算
MapReducer是一個分布式計算的編程模型
- 計算過程分成map和reduce。Map函數不需要相互等待或者共享數據,這對并行非常友好。
- map不保持狀態(tài),部分map失敗了,重跑可以得到一樣的結果。
- map 的輸入來自本地磁盤,而不是網絡,中間結果也是保存在本地磁盤,而且只會網絡傳輸一次(reduce),這點提升網絡性能。