偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一文讀懂分布式系統(tǒng)

大數(shù)據(jù) 分布式
分布式系統(tǒng)是一個(gè)古老而寬泛的話題,而近幾年因?yàn)?“大數(shù)據(jù)” 概念的興起,又煥發(fā)出了新的青春與活力。除此之外,分布式系統(tǒng)也是一門理論模型與工程技法并重的學(xué)科內(nèi)容。

[[174408]]

我的 Phd 研究方向是分布式系統(tǒng),我老板也是搞分布式系統(tǒng)出身,我們實(shí)驗(yàn)室在這方面的積累還算不錯(cuò),所以借此問(wèn)題談?wù)勛约旱目捶āJ紫刃枰f(shuō)明的是,分布式系統(tǒng)是一個(gè)復(fù)雜且寬泛的研究領(lǐng)域,學(xué)習(xí)一兩門在線課程,看一兩本書可能都是不能完全覆蓋其所有內(nèi)容的。介于這篇文章是引導(dǎo)初學(xué)者入門,所以我個(gè)人覺(jué)得為初學(xué)者介紹一下當(dāng)前分布式系統(tǒng)領(lǐng)域的全貌,也許比直接推薦論文和課程更有幫助。當(dāng)初學(xué)者對(duì)這個(gè)領(lǐng)域建立起一個(gè)大的 Picture 之后,可以根據(jù)自己的興趣,有選擇性的深入不同領(lǐng)域進(jìn)行進(jìn)一步的學(xué)習(xí)。

這篇文章主要試圖回答以下兩個(gè)個(gè)問(wèn)題:

1. 近些年分布式系統(tǒng)領(lǐng)域都在做些什么。

2. 為什么現(xiàn)在投入分布式系統(tǒng)的學(xué)習(xí)和研究是值得的。

我會(huì)盡可能多的去介紹更 “實(shí)用” 的分布式系統(tǒng)知識(shí)。

什么是實(shí)用?例如:

Paxos 是分布式系統(tǒng)里一個(gè)重要而且實(shí)用的技術(shù)。

Consistent Hash 也是分布式系統(tǒng)里一個(gè)重要而且實(shí)用的技術(shù)。

MapReduce, Spark 等等都是很實(shí)用的系統(tǒng)。

什么不實(shí)用? 例如:

Paxos 算法的數(shù)學(xué)證明。(注意此處“不實(shí)用” 和 “不重要”的區(qū)別)

當(dāng)然,分布式系統(tǒng)實(shí)在是一個(gè)太寬泛的話題,本人才疏學(xué)淺,回答也僅僅可能側(cè)重于我所關(guān)心的領(lǐng)域和方向,很多地方都不能面面俱到。所以在此只能拋磚引玉, 蜻蜓點(diǎn)水,歡迎大家提出寶貴意見,我也會(huì)及時(shí)對(duì)文章進(jìn)行修改和補(bǔ)充。

分布式系統(tǒng)近些年都在做些什么?

分布式系統(tǒng)是一個(gè)古老而寬泛的話題,而近幾年因?yàn)?“大數(shù)據(jù)” 概念的興起,又煥發(fā)出了新的青春與活力。除此之外,分布式系統(tǒng)也是一門理論模型與工程技法并重的學(xué)科內(nèi)容。相比于機(jī)器學(xué)習(xí)這樣的研究方向,學(xué)習(xí)分布式系統(tǒng)的同學(xué)往往會(huì)感覺(jué):“入門容易,深入難”。的確,學(xué)習(xí)分布式系統(tǒng)幾乎不需要太多數(shù)學(xué)知識(shí)(相比于機(jī)器學(xué)習(xí)),這也是為什么會(huì)造成 “入門容易” 的錯(cuò)覺(jué)。然而一旦深入下去,往往需要我們?nèi)ンw會(huì) system 研究的 “簡(jiǎn)潔” 與 “美”,正如樓上 李沐 的回答中說(shuō)的那樣,系統(tǒng)工作是 “藝術(shù)” 而不是 “科學(xué)” ,這一點(diǎn)我覺(jué)得是系統(tǒng)研究工作最難,同時(shí)也是最精華的地方。總之把握一點(diǎn)原則:好的系統(tǒng)研究工作,尤其是分布式系統(tǒng)研究,一定是盡可能地用最簡(jiǎn)單、最直觀的方法去解決實(shí)際的問(wèn)題(看看 MapReduce 就知道了),因?yàn)楹?jiǎn)單就意味著實(shí)用。

