MIT 6.824 分布式系統(tǒng)學(xué)習(xí)筆記 - 分布式系統(tǒng)介紹

分布式系統(tǒng)

  1. 分布式系統(tǒng)是什么伯襟?

    • 多臺協(xié)作的計(jì)算機(jī)

    • 存儲大型網(wǎng)站,MapReduce,p2p 共享網(wǎng)絡(luò)等很多關(guān)鍵的基礎(chǔ)設(shè)施是分布式的

  2. 建設(shè)分布式系統(tǒng)的原因

  • 通過并行增加容量

  • 通過復(fù)制實(shí)現(xiàn)錯誤容忍(容錯)

    • 使計(jì)算在物理上靠近外部實(shí)體

    • 通過隔離實(shí)現(xiàn)安全

  1. 但是很多并發(fā)部分示括,復(fù)雜的交互,必須處理局部錯誤痢畜,難以實(shí)現(xiàn)性能潛力

  2. 很多性能問題并不能簡單通過擴(kuò)展實(shí)現(xiàn)

    快速響應(yīng)單一用戶請求

    所有用戶想更新相同的數(shù)據(jù)

    這些通常需要更好的設(shè)計(jì)而不僅僅是更多的服務(wù)器

  3. MapReduce

    MapReduce 任務(wù)抽象

    [圖
    mapreduce.png
MapReduce 過程

input is (already) split into M files
 Input1 -> Map -> a,1 b,1
 Input2 -> Map ->     b,1
 Input3 -> Map -> a,1     c,1
 |   |   |
 |   |   -> Reduce -> c,1
 |   -----> Reduce -> b,2
 ---------> Reduce -> a,2
 MR calls Map() for each input file, produces set of k2,v2
 "intermediate" data
 each Map() call is a "task"
 MR gathers all intermediate v2's for a given k2,
 and passes each key + values to a Reduce call
 final output is set of <k2,v3> pairs from Reduce()s
?
Example: word count
 input is thousands of text files
 Map(k, v)
 split v into words
 for each word w
 emit(w, "1")
 Reduce(k, v)
 emit(len(v))
?
MapReduce scales well:
 N "worker" computers get you Nx throughput.
 Maps()s can run in parallel, since they don't interact.
 Same for Reduce()s.
 So you can get more throughput by buying more computers.</pre>

MapReduce 隱藏了很多細(xì)節(jié):

  • 發(fā)送應(yīng)用代碼到服務(wù)器

  • 追蹤哪個任務(wù)已經(jīng)完成

  • 將數(shù)據(jù)從 Map 移動到 Reduce

  • 在服務(wù)器之間進(jìn)行平衡加載調(diào)整

  • 恢復(fù)失敗任務(wù)

MapReduce 限制了應(yīng)用能做的

  • 沒有交互或者狀態(tài)(除了通過中間輸出)

  • 沒有迭代垛膝,沒有多階段管道

  • 沒有做到實(shí)時數(shù)據(jù)或者流數(shù)據(jù)處理

輸入和輸出存儲在 GFS 集群文件系統(tǒng)中鳍侣,MR 需要巨大的并行輸入和輸出吞吐量

  • GFS 需要把大型文件分割到多個服務(wù)器上,分成 64 MB 的文件塊

  • Map 并行讀取

  • Reduce 并行寫入

  • GFS 也把每個文件復(fù)制到2-3個服務(wù)器上吼拥,GFS 對 MapReduce 來說是巨大的勝利

限制性能的是什么倚聚?

CPU ? 內(nèi)存 凿可? 硬盤 惑折? 網(wǎng)絡(luò)帶寬 ?

在 2004 年他們認(rèn)為是被網(wǎng)絡(luò)帶寬限制

對于排序來說枯跑,Map 從 GFS 讀取文件惨驶,Reduce 讀取 Map 的輸出可能和 輸入一樣大,Reduce 再把文件寫入 GFS

在 MR 的 all -to -all shuffle過程中敛助,一半以上的流量通過根交換機(jī)

論文中的根交換機(jī):100-200 GB/s,一共1800臺服務(wù)器粗卜,也就是 55MB/s,55 Mb 很小,遠(yuǎn)低于磁盤或內(nèi)存速度

今天纳击,網(wǎng)絡(luò)和根交換機(jī)相對于CPU /磁盤快得多

論文中圖 1 的詳情

一個主節(jié)點(diǎn)续扔,將任務(wù)分配給 worker 節(jié)點(diǎn)并且記住任務(wù)進(jìn)度
  1. 主節(jié)點(diǎn)分給 worker節(jié)點(diǎn) Map 任務(wù)直到所有的 Map 任務(wù)完成,Map 節(jié)點(diǎn)把輸出(中間結(jié)果數(shù)據(jù))到本地磁盤上焕数,Map 分割輸出纱昧,通過 hash分成每一個 Reduce 任務(wù)

  2. 等所有 Map 完成后,主節(jié)點(diǎn)分發(fā) Reduce 任務(wù)

    每一個 Reduce 從 Map worker 節(jié)點(diǎn)拉取 中間輸出數(shù)據(jù)到 Reduce節(jié)點(diǎn)

    每個 Reduce 任務(wù)寫入一個單獨(dú)的輸出文件到 GFS上

MR 如何 減小網(wǎng)絡(luò)帶寬使用

  • Master節(jié)點(diǎn)嘗試在GFS上面運(yùn)行它的每個Map任務(wù)存儲它的輸入

    • 所有的計(jì)算機(jī)都運(yùn)行 GFS 和 MR worker

    • 輸入從本地磁盤讀取而不是通過網(wǎng)絡(luò)

  • 中間結(jié)果數(shù)據(jù)只在網(wǎng)絡(luò)中傳輸一次

    • Map 節(jié)點(diǎn)寫入本地磁盤

    • Reduce worker節(jié)點(diǎn)直接從Map 節(jié)點(diǎn)讀取百匆,而不是通過磁盤

中間結(jié)果數(shù)據(jù)拆分為包含很多 key 的文件

  • Reduce 遠(yuǎn)小于 key 的數(shù)量

  • 大的網(wǎng)絡(luò)帶寬會更有效

MR 如何獲取良好的負(fù)載均衡

如果 N -1 個服務(wù)器必須等待 1個比較慢的服務(wù)器完成任務(wù)是比較浪費(fèi)的砌些,但是一些任務(wù)耗時肯呢個遠(yuǎn)大于其他的

解決方法: 任務(wù)數(shù)比worker節(jié)點(diǎn)數(shù)要更多

  • Master 節(jié)點(diǎn) 將新任務(wù)分發(fā)給完成之前任務(wù)的節(jié)點(diǎn)

  • 因此,希望沒有一項(xiàng)任務(wù)會大到它可以主導(dǎo)完成時間

  • 因此加匈,速度較快的服務(wù)器要比速度較慢的服務(wù)器執(zhí)行更多任務(wù)存璃,并同時完成。

容錯是什么

worker 節(jié)點(diǎn)在執(zhí)行 MR 任務(wù)時候崩潰怎么辦雕拼?

我們想要完全的向應(yīng)用開發(fā)程序員隱藏錯誤纵东,MR 需要重新運(yùn)行整個任務(wù)嗎,為何啥寇?

MR 只需要運(yùn)行 失敗的 Map 和 Reduce 任務(wù)

假設(shè) MR 運(yùn)行兩次 Map偎球,一個 Reduce 會看到第一次的 Map 輸出結(jié)果,

另一個 Reduce 會看到第二次的運(yùn)行結(jié)果

正確性要求重新執(zhí)行才能產(chǎn)生完全相同的輸出辑甜,因此 Map 和 Reduce 必須是純粹的確定性函數(shù)衰絮,他們只被允許看到他們的參數(shù),沒有狀態(tài)磷醋,沒有文件 I/O,沒有交互猫牡,沒有額外的通信。

如果 想要允許非函數(shù)性的 Map 和 Reduce 怎么辦

worker 節(jié)點(diǎn)失敗需要整個任務(wù)重新執(zhí)行邓线,或者你需要創(chuàng)建全局的同步檢查點(diǎn)

worker 節(jié)點(diǎn)崩潰恢復(fù)詳情

  • Map worker節(jié)點(diǎn)崩潰

    • master 節(jié)點(diǎn)注意到 worker節(jié)點(diǎn)不再響應(yīng) ping

    • master 知道 哪一個 worker 節(jié)點(diǎn)上運(yùn)行的 Map 任務(wù)

    • 那些中間結(jié)果數(shù)據(jù)現(xiàn)在已經(jīng)丟失淌友,必須重新創(chuàng)建

    • master 告訴其他節(jié)點(diǎn)來運(yùn)行那些失敗的任務(wù)

    • 如果 Reduce 已經(jīng)獲取到中間結(jié)果數(shù)據(jù)的話煌恢,可以忽略重新運(yùn)行

  • Reduce 節(jié)點(diǎn)崩潰

    • 任務(wù)完成就可以,存儲在GFS中震庭,同時有多個副本

    • master 在其他worker 節(jié)點(diǎn)上重啟那些 worker 節(jié)點(diǎn)沒有完成的任務(wù)

  • 其他失敗問題

    • 如果 master 給兩個 worker 節(jié)點(diǎn)相同的 Map() 任務(wù)怎么辦

    • 可能 master 錯誤的認(rèn)為 一個 worker已經(jīng) 死掉了瑰抵,它會告訴 Reduce 節(jié)點(diǎn)只有一個 Map 任務(wù)

    • 如果 master 給兩個 worker 節(jié)點(diǎn)相同的 Reduce() 任務(wù)怎么辦

      • 他們都會嘗試寫入輸出文件到 GFS。GFS 原子命名可防止混淆器联,一個完成的文件將會可見
    • 如果一個 worker 節(jié)點(diǎn)非常慢怎么辦 二汛?

      • 可能是由于不可靠的硬件設(shè)備

      • master 啟動最近幾項(xiàng)任務(wù)的副本

    • woker 節(jié)點(diǎn)因?yàn)槟撤N原因,計(jì)算出不正確的輸出主籍,MR 會認(rèn)為停止故障的 CPU和軟件

    • master 節(jié)點(diǎn)宕機(jī)怎么辦

  • 當(dāng)前狀態(tài)

    • 影響巨大 (hadoop, spark)

    • 可能在 Google 已經(jīng)不再使用

    • 被 Flume / FlumeJava 所替代 (see paper by Chambers et al)

    • GFS 被 Colossus 和 BigTable 替代

    總結(jié)

    MapReduce 使得大集群計(jì)算變得流行

    不是最高效的或者最穩(wěn)定的

    擴(kuò)展性良好

    編程簡單习贫,失敗錯誤和數(shù)據(jù)移動被隱藏掉了

    這些都是在實(shí)踐中很好的權(quán)衡

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逛球,一起剝皮案震驚了整個濱河市千元,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颤绕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件物独,死亡現(xiàn)場離奇詭異挡篓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帚称,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門官研,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闯睹,你說我怎么就攤上這事戏羽。” “怎么了楼吃?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵始花,是天一觀的道長。 經(jīng)常有香客問我孩锡,道長酷宵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任躬窜,我火速辦了婚禮斩披,結(jié)果婚禮上溜族,老公的妹妹穿的比我還像新娘讹俊。我一直安慰自己,他們只是感情好煌抒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布仍劈。 她就那樣靜靜地躺著,像睡著了一般况既。 火紅的嫁衣襯著肌膚如雪这溅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天棒仍,我揣著相機(jī)與錄音悲靴,去河邊找鬼。 笑死莫其,一個胖子當(dāng)著我的面吹牛癞尚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乱陡,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼浇揩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了憨颠?” 一聲冷哼從身側(cè)響起胳徽,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爽彤,沒想到半個月后养盗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淫茵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年爪瓜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匙瘪。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铆铆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丹喻,到底是詐尸還是另有隱情薄货,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布碍论,位于F島的核電站谅猾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜税娜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一坐搔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敬矩,春花似錦概行、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至禽炬,卻和暖如春涧卵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腹尖。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工柳恐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桐臊。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓胎撤,卻偏偏與公主長得像晓殊,于是被迫代替她去往敵國和親断凶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容