為什么需要分布式
- 通過復(fù)制(replication)實(shí)現(xiàn)容錯(cuò)
- CPUs/mem/disk/net的水平擴(kuò)容
分布式的難點(diǎn)
- 復(fù)雜。多個(gè)并發(fā)部分
- 部分失敗問題
- 難以實(shí)現(xiàn)的性能潛力
分布式領(lǐng)域有個(gè)著名的CAP定律
- Consistency:一致性汪榔,需要處理部分失敗的問題屎开。比如關(guān)系型數(shù)據(jù)庫(kù)的ACID非竿。
- Availability:可用性樟凄,避免單點(diǎn)奴饮。
- Partition tolerance:分區(qū)容忍性,即擴(kuò)展性新啼,按需擴(kuò)展。
有個(gè)說(shuō)法是三者最多只能取其二刹碾。主要的矛盾點(diǎn)在于一致性和擴(kuò)展性燥撞,因?yàn)閷?shí)現(xiàn)按需擴(kuò)展,必定會(huì)存在不一致的情況迷帜。因此分布式系統(tǒng)往往都會(huì)是CA或者是AP物舒。最典型的的就是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)(CA)和NoSQL(AP)。
分布式系統(tǒng)往往會(huì)有以下幾個(gè)方面:
- 存儲(chǔ)
- 通信
- 計(jì)算
MapReducer是一個(gè)分布式計(jì)算的編程模型
- 計(jì)算過程分成map和reduce戏锹。Map函數(shù)不需要相互等待或者共享數(shù)據(jù)冠胯,這對(duì)并行非常友好。
- map不保持狀態(tài)景用,部分map失敗了涵叮,重跑可以得到一樣的結(jié)果惭蹂。
- map 的輸入來(lái)自本地磁盤,而不是網(wǎng)絡(luò)割粮,中間結(jié)果也是保存在本地磁盤盾碗,而且只會(huì)網(wǎng)絡(luò)傳輸一次(reduce),這點(diǎn)提升網(wǎng)絡(luò)性能舀瓢。