總的來(lái)說(shuō),分布式系統(tǒng)要做的任務(wù)就是把多臺(tái)機(jī)器有機(jī)的組合、連接起來(lái),讓其協(xié)同完成一件任務(wù),可以是計(jì)算任務(wù),也可以是存儲(chǔ)任務(wù)。如果一定要給近些年的分布式系統(tǒng)研究做一個(gè)分類的話,我個(gè)人認(rèn)為大概可以包括三大部分:

1. 分布式存儲(chǔ)系統(tǒng)

2. 分布式計(jì)算系統(tǒng)

3. 分布式管理系統(tǒng)

近十年來(lái)在這三個(gè)方向上,毫無(wú)疑問(wèn), Google 都是開創(chuàng)者,甚至很多業(yè)內(nèi)人士都說(shuō),這十年是外界追隨谷歌技術(shù)的十年。我們之前說(shuō)到,分布式系統(tǒng)的研究是一門由實(shí)際問(wèn)題驅(qū)動(dòng)的研究,而 google 則是***需要面對(duì)這些實(shí)際問(wèn)題的公司。下面我們分別看看這三個(gè)方面工業(yè)界以及學(xué)術(shù)界這幾年都在做些什么。

分布式存儲(chǔ)系統(tǒng):

分布式存儲(chǔ)系統(tǒng)是一個(gè)非常古老的話題,同時(shí)也是分布式系統(tǒng)里最難,最復(fù)雜,涉及面最廣的問(wèn)題。 往細(xì)了分,分布式存儲(chǔ)系統(tǒng)大概可以分為四個(gè)子方向:

1. 結(jié)構(gòu)化存儲(chǔ)

2. 非結(jié)構(gòu)化存儲(chǔ)

3. 半結(jié)構(gòu)化存儲(chǔ)

4. In-memory 存儲(chǔ)

除了這四個(gè)子方向之外,分布式存儲(chǔ)系統(tǒng)還有一系列的理論、算法、技術(shù)作為支撐:例如 Paxos,CAP, ConsistentHash, Timing (時(shí)鐘), 2PC, 3PC 等等,這些內(nèi)容我們會(huì)在后面提到?,F(xiàn)在,我們先來(lái)看看上述四個(gè)子方向大致都在干些什么。

結(jié)構(gòu)化存儲(chǔ)(structured storage systems)

結(jié)構(gòu)化存儲(chǔ)的歷史非常古老,典型的場(chǎng)景就是事務(wù)處理系統(tǒng)或者關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)。傳統(tǒng)的結(jié)構(gòu)化存儲(chǔ)都是從單機(jī)做起的,比如大家耳熟能詳?shù)? MySQL。有句話說(shuō):MySQL的成長(zhǎng)史就是互聯(lián)網(wǎng)的成長(zhǎng)史。這一點(diǎn)也不為過(guò)。除了 MySQL 之外,PostgreSQL 也是近幾年來(lái)勢(shì)頭非常強(qiáng)勁的一個(gè) RDBMS. 我們發(fā)現(xiàn),傳統(tǒng)的結(jié)構(gòu)化存儲(chǔ)系統(tǒng)強(qiáng)調(diào)的是:(1)結(jié)構(gòu)化的數(shù)據(jù)(例如關(guān)系表)。(2)強(qiáng)一致性 (例如,銀行系統(tǒng),電商系統(tǒng)等場(chǎng)景)(3)隨機(jī)訪問(wèn)(索引,增刪查改,SQL 語(yǔ)言)。然而,正是由于這些性質(zhì)和限制,結(jié)構(gòu)化存儲(chǔ)系統(tǒng)的可擴(kuò)展性通常都不是很好,這在一定程度上限制了結(jié)構(gòu)化存儲(chǔ)在大數(shù)據(jù)環(huán)境下的表現(xiàn)。隨著摩爾定律面臨的瓶頸,傳統(tǒng)的單機(jī)關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)面臨著巨大的挑戰(zhàn)。不過(guò)真的沒(méi)辦法了嗎?在此我們先埋下一個(gè)伏筆:)

