視頻筆記一:緒論

課程背景

構(gòu)建分布式系統(tǒng)的原因:

  1. Parallelism,資源并行(提高效率)。
  2. Fault tolerance,容錯。
  3. Physical,系統(tǒng)內(nèi)在的物理分散。
  4. Security,不可信對端(區(qū)塊鏈)。

分布式系統(tǒng)面臨的挑戰(zhàn):

  1. Concurrency,系統(tǒng)構(gòu)件很多,并行繁雜,交互復(fù)雜。
  2. Partial failure,存在部分失敗,而不是像單機(jī)一樣要么正常運(yùn)行,要么完全宕機(jī)。
  3. Performance,精巧設(shè)計才能獲取與機(jī)器數(shù)量線性相關(guān)的性能。

課程組成

  1. Lectures,授課,一些案例學(xué)習(xí)。

  2. Papers,論文。

    • 包括一些經(jīng)典的和前沿的、學(xué)術(shù)的和工業(yè)界的。
    • 看其觀點(diǎn),學(xué)其實(shí)現(xiàn),斷其性能。
    • 抓重要部分,略次要部分。
    • 課程主頁有所有論文鏈接。
  3. Exams,期中期末兩次考試。

  4. Labs:四個實(shí)驗(yàn)

    • lab1: MapReduce
    • lab2: Raft 容錯
    • lab3: K/V server use Raft
    • lab4: Shared K/V based on lab3

    分布式系統(tǒng)巨難調(diào)試,做好心理準(zhǔn)備,早點(diǎn)開做。

  5. Project,可以自選相關(guān)題目,組隊完成,用來替代 lab4。

課程內(nèi)容

本課程旨在學(xué)習(xí)支撐應(yīng)用的基礎(chǔ)設(shè)施抽象(abstraction),包括

  1. Storage,存儲,一個很直接并常用的抽象;如何構(gòu)建多副本、容錯、高性能分布式存儲系統(tǒng)。
  2. Communication,通信,如何可靠的通信。
  3. Computation,現(xiàn)代的大規(guī)模計算,如 MapReduce

最終理想是提供能夠屏蔽分布式細(xì)節(jié)的、類似于單機(jī)的通用接口,同時能兼具容錯性能。

對于上述抽象,我們有哪些實(shí)現(xiàn)呢?

  1. RPC:像在本機(jī)調(diào)用一樣跨節(jié)點(diǎn)通信
  2. Concurrency,Threads:并發(fā)載體
  3. Concurrency,Lock:并發(fā)控制。

Performance 性能

scalability,可擴(kuò)展性

  • 可以線性的集結(jié)計算機(jī)資源:使用兩倍的機(jī)器獲取兩倍的吞吐。
  • 意味著遇到瓶頸你只需要花少量的錢買機(jī)器,而不用付很多的工資找程序員重構(gòu)。
  • 但這個特點(diǎn)很難實(shí)現(xiàn)。通常你將一個組件擴(kuò)展后,瓶頸就轉(zhuǎn)移到了另一個組件,全組件的無限擴(kuò)展很難。

Fault Tolerance 容錯

單機(jī)雖好,作為上千臺機(jī)器組成的集群來說,故障卻是常態(tài)。比如說:

  • 主機(jī)宕機(jī)
  • 網(wǎng)絡(luò)抖動
  • 交換機(jī)故障

Availability 可用性
Recoverbility 可恢復(fù)性,無干預(yù) 、不影響正確性的可恢復(fù)

手段:
NV storage:持久化
Replication:多副本

Consistency 一致性

分布式系統(tǒng)產(chǎn)生不一致的因素:

  1. 緩存
  2. 多副本

不同程度的一致性:

  1. 強(qiáng)一致性:每個客戶端每次都能讀到(自己 or 他人)之前所寫數(shù)據(jù)。在多副本系統(tǒng)實(shí)現(xiàn)強(qiáng)一致性代價十分高昂,需要進(jìn)行大量的通信。簡單說兩種方法:

    • 每次更改同時寫到所有副本
    • 每次讀取都去讀所有副本,使用具有最新時間戳的數(shù)據(jù)。
  2. 弱一致性,為了性能,工業(yè)級系統(tǒng)通常選擇弱一致性。

MapReduce

背景

Google (2003 年左右)面對巨量(數(shù)十 T)的索引數(shù)據(jù)和全網(wǎng)結(jié)構(gòu)的數(shù)據(jù),需要找到最重要的網(wǎng)頁??梢院喕癁橐粋€排序問題,但如此數(shù)量級的排序,單機(jī)不是一個可選項。而又不是所有工程師都有手?jǐn)]分布式系統(tǒng)的能力,因此產(chǎn)生了做一個分布式框架的需求,以對應(yīng)用程序員屏蔽分布式環(huán)境細(xì)節(jié):

  1. 如何將工作高效分配到上千臺機(jī)器上。
  2. 如何控制數(shù)據(jù)流動。
  3. 如何進(jìn)行容錯。

工作原理

以 WordCount 為例:

Map: document -> (word, 1)

Shuffle:group by word in Map machine,send each key Range to the corresponding Reduce Machine。

Reduce: List(word, 1) -> (word, count)

術(shù)語體系

任務(wù):Job

工作:Task,分為 Map Task 和 Reduce Task。

工作節(jié)點(diǎn):worker server

工作進(jìn)程:worker process

主節(jié)點(diǎn):master server

存儲配合

為了更好的并行讀寫,需要一個網(wǎng)絡(luò)文件系統(tǒng)來配合輸入和輸出,這就是 GFS(谷歌文件系統(tǒng))。

GFS 可以簡單理解為,一個將大文件拆為一個個小的 64M 的塊分散到不同機(jī)器上網(wǎng)絡(luò)文件系統(tǒng)。

網(wǎng)絡(luò)開銷

為了盡量繞開當(dāng)時的主要瓶頸(網(wǎng)絡(luò)傳輸),Google 做了一系列優(yōu)化,包括 GFS 和 MR 跑在一個集群上,以減少讀取和寫入數(shù)據(jù)的網(wǎng)絡(luò)傳輸。具體做法是讓 Map 任務(wù)(Map Task)去找數(shù)據(jù)(Block)—— 將 Task 調(diào)度到其輸入所在的機(jī)器上。但對于 Reduce 任務(wù),無論如何都會存在大量網(wǎng)絡(luò)開銷:GFS 對數(shù)據(jù)都進(jìn)行了冗余備份,意味著每個結(jié)果都要寫多次。

不過,時下的數(shù)據(jù)中心可以通過很多手段使得網(wǎng)絡(luò)傳輸?shù)乃俣却蟠筇岣?,比如使用多個根路由器進(jìn)行分?jǐn)偭髁浚馕吨谠O(shè)計時可以有更多靈活性,不用太為網(wǎng)絡(luò)傳輸而優(yōu)化。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容