6.824分布式系統(tǒng)[2]-GFS案例學習

準備工作

閱讀:GFS論文

背景

  • GFS是Google在2003年發(fā)出的經典論文挠锥,其作為分布式文件系統(tǒng),實際應用在Google的MapReduce框架實現(xiàn)中,作為原始數(shù)據(jù)和最終結果存儲的基礎服務十兢。
  • 為其他上層基礎系統(tǒng)比如BigTable提供服務,Hadoop中的HDFS就是其開源實現(xiàn)。
  • 這篇文章討論了諸如一致性耘擂、容錯胆剧、網絡性能等分布式系統(tǒng)工程中的經典問題,啟發(fā)了后續(xù)很多分布式文件系統(tǒng)的發(fā)展醉冤。

為什么閱讀GFS的論文

  • GFS使用了map/reduce的架構
  • 好的性能 & 良好的并行I/O性能
  • 其是一篇好的系統(tǒng)論文:從apps到網絡都有細節(jié)說明
  • 包含分布式的許多概念:performance, fault-tolerance, consistency
  • 使用廣泛(Bigtable秩霍、Spanner篙悯、Hadoop)

一致性是什么

  • 一致性是保證分布式系統(tǒng)正確的條件。在有多個副本铃绒,并且并發(fā)下變得尤其困難鸽照。

  • 一致性是分布式系統(tǒng)中最關鍵的問題,基本所有分布式系統(tǒng)都必須討論這個問題匿垄。

  • 考慮如果在一個程序中寫,但是在另一個程序的副本中讀取的情況归粉。

  • 強的一致性會保證在另一個程序中讀取到的一定是發(fā)生在最后一次寫入之后椿疗。

  • 弱的一致性無法對其進行保證,可能會讀取到過時的數(shù)據(jù)糠悼。

  • 強一致性可以保證讀到最新的寫信息届榄,但是對性能肯定會造成影響,好的系統(tǒng)設計就是在這兩點中進行平衡倔喂。

理想的一致性模型

分布式文件系統(tǒng)需要達成的“理想的“一致性就是多節(jié)點上面操作文件表現(xiàn)處理單機跟本地文件系統(tǒng)一樣铝条。

  • 如果兩個應用程序同時寫入同一文件怎么辦?

  • 在單機席噩,數(shù)據(jù)常常有一些混合的內容班缰。即兩個程序的處理可能是交錯的。

  • 如果兩個應用程序同時寫入同一目錄怎么辦

  • 在單機悼枢,使用了鎖埠忘。一個應用程序處理完畢后,再處理第二個馒索。

  • 挑戰(zhàn)

  • 多磁盤

  • 機器故障莹妒,操作無法完成。

  • 網絡分區(qū)绰上,可能不能夠到達所有的機器和磁盤旨怠。

  • 挑戰(zhàn)難以解決的原因

  • 需要客戶端和服務器之間的通信

  • 協(xié)議可能會變得復雜

不同的模型一致性考慮不同的權衡

+ 可串行性(serializability)
+ 順序一致性(sequential consistency)
+ 線性一致性(linearizability)
+ 單項一致性模型(entry consistency)
+ 松散一致性(release consistency)

GFS的目標

  • GFS中節(jié)點失效就是常見的(每天1000臺機器中大約3臺失效)
  • 高性能:大量
  • 有效的使用網絡

設計

  • master存儲(directories, files, names)

  • 存儲64MB的塊,每個塊就作為一個linux文件蜈块。

  • 每個塊在三臺服務器上面做備份(保證可用性鉴腻,負載均衡)

  • 塊為什么這么大(攤銷間接費用、減少master中的狀態(tài)大邪俳摇)

  • master掌握目錄的層次結構

  • 文件夾中有哪些文件

  • 對于文件,維護信息:哪些節(jié)點存儲了此文件信峻。

  • master在內存中維護狀態(tài)(每個塊的64字節(jié)元數(shù)據(jù))

  • 主數(shù)據(jù)庫具有用于元數(shù)據(jù)的私有倦青、可恢復數(shù)據(jù)庫

  • 操作日志刷新到磁盤

  • 檢查點

  • master快速恢復

  • shadow masters略微落后于master

客戶端讀

  • 發(fā)送文件名和塊索引給master

  • master回復具有該塊的服務器集

  • 回復版本號

  • client緩存信息

  • 請求塊服務器

  • 版本號(如果版本號錯誤盹舞,重新連接master)

primary

primary是一個副本節(jié)點中比較高級的節(jié)點产镐。

修改現(xiàn)有文件

  • client請求master 塊的位置 和primary的位置

  • master回復塊服務器,版本以及primary的位置

  • client根據(jù)網絡拓撲計算副本鏈

  • 客戶端將數(shù)據(jù)發(fā)送到第一個副本節(jié)點癣亚,然后此副本節(jié)點轉發(fā)給其他人

  • 副本節(jié)點會ack丑掺,表明數(shù)據(jù)已被接收

  • client 告訴primary寫入數(shù)據(jù)

  • primary分配序列號并寫入

  • primary 告訴其他副本寫入

  • 全部成功后述雾,回復client

  • 如果另一個客戶端并發(fā)在同一位置寫入數(shù)據(jù),該怎么辦玻孟?

  • c1 與c2 可能會交替的寫入唆缴,結果是一致性的黍翎,但是不能保證的面徽。