非結(jié)構(gòu)化存儲(chǔ) (no-structed storage systems)

非結(jié)構(gòu)化存儲(chǔ)和結(jié)構(gòu)化存儲(chǔ)不同的是,非結(jié)構(gòu)化存儲(chǔ)強(qiáng)調(diào)的是高可擴(kuò)展性,典型的系統(tǒng)就是分布式文件系統(tǒng)。分布式文件系統(tǒng)也是一個(gè)古老的研究話題,比如 70 年代的 Xerox Alto, 80 年代的 NFS, AFS, 90 年代 xFS 等等。然而,這些早期的分布式文件系統(tǒng)只是起到了網(wǎng)絡(luò)磁盤的作用, 其***的問(wèn)題就是不支持 容錯(cuò) (fault tolerance)和 錯(cuò)誤恢復(fù) (fault recovery)。而 Google 在 2003 年 SOSP 上推出的 GFS (google file system) 則是做出了里程碑的一步,其開源實(shí)現(xiàn)對(duì)應(yīng)為 HDFS. GFS 的主要思想包括:

(1)用 master 來(lái)管理 metadata。

(2)文件使用 64MB 的 chunks 來(lái)存儲(chǔ),并且在不同的 server 上保存多個(gè)副本。

(3)自動(dòng)容錯(cuò),自動(dòng)錯(cuò)誤恢復(fù)。

Google 設(shè)計(jì) gfs 最初的目的是為了存儲(chǔ)海量的日志文件以及網(wǎng)頁(yè)等文本信息,并且對(duì)其進(jìn)行批量處理(例如配合 mapreduce 為文檔建立倒排索引,計(jì)算網(wǎng)頁(yè) PageRank 等)。和結(jié)構(gòu)化存儲(chǔ)系統(tǒng)相比,雖然分布式文件系統(tǒng)的可擴(kuò)展性,吞吐率都非常好,但是幾乎無(wú)法支持隨機(jī)訪問(wèn)(random access)操作,通常只能進(jìn)行文件進(jìn)行追加(append)操作。而這樣的限制使得非結(jié)構(gòu)化存儲(chǔ)系統(tǒng)很難面對(duì)那些低延時(shí),實(shí)時(shí)性較強(qiáng)的應(yīng)用。

半結(jié)構(gòu)化存儲(chǔ) (semi-structure storage systems)的提出便是為了解決結(jié)非構(gòu)化存儲(chǔ)系統(tǒng)隨機(jī)訪問(wèn)性能差的問(wèn)題。我們通常會(huì)聽到一些流行的名詞,比如 NoSQL, Key-Value Store, 甚至包括對(duì)象存儲(chǔ),例如 protobuf,thrift 等等。這些都屬于半結(jié)構(gòu)化存儲(chǔ)研究的領(lǐng)域,其中以 NoSQL 近幾年的發(fā)展勢(shì)頭尤為強(qiáng)勁。NoSQL 系統(tǒng)既有分布式文件系統(tǒng)所具有的可擴(kuò)展性,又有結(jié)構(gòu)化存儲(chǔ)系統(tǒng)的隨機(jī)訪問(wèn)能力 (例如隨機(jī)update, read 操作),系統(tǒng)在設(shè)計(jì)時(shí)通常選擇簡(jiǎn)單鍵值(K-V)進(jìn)行存儲(chǔ),拋棄了傳統(tǒng) RDBMS 里復(fù)雜 SQL 查詢以及 ACID 事務(wù)。這樣做可以換取系統(tǒng)***的限度的可擴(kuò)展性和靈活性。

在 NoSQL 里比較有名系統(tǒng)包括:Google 的 Bigtable, Amazon 的 Dynamo, 以及開源界大名鼎鼎的 HBase,Cassandra 等. 通常這些 NoSQL 系統(tǒng)底層都是基于比較成熟的存儲(chǔ)引擎,比如 Bigtable 就是基于 LevelDB ( jeff dean 寫的,非常好的 C++ 源碼教程) ,底層數(shù)據(jù)結(jié)構(gòu)采用 LSM-Tree. 除了 LSM-Tree 之外 B-Tree (B+Tree)也是很成熟的存儲(chǔ)引擎數(shù)據(jù)結(jié)構(gòu)。

In-memory 存儲(chǔ)

隨著業(yè)務(wù)的并發(fā)越來(lái)越高,存儲(chǔ)系統(tǒng)對(duì)低延遲的要求也越來(lái)越高。 同時(shí)由于摩爾定律以及內(nèi)存的價(jià)格不斷下降,基于內(nèi)存的存儲(chǔ)系統(tǒng)也開始普及。 In-memory 存儲(chǔ)顧名思義就是將數(shù)據(jù)存儲(chǔ)在內(nèi)存中, 從而獲得讀寫的高性能。比較有名的系統(tǒng)包括 memcahed ,以及 Redis。 這些基于 K-V 鍵值系統(tǒng)的主要目的是為基于磁盤的存儲(chǔ)系統(tǒng)做 cache。還有一些偏向于內(nèi)存計(jì)算的系統(tǒng),比如可以追溯到普林斯頓 Kai Lee 教授早期的研究工作 distributed shared memory ( DSM ),斯坦福的 RamCloud, 以及最近比較火的基于 lineage 技術(shù)的 tachyon (Alluxio) 項(xiàng)目(Spark生態(tài)系統(tǒng)子項(xiàng)目)等等。

NewSQL

我們?cè)诮榻B結(jié)構(gòu)化存儲(chǔ)時(shí)說(shuō)到,單機(jī) RDBMS 系統(tǒng)在可擴(kuò)展性上面臨著巨大的挑戰(zhàn),然而 NoSQL 不能很好的支持關(guān)系模型。那是不是有一種系統(tǒng)能兼?zhèn)? RDBMS 的特性(例如:完整的 SQL 支持,ACID 事務(wù)支持),又能像 NoSQL 系統(tǒng)那樣具有強(qiáng)大的可擴(kuò)展能力呢? 2012 年 Google 在 OSDI 上發(fā)表的 Spanner,以及 2013 年在 SIGMOD 發(fā)表的 F1, 讓業(yè)界***次看到了關(guān)系模型和 NoSQL 在超大規(guī)模數(shù)據(jù)中心上融合的可能性。不過(guò)由于這些系統(tǒng)都太過(guò)于黑科技了,沒(méi)有大公司支持應(yīng)該是做不出來(lái)的。比如 Spanner 里用了原子鐘這樣的黑科技來(lái)解決時(shí)鐘同步問(wèn)題,打破光速傳輸?shù)南拗啤T谶@里只能對(duì) google 表示膜拜。

我們?cè)谥疤岬?,分布式存?chǔ)系統(tǒng)有一系列的理論、算法、技術(shù)作為支撐:例如 Paxos, CAP,Consistent Hash, Timing (時(shí)鐘), 2PC, 3PC 等等。那么如何掌握好這些技術(shù)呢?以我個(gè)人的經(jīng)驗(yàn),掌握這些內(nèi)容一定要理解其對(duì)應(yīng)的上下文。什么意思呢?就是一定要去思考為什么在當(dāng)下環(huán)境需要某項(xiàng)技術(shù),如果沒(méi)有這個(gè)技術(shù)用其它技術(shù)替代是否可行,而不是一味的陷入大量的細(xì)節(jié)之中。例如:如何掌握好 Paxos? Paxos本質(zhì)上來(lái)說(shuō)是一個(gè)三階段提交,更 high level 講是一個(gè)分布式鎖。