添加文件

  • client 請求master 塊的位置匣掸。

  • client將數(shù)據(jù)發(fā)送給副本,但是沒有指定偏移量碰酝。

  • 當數(shù)據(jù)在所有的塊服務器上后霎匈,client聯(lián)系primary

  • primary分配序列號

  • primary檢查是否能夠剛好添加到一個塊中

  • primary為添加選擇偏移量送爸,進行添加

  • 轉發(fā)請求到其他副本

  • 失敗后進行重試

  • 不能使用下一個可用偏移量,因為在失敗的節(jié)點中可能會有空字節(jié)碱璃。

  • GFS支持原子操作弄痹,保證至少一次添加,主Chunk服務器選擇記錄需要添加到的文件位置肛真,然后發(fā)送給其他副本。

  • 如果和一個副本的聯(lián)系失敗爽航,那么主Chunk服務器會告訴客戶端重試,如果重試成功讥珍,有些副本會出現(xiàn)追加兩次的情況(因為這個副本追加成功兩次)历极。

  • 當GFS要去填塞chunk的邊緣時,如果追加操作跨越chunk的邊緣趟卸,那么文件也可能存在空洞。

失敗情況

塊服務器的失敗會引起client重試。
master失敗會導致GFS不可用锄列,shadow master會服務只讀的狀態(tài)×谟剩可能會返回過時的數(shù)據(jù)竣况。

總結

性能筒严,容錯,一致性(performance, fault-tolerance, consistency)的案例研究

  • 優(yōu)勢

  • 大量的順序讀取和寫入

  • 追加文件高效

  • 大的吞吐量

  • 數(shù)據(jù)容錯(3個副本)

  • 劣勢

  • master服務器的容錯

  • 小文件(master服務器的瓶頸)

  • client會看到過時的數(shù)據(jù)(弱的一致性)

  • 追加可能重復

GFS案例問答

為什么添加數(shù)據(jù)執(zhí)行至少一次"at-least-once"語義鸭蛙,而不是精準的一次摹恨?

實現(xiàn)困難规惰,primary需要保留重復的狀態(tài)睬塌。狀態(tài)必須在服務器之間復制歇万,以便如果primary出現(xiàn)故障, 此信息不會丟失。

應用程序如何知道塊的哪些是有數(shù)據(jù)的塊勋陪,哪些是重復的數(shù)據(jù)

可以在有效記錄的開頭做標識(magic number)就可以知道有數(shù)據(jù)的塊。
檢測重復的塊可以為每個記錄都有一個特殊的UID標識诅愚。

論文中提到的reference counts是什么意思

  • 他們是實現(xiàn)快照copy-on-write(寫時復制)的一部分寒锚。
  • 當GFS創(chuàng)建快照時违孝,它不復制塊刹前,而是增加每個塊的引用計數(shù)器雌桑。這使得創(chuàng)建快照的成本不高。 如果客戶端寫入了一個塊校坑,并且主服務器注意到引用計數(shù)大于1拣技,此時,主服務器會首先創(chuàng)建一個副本耍目,以便客戶端可以更新副本(而不是快照的一部分)膏斤。

參考資料

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邪驮,隨后出現(xiàn)的幾起案子莫辨,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衔掸,死亡現(xiàn)場離奇詭異,居然都是意外死亡敞映,警方通過查閱死者的電腦和手機较曼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來振愿,“玉大人,你說我怎么就攤上這事冕末∑记福” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵档桃,是天一觀的道長枪孩。 經常有香客問我,道長藻肄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任嘹屯,我火速辦了婚禮,結果婚禮上州弟,老公的妹妹穿的比我還像新娘钧栖。我一直安慰自己,他們只是感情好婆翔,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啃奴,像睡著了一般潭陪。 火紅的嫁衣襯著肌膚如雪纺腊。 梳的紋絲不亂的頭發(fā)上畔咧,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天揖膜,我揣著相機與錄音,去河邊找鬼壹粟。 笑死拜隧,一個胖子當著我的面吹牛宿百,可吹牛的內容都是我干的洪添。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼干奢,長吁一口氣:“原來是場噩夢啊……” “哼痊焊!你這毒婦竟也來了忿峻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤逛尚,失蹤者是張志新(化名)和其女友劉穎垄惧,沒想到半個月后绰寞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體到逊,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年觉壶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菩暗。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡旭蠕,死狀恐怖停团,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情掏熬,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布旗芬,位于F島的核電站舌胶,受9級特大地震影響疮丛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜誊薄,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一履恩、第九天 我趴在偏房一處隱蔽的房頂上張望呢蔫。 院中可真熱鬧切心,春花似錦、人聲如沸绽昏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肤晓。三九已至认然,卻和暖如春材原,著一層夾襖步出監(jiān)牢的瞬間季眷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工子刮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留威酒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓葵孤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橱赠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容

  • Google文件系統(tǒng) GFS是一個可擴展的分布式文件系統(tǒng)狭姨,用于大型的、分布式的饼拍、對大量數(shù)據(jù)進行訪問的應用赡模。它運行于...
    lucode閱讀 3,606評論 0 2
  • feisky云計算师抄、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,843評論 0 5
  • 分布式文件系統(tǒng)的主要功能有兩個:一個是存儲文檔、圖像叨吮、視頻之類的Blob類型數(shù)據(jù)辆布;另外一個是作為分布式表格系統(tǒng)的持...
    olostin閱讀 3,146評論 1 5
  • 用來dump目標文件的class信息的工具茶鉴。它利用Objective-C語言的runtime的特性锋玲,將存儲在mac...
    WMSmile閱讀 18,140評論 7 18
  • 一蜂怎、引述: ??針對《快速開發(fā)電商平臺》置尔,我們上一篇文章分享了關于微信和支付寶支付的封裝杠步,杜文全支付封裝,在發(fā)起支...
    全棧攻城獅DWQ閱讀 6,321評論 1 8