理解paxos必須一步一步從最簡(jiǎn)單的場(chǎng)景出發(fā),比如從最簡(jiǎn)單的 master-backup 出發(fā),發(fā)現(xiàn)不行,衍生出多數(shù)派讀寫,發(fā)現(xiàn)還是不行,再到 paxos. 之后再了解其變種,比如 fast paxos, multi-paxos. 同理為什么需要 Consistent Hash, 我們可以先思考如果用簡(jiǎn)單range partition 劃分?jǐn)?shù)據(jù)有什么問(wèn)題。再比如學(xué)習(xí) 2pc, 3pc 這樣的技術(shù)時(shí),可以想想他們和paxos 有什么關(guān)系,能否替代 paxos。

以上是我關(guān)于分布式存儲(chǔ)系統(tǒng)內(nèi)容的一些總結(jié),推薦一些相關(guān)的論文 ,有興趣的讀者可以看看:

1.The Google File System

2.Bigtable: A Distributed Storage System for Structured Data.

3.Dynamo: Amazon’s Highly Available Key-value …

4.Introduction to HBase Schema Design

5.Consistency Tradeoffs in Modern Distributed Database System Design

分布式計(jì)算系統(tǒng)

聊完了分布式存儲(chǔ)系統(tǒng),讓我們來(lái)聊聊分布式計(jì)算系統(tǒng) :) 首先解決一個(gè)很多初學(xué)分布式計(jì)算的同學(xué)的疑惑:分布式計(jì)算和并行計(jì)算是一回事嗎?最初我也有這樣的疑惑,而現(xiàn)在我的理解是這樣的:

  1. 傳統(tǒng)的并行計(jì)算要的是:投入更多機(jī)器,數(shù)據(jù)大小不變,計(jì)算速度更快。
  2. 分布式計(jì)算要求:投入更多的機(jī)器,能處理更大的數(shù)據(jù)。

換句話說(shuō)二者的出發(fā)點(diǎn)從一開始就不同,一個(gè)強(qiáng)調(diào) high performance, 一個(gè)強(qiáng)調(diào) scalability. 舉例來(lái)說(shuō),MapReduce 給業(yè)界帶來(lái)的真正的思考是什么?其實(shí)是給我們普及了 google 這樣級(jí)別的公司對(duì)真正意義上的「大數(shù)據(jù)」的理解。因?yàn)樵?04 年論文出來(lái)之前,搞并行計(jì)算的人壓根連 「容錯(cuò)」的概念都沒(méi)有。換句話說(shuō),分布式計(jì)算最為核心的部分就是「容錯(cuò)」,沒(méi)有容錯(cuò),分布式計(jì)算根本無(wú)從談起。MapReduce 統(tǒng)要做成這個(gè)樣子(map + reduce),其實(shí)就是為了容錯(cuò)。

然而很多初學(xué)分布式計(jì)算的同學(xué)對(duì)容錯(cuò)的概念多多少少是有誤解的。包括我在初學(xué) mapreduce 的時(shí)候也會(huì)思考:好好的計(jì)算怎么就會(huì)出錯(cuò)了呢?一方面,由于硬件的老化,有可能會(huì)導(dǎo)致某臺(tái)存儲(chǔ)設(shè)備沒(méi)有啟動(dòng)起來(lái),某臺(tái)機(jī)器的網(wǎng)卡壞了,甚至于計(jì)算運(yùn)行過(guò)程中斷電了,這些都是有可能的。然而最平凡發(fā)生的錯(cuò)誤是計(jì)算進(jìn)程被殺掉。因?yàn)? google 的運(yùn)行環(huán)境是共有集群,任何一個(gè)權(quán)限更高的進(jìn)程都可能 kill 掉你的計(jì)算進(jìn)程。設(shè)想在一個(gè)擁有幾千臺(tái)機(jī)器的集群中運(yùn)行,一個(gè)進(jìn)程都不被 kill 掉的概率幾乎為零。具體的容錯(cuò)機(jī)制我們會(huì)在后面介紹具體的系統(tǒng)時(shí)提到。

另一個(gè)有意思的話題是,隨著機(jī)器學(xué)習(xí)技術(shù)的興起,越來(lái)越多的分布式計(jì)算系統(tǒng)是為了機(jī)器學(xué)習(xí)這樣的應(yīng)用設(shè)計(jì)的,這也是我比較關(guān)注的研究領(lǐng)域,也會(huì)在后面重點(diǎn)談到。

如同分布式存儲(chǔ)系統(tǒng)一樣,我對(duì)分布式計(jì)算系統(tǒng)也做了一個(gè)分類,如下:

1. 傳統(tǒng)基于msg的系統(tǒng)

2. MapReduce-like 系統(tǒng)

3. 圖計(jì)算系統(tǒng)

4. 基于狀態(tài)(state)的系統(tǒng)

5. Streaming 系統(tǒng)

當(dāng)然不同的人可能會(huì)有不同的分類方法,不過(guò)大同小異。我們接下來(lái)聊聊這些系統(tǒng)都在干些什么。

傳統(tǒng)基于msg的系統(tǒng)

這類系統(tǒng)里比較有代表性的就是 MPI (message passing interface). 目前比較流行的兩個(gè) MPI 實(shí)現(xiàn)是 mpich2 和 openmpi . MPI 這個(gè)框架非常靈活,對(duì)程序的結(jié)構(gòu)幾乎沒(méi)有太多約束,以至于大家有時(shí)把 MPI 稱為一組接口 API, 而不是系統(tǒng)框架。在這些 API 里最常用的兩個(gè)就是 send 和 recv 接口(還有一系列非阻塞擴(kuò)展接口,例如:Isend, Irecv 等)。MPI 除了提供消息傳遞接口之外,其框架還實(shí)現(xiàn)了資源管理和分配,以及調(diào)度的功能。除此之外,MPI 在高性能計(jì)算里也被廣泛使用,通常可以和 Infiniband 這樣的高速網(wǎng)絡(luò)無(wú)縫結(jié)合。

除了 send 和 recv 接口之外,MPI 中另一個(gè)接口也值得注意,那就是 AllReduce. 這個(gè)接口在很多機(jī)器學(xué)習(xí)系統(tǒng)開發(fā)里都很用。因?yàn)楹芏嗖⑿袡C(jī)器學(xué)習(xí)系統(tǒng)都是各個(gè)進(jìn)程分別訓(xùn)練模型,然后再合適的時(shí)候(例如一輪迭代結(jié)束)大家同步一下答案,達(dá)成共識(shí),然后繼續(xù)迭代。這個(gè) “達(dá)成共識(shí)” 的操作往往可以很方便的通過(guò) AllReduce 來(lái)完成。 AllReduce 接口具有兩個(gè)優(yōu)點(diǎn):1. 高效。 2. 實(shí)用簡(jiǎn)單。 先說(shuō)說(shuō)為什么使用簡(jiǎn)單。使用 AllReduce 通常只需要在單機(jī)核心源碼里加入 AllReduce 一行代碼,就能完成并行化的功能。說(shuō) AllReduce 高效的原因是因?yàn)槠涞讓酉鬟f使用了 tree aggregation,盡可能的將計(jì)算分?jǐn)偟矫恳粋€(gè)節(jié)點(diǎn)。

可是,既然 AllReduce 這么好,為什么在實(shí)際大大規(guī)模計(jì)算中很少看到呢?原因很簡(jiǎn)單,就是因?yàn)?MPI 不支持容錯(cuò),所以很難擴(kuò)展到大規(guī)模集群之上。不過(guò)最近陳天奇寫了一個(gè)支持容錯(cuò)的 allreduce 接口,叫rabit,有興趣的同學(xué)可以關(guān)注一下。 大名鼎鼎的 xgboost 底層的分布式接口就是 rabit.

MapReduce-like 系統(tǒng)

這一類系統(tǒng)又叫作 dataflow 系統(tǒng),其中以 MapReduce (Hadoop) 和 Spark 為代表。其實(shí)在學(xué)術(shù)界很有很多類似的系統(tǒng)例如 Dryad, FlumeJava, Twister 等等。這一類系統(tǒng)的特點(diǎn)是將計(jì)算抽象成為 high-level operator, 例如像 map,reduce,filter 這樣的函數(shù)式算子,然后將算子組合成 DAG ,然后由后端的調(diào)度引擎進(jìn)行并行化調(diào)度。其中,MapReduce 系統(tǒng)屬于比較簡(jiǎn)單的 DAG,只有 map 和 reduce 兩層節(jié)點(diǎn)。MapReduce 這樣的系統(tǒng)之所以可以擴(kuò)展到超大規(guī)模的集群上運(yùn)行,就是因?yàn)槠渫陚涞娜蒎e(cuò)機(jī)制。在 Hadoop 社區(qū)還有很多基于 mapreduce 框架的衍生產(chǎn)品,比如 Hive (并行數(shù)據(jù)庫(kù)OLAP), Pig(交互式數(shù)據(jù)操作)等等。

MapReduce-like 的編程風(fēng)格和 MPI 截然相反。MapReduce對(duì)程序的結(jié)構(gòu)有嚴(yán)格的約束——計(jì)算過(guò)程必須能在兩個(gè)函數(shù)中描述:map 和 reduce;輸入和輸出數(shù)據(jù)都必須是一個(gè)一個(gè)的 records;任務(wù)之間不能通信,整個(gè)計(jì)算過(guò)程中唯一的通信機(jī)會(huì)是 map phase 和 reduce phase 之間的 shuffuling phase,這是在框架控制下的,而不是應(yīng)用代碼控制的。因?yàn)橛辛藝?yán)格的控制,系統(tǒng)框架在任何時(shí)候出錯(cuò)都可以從上一個(gè)狀態(tài)恢復(fù)。Spark 的 RDD 則是利用 Lineage,可以讓數(shù)據(jù)在內(nèi)存中完成轉(zhuǎn)換。

由于良好的擴(kuò)展性,許多人都機(jī)器學(xué)習(xí)算法的并行化任務(wù)放在了這些平臺(tái)之上。比較有名的庫(kù)包括 Mahout (基于Hadoop), 以及 MLI (基于 Spark) . 然而這些系統(tǒng)***缺點(diǎn)有兩點(diǎn):

1. 這些系統(tǒng)所能支持的機(jī)器學(xué)習(xí)模型通常都不是很大。導(dǎo)致這個(gè)問(wèn)題的主要原因是這系統(tǒng)在 push back 機(jī)器學(xué)習(xí)模型時(shí)都是粗粒度的把整個(gè)模型進(jìn)行回傳,導(dǎo)致了網(wǎng)絡(luò)通信的瓶頸。有些機(jī)器學(xué)習(xí)的模型可以大到無(wú)法想象,比如我們用 Field-aware factorization machine (FFM)做 criteo 的 ctr prediction 時(shí)模型大小可以達(dá)到100 GB.

2. 嚴(yán)格的 BSP 同步計(jì)算使得集群的效率變的很低。也就是說(shuō)系統(tǒng)很容易受到straggle的影響。

圖計(jì)算系統(tǒng)

圖計(jì)算系統(tǒng)是分布式計(jì)算里另一個(gè)分支,這些系統(tǒng)都是把計(jì)算過(guò)程抽象成圖,然后在不同節(jié)點(diǎn)分布式執(zhí)行,例如 PageRank 這樣的任務(wù),很適合用圖計(jì)算系統(tǒng)來(lái)表示。最早成名的圖計(jì)算系統(tǒng)當(dāng)屬 Google 的 pregel,該系統(tǒng)采用 BSP 模型,計(jì)算以 vectex 為中心。隨后又有一系列圖計(jì)算框架推出,例如:GPS (對(duì) Pregel 做了優(yōu)化,除了vectex-centric computation,還有 global computation,動(dòng)態(tài)調(diào)整分區(qū)等等。)Giraph / Hama 都是基于 Hadoop 的 Apache 的開源 BSP 圖計(jì)算項(xiàng)目。

除了同步(BSP)圖計(jì)算系統(tǒng)之外,異步圖計(jì)算系統(tǒng)里的佼佼者當(dāng)屬 GraphLab,該系統(tǒng)提出了 GAS 的編程模型。目前這個(gè)項(xiàng)目已經(jīng)該名為 dato.,專門推廣基于圖的大規(guī)模機(jī)器學(xué)習(xí)系統(tǒng)。

基于狀態(tài)(state)的系統(tǒng). 這一類系統(tǒng)主要包括 2010 年 OSDI 上推出的 Piccolo, 以及后來(lái) 2012 年 nips 上 Google 推出的 distbelief,再到后來(lái)被機(jī)器系學(xué)習(xí)領(lǐng)域廣泛應(yīng)用的 Parameter Server 架構(gòu)。這里我們重點(diǎn)介紹一下 Parameter Server 這個(gè)架構(gòu)。

我們之前說(shuō),MPI 由于不支持容錯(cuò)所以很難擴(kuò)展至大規(guī)模集群之中;MapReduce 系統(tǒng)無(wú)法支持大模型機(jī)器學(xué)習(xí)應(yīng)用,并且節(jié)點(diǎn)同步效率較低。用圖抽象來(lái)做機(jī)器學(xué)習(xí)任務(wù),很多問(wèn)題都不能很好的求解,比如深度學(xué)習(xí)中的多層結(jié)構(gòu)。而 Parameter Server 這種 state-centric 模型則把機(jī)器學(xué)習(xí)的模型存儲(chǔ)參數(shù)上升為主要組件,并且采用異步機(jī)制提升處理能力。參數(shù)服務(wù)器的概念最早來(lái)自于 Alex Smola 于 2010 年提出的并行 LDA 架構(gòu)。它通過(guò)采用分布式的 memcached 作為存放參數(shù)的存儲(chǔ),這樣就提供了有效的機(jī)制作用于不同worker節(jié)點(diǎn)同步模型參數(shù)。 Google 的 jeff dean 在 2012 年進(jìn)一步提出了***代 Google Brain 大規(guī)模神經(jīng)網(wǎng)絡(luò)的解決方案 Distbelief. 在后來(lái)的 CMU 的 Eric xing 以及百度少帥 李沐 都提出了更通用的 Parameter server 架構(gòu)。

如果要深入 Parameter server 系統(tǒng)的設(shè)計(jì),需要一些機(jī)器學(xué)習(xí)的背景,比如什么是 ssp 協(xié)議, 在此我們就不詳細(xì)討論了。

Streaming 系統(tǒng)

Streaming 系統(tǒng)聽名字就能看出來(lái)是為流式數(shù)據(jù)提供服務(wù)的。其中比較有名的系統(tǒng)包括 Storm, Spark Streaming, Flink 等等。由于本人對(duì)這個(gè)領(lǐng)域并不是很熟,就不詳細(xì)介紹了。

以上是我對(duì)分布式計(jì)算系統(tǒng)的一些介紹,其實(shí)每一個(gè)方向深入下去都是一個(gè)研究領(lǐng)域,在此推薦一些論文:

1.Scaling Distributed Machine Learning with the Parameter Server

2.Distributed GraphLab: A Framework for Machine Learning

3.Piccolo: Building Fast, Distributed Programs with Partitioned ..

4.Dryad: Distributed Data-parallel Programs from Sequential Building …

分布式管理系統(tǒng):

(未完待續(xù))

責(zé)任編輯:趙寧寧 來(lái)源: 36大數(shù)據(jù)
相關(guān)推薦

2016-09-01 13:48:18

2023-09-21 16:10:44

2023-09-20 22:56:45

分布式追蹤應(yīng)用程序

2019-08-07 10:44:28

MySQLGoogle

2024-05-27 10:42:55

2017-10-20 13:39:29

分布式系統(tǒng)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)量

2025-03-05 00:05:50

2022-08-16 10:35:00

分布式高可用方案

2022-12-21 08:40:05

限流器分布式限流

2022-04-25 15:23:18

分布式系統(tǒng)故障

2020-04-14 11:14:02

PostgreSQL分布式數(shù)據(jù)庫(kù)

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2023-06-19 13:57:00

數(shù)據(jù)系統(tǒng)

2024-07-09 08:11:56

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2018-09-28 14:06:25

前端緩存后端

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動(dòng)架構(gòu)數(shù)據(jù)

2023-11-06 09:06:54

分布式一致性數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)