自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何學(xué)習(xí)分布式系統(tǒng)?一文全Get!

大數(shù)據(jù) 分布式
本文將從基本概念、架構(gòu)并結(jié)合自己學(xué)習(xí)工作中的感悟,闡述如何學(xué)習(xí)分布式系統(tǒng)。由于分布式系統(tǒng)理論體系非常龐大,知識面非常廣博,筆者能力有限,不足之處,歡迎討論交流。

分布式系統(tǒng)在互聯(lián)網(wǎng)公司中的應(yīng)用已經(jīng)非常普遍,開源軟件層出不窮。hadoop生態(tài)系統(tǒng),從hdfs到hbase,從mapreduce到spark,從storm到spark streaming, heron, flink等等,如何在開源的汪洋中不會迷失自己?本文將從基本概念、架構(gòu)并結(jié)合自己學(xué)習(xí)工作中的感悟,闡述如何學(xué)習(xí)分布式系統(tǒng)。由于分布式系統(tǒng)理論體系非常龐大,知識面非常廣博,筆者能力有限,不足之處,歡迎討論交流。

常見的分布式系統(tǒng)分為數(shù)據(jù)存儲系統(tǒng)如hdfs,hbase;數(shù)據(jù)處理計算系統(tǒng)如storm、spark、flink;數(shù)據(jù)存儲兼分析混合系統(tǒng),這類系統(tǒng)在數(shù)據(jù)存儲的基礎(chǔ)上提供了復(fù)雜的數(shù)據(jù)搜索查詢功能,如elastic search、druid。對于存儲兼計算的系統(tǒng),我們?nèi)匀豢梢苑珠_分析,所以本文會從數(shù)據(jù)存儲和計算兩種系統(tǒng)來論述。

文章的大致結(jié)構(gòu):第一部分,分布式系統(tǒng)的基本概念;第二、三部分分別詳細(xì)論述數(shù)據(jù)存儲和數(shù)據(jù)計算系統(tǒng);最后一部分總結(jié)。

概念

分布式系統(tǒng): 每個人都在提分布式系統(tǒng),那么什么是分布式系統(tǒng)?其基本概念就是組件分布在網(wǎng)絡(luò)計算機(jī)上,組件之間僅僅通過消息傳遞來通信并協(xié)調(diào)行動。

A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages. (摘自分布式系統(tǒng)概念和設(shè)計)

  • 節(jié)點(diǎn): 節(jié)點(diǎn)可以理解為上述概念提到的組件,其實(shí)完成一組完整邏輯的程序個體,對應(yīng)于server上的一個獨(dú)立進(jìn)程。一提到節(jié)點(diǎn),就會考慮節(jié)點(diǎn)是有狀態(tài)還是無狀態(tài)的?判斷標(biāo)準(zhǔn)很簡單,該獨(dú)立節(jié)點(diǎn)是否維護(hù)著本地存儲的一些狀態(tài)信息,或者節(jié)點(diǎn)是不是可以隨時遷移到其他server上而保持節(jié)點(diǎn)的行為和以前一致,如果是的話,則該節(jié)點(diǎn)是無狀態(tài),否則是有狀態(tài)的。
  • 異常: 異常處理可以說是分布式系統(tǒng)的核心問題,那么分布式異常處理相對于單機(jī)來說,有什么不同呢?在單機(jī)系統(tǒng)中,對于程序的處理結(jié)果是可以預(yù)知的,要么成功,要么失敗,結(jié)果很明確。可在分布式環(huán)境中,處理結(jié)果除了明確返回成功或失敗,還有另外一種狀態(tài):超時,那超時意味著處理結(jié)果完全不確定,有可能成功執(zhí)行,也有可能執(zhí)行失敗,也有可能根本沒執(zhí)行,這給系統(tǒng)開發(fā)帶來了很大的難度。其實(shí)各種各樣的分布式協(xié)議就是保證系統(tǒng)在各種異常情形下仍能正常的工作,所以在學(xué)習(xí)分布式系統(tǒng)時,要著重看一下文檔異常處理fault-tolerance章節(jié)。
  • CAP理論: 學(xué)習(xí)分布式系統(tǒng)中需要重要理解的理論,同時在架構(gòu)設(shè)計中也可以用到這個理論,例如在一些情形下我們可以通過降低一致性來提高系統(tǒng)的可用性,將數(shù)據(jù)的每次數(shù)據(jù)庫更新操作變成批量操作就是典型的例子。

CAP理論,三個字母代表了系統(tǒng)中三個相互矛盾的屬性:

  • C(Consistency):強(qiáng)一致性,保證數(shù)據(jù)中的數(shù)據(jù)完全一致;
  • A(Available):在系統(tǒng)異常時,仍然可以提供服務(wù),注:這兒的可用性,一方面要求系統(tǒng)可以正常的運(yùn)行返回結(jié)果,另一方面同樣對響應(yīng)速度有一定的保障;
  • P(Tolerance to the partition of network ):既然是分布式系統(tǒng),很多組件都是部署在不同的server中,通過網(wǎng)絡(luò)通信協(xié)調(diào)工作,這就要求在某些節(jié)點(diǎn)服發(fā)生網(wǎng)絡(luò)分區(qū)異常,系統(tǒng)仍然可以正常工作。

CAP 理論指出,無法設(shè)計一種分布式協(xié)議同時完全具備CAP屬性。

從以上CAP的概念我們得出一個結(jié)論,在技術(shù)選型時,根據(jù)你的需求來判斷是需要AP高可用性的系統(tǒng)(容忍返回不一致的數(shù)據(jù))還是CP強(qiáng)一致性的系統(tǒng),或者根據(jù)系統(tǒng)提供的參數(shù)在AC之間權(quán)衡。(可能會有讀者會問,為什么一定需要P呢?既然是分布式系統(tǒng),在網(wǎng)絡(luò)分區(qū)異常情況下仍然正常提供服務(wù)是必須的。)

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

當(dāng)數(shù)據(jù)量太大以及已經(jīng)超過單機(jī)所能處理的極限時,就需要使用到數(shù)據(jù)存儲分布式系統(tǒng)。無論是選擇開源系統(tǒng)還是自己設(shè)計,第一個要考慮的問題就是數(shù)據(jù)如何分布式化。

數(shù)據(jù)分布方式

哈希方式: 哈希方式是最常見的數(shù)據(jù)分布方式??梢院唵蜗胂笥幸粋€大的hash表,其中每個桶對應(yīng)的一臺存儲服務(wù)器,每條數(shù)據(jù)通過某種方式計算出其hash值分配到對應(yīng)的桶中。 int serverId = data.hashcode % serverTotalNum 上面只是一個簡單的計算公式示例,通過這種方式就可以將數(shù)據(jù)分配到不同的服務(wù)器上。

  • 優(yōu)點(diǎn):不需要存儲數(shù)據(jù)和server映射關(guān)系的meta信息,只需記錄serverId和server ip映射關(guān)系即可。
  • 缺點(diǎn):可擴(kuò)展性不高,當(dāng)集群規(guī)模需要擴(kuò)展時,集群中所有的數(shù)據(jù)需要遷移,即使在最優(yōu)情況下——集群規(guī)模成倍擴(kuò)展,仍然需要遷移集群一半的數(shù)據(jù)(這個問題有時間可以考慮一下,為啥只需要遷移一半?);另一個問題:數(shù)據(jù)通過某種hash計算后都落在某臺服務(wù)器上,造成數(shù)據(jù)傾斜(data skew)問題。
  • 應(yīng)用例子:ElasticSearch數(shù)據(jù)分布就是hash方式,根據(jù)routingId取模映射到對應(yīng)到不同node上。

數(shù)據(jù)范圍分布: 將數(shù)據(jù)的某個特征值按照值域分為不同區(qū)間。比如按時間、區(qū)間分割,不同時間范圍劃分到不同server上。

  • 優(yōu)點(diǎn):數(shù)據(jù)區(qū)間可以自由分割,當(dāng)出現(xiàn)數(shù)據(jù)傾斜時,即某一個區(qū)間的數(shù)據(jù)量非常大,則可以將該區(qū)間split然后將數(shù)據(jù)進(jìn)行重分配;集群方便擴(kuò)展,當(dāng)添加新的節(jié)點(diǎn),只需將數(shù)據(jù)量多的節(jié)點(diǎn)數(shù)據(jù)遷移到新節(jié)點(diǎn)即可。
  • 缺點(diǎn):需要存儲大量的元信息(數(shù)據(jù)區(qū)間和server的對應(yīng)關(guān)系)。
  • 應(yīng)用例子:Hbase的數(shù)據(jù)分布則是利用data的rowkey進(jìn)行區(qū)間劃分到不同的region server,而且支持region的split。

數(shù)據(jù)量分布: 按數(shù)據(jù)量分布,可以考慮一個簡單例子:當(dāng)使用log文件記錄一些系統(tǒng)運(yùn)行的日志信息時,當(dāng)日志文件達(dá)到一定大小,就會生成新的文件開始記錄后續(xù)的日志信息。這樣的存儲方式和數(shù)據(jù)的特征類型沒有關(guān)系,可以理解成將一個大的文件分成固定大小的多個block。

  • 優(yōu)點(diǎn):不會有數(shù)據(jù)傾斜的問題,而且數(shù)據(jù)遷移時速度非常快(因為一個文件由多個block組成,block在不同的server上,遷移一個文件可以多個server并行復(fù)制這些block)。
  • 缺點(diǎn): 需要存儲大量的meta信息(文件和block的對應(yīng)關(guān)系,block和server的對應(yīng)關(guān)系)。
  • 應(yīng)用例子:Hdfs的文件存儲按數(shù)據(jù)量block分布。

一致性哈希: 前文剛提到的哈希方式,當(dāng)添加刪除節(jié)點(diǎn)時候,所有節(jié)點(diǎn)都會參與到數(shù)據(jù)的遷移,整個集群都會受到影響。那么一致性哈??梢院芎玫慕鉀Q這個問題。一致性哈希和哈希的數(shù)據(jù)分布方式大概一致,唯一不同的是一致性哈希hash的值域是個環(huán)。

  • 優(yōu)點(diǎn):集群可擴(kuò)展性好,當(dāng)增加刪除節(jié)點(diǎn),只影響相鄰的數(shù)據(jù)節(jié)點(diǎn)。
  • 缺點(diǎn):上面的優(yōu)點(diǎn)同時也是缺點(diǎn),當(dāng)一個節(jié)點(diǎn)掛掉時,將壓力全部轉(zhuǎn)移到相鄰節(jié)點(diǎn),有可能將相鄰節(jié)點(diǎn)壓垮。
  • 應(yīng)用例子:Cassandra數(shù)據(jù)分布使用的是一致性hash,只不過使用的是一致性hash改良版:虛擬節(jié)點(diǎn)的一致性hash(有興趣的可以研究下)。

討論完數(shù)據(jù)分布問題,接下來該考慮如何解決當(dāng)某個節(jié)點(diǎn)服務(wù)不可達(dá)的時候系統(tǒng)仍然可以正常工作(分布式系統(tǒng)CAP中網(wǎng)絡(luò)分區(qū)異常問題)?這個問題的解決方案說起來很簡單,就是將數(shù)據(jù)的存儲增加多個副本,而且分布在不同的節(jié)點(diǎn)上,當(dāng)某個節(jié)點(diǎn)掛掉的時候,可以從其他數(shù)據(jù)副本讀取。

引入多個副本后,引來了一系列問題:多個副本之間,讀取時以哪個副本的數(shù)據(jù)為準(zhǔn)呢,更新時什么才算更新成功,是所有副本都更新成功還是部分副本更新成功即可認(rèn)為更新成功?這些問題其實(shí)就是CAP理論中可用性和一致性的問題。其中primary-secondary副本控制模型則是解決這類問題行之有效的方法。

primary-secondary控制模型

如何學(xué)習(xí)分布式系統(tǒng)?一文全Get!

 

主從(primary-secondary )模型是一種常見的副本更新讀取模型,這種模型相對來說簡單,所有的副本相關(guān)控制都由中心節(jié)點(diǎn)控制,數(shù)據(jù)的并發(fā)修改同樣都由主節(jié)點(diǎn)控制,這樣問題就可以簡化成單機(jī)問題,極大的簡化系統(tǒng)復(fù)雜性。

注:常用的副本更新讀取架構(gòu)有兩種:主從(primary-secondary)和去中心化(decentralized)結(jié)構(gòu),其中主從結(jié)構(gòu)較為常見,而去中心化結(jié)構(gòu)常采用paxos、raft、vector time等協(xié)議,這里由于本人能力有限,就不再這兒敘述了,有興趣可以自己學(xué)習(xí),歡迎補(bǔ)充。

其中涉及到主從副本操作有以下幾種:

副本的更新

副本更新基本流程:數(shù)據(jù)更新操作發(fā)到primary節(jié)點(diǎn),由primary將數(shù)據(jù)更新操作同步到其他secondary副本,根據(jù)其他副本的同步結(jié)果返回客戶端響應(yīng)。各類數(shù)據(jù)存儲分布式系統(tǒng)的副本更新操作流程大體是一樣的,唯一不同的是primary副本更新操作完成后響應(yīng)客戶端時機(jī)的不同,這與系統(tǒng)可用性和一致性要求密切相關(guān)。

以mysql的master slave簡單說明下,通常情況下,mysql的更新只需要master更新成功即可響應(yīng)客戶端,slave可以通過binlog慢慢同步,這種情形讀取slave會有一定的延遲,一致性相對較弱,但是系統(tǒng)的可用性有了保證;另一種slave更新策略,數(shù)據(jù)的更新操作不僅要求master更新成功,同時要求slave也要更新成功,primary和secondray數(shù)據(jù)保持同步,系統(tǒng)保證強(qiáng)一致性,但可用性相對較差,響應(yīng)時間變長。

上述的例子只有兩個副本,如果要求強(qiáng)一致性,所有副本都更新完成才認(rèn)為更新成功,響應(yīng)時間相對來說也可以接受,但是如果副本數(shù)更多,有沒有什么方法在保證一定一致性同時滿足一定的可用性呢?這時就需要考慮Quorum協(xié)議,其理論可以用一個簡單的數(shù)學(xué)問題來說明:

有N個副本,其中在更新時有W個副本更新成功,那我們讀取R個副本,W、R在滿足什么條件下保證我們讀取的R個副本一定有一個副本是最新數(shù)據(jù)(假設(shè)副本都有一個版本號,版本號大的即為最新數(shù)據(jù))?

問題的答案是:W+R > N (有興趣的可以思考下)

通過quorum協(xié)議,在保證一定的可用性同時又保證一定的一致性的情形下,設(shè)置副本更新成功數(shù)為總副本數(shù)的一半(即N/2+1)性價比最高。(看到這兒有沒有想明白為什么zookeeper server數(shù)最好為基數(shù)個?)

副本的讀取

副本的讀取策略和一致性的選擇有關(guān),如果需要強(qiáng)一致性,我們可以只從primary副本讀取,如果需要最終一致性,可以從secondary副本讀取結(jié)果,如果需要讀取最新數(shù)據(jù),則按照quorum協(xié)議要求,讀取相應(yīng)的副本數(shù)。

副本的切換

當(dāng)系統(tǒng)中某個副本不可用時,需要從剩余的副本之中選取一個作為primary副本來保證后續(xù)系統(tǒng)的正常執(zhí)行。這兒涉及到兩個問題:

  • 副本狀態(tài)的確定以及防止brain split問題:一般方法是利用zookeeper中的sesstion以及臨時節(jié)點(diǎn),其基本原理則是lease協(xié)議和定期heartbeat。Lease協(xié)議可以簡單理解成參與雙方達(dá)成一個承諾,針對zookeeper,這個承諾就是在session有效時間內(nèi),我認(rèn)為你的節(jié)點(diǎn)狀態(tài)是活的是可用的,如果發(fā)生session timeout,認(rèn)為副本所在的服務(wù)已經(jīng)不可用,無論誤判還是服務(wù)真的宕掉了,通過這種機(jī)制可以防止腦裂的發(fā)生。但這樣會引起另外一個問題:當(dāng)在session timeout期間,primary 副本服務(wù)掛掉了,這樣會造成一段時間內(nèi)的服務(wù)不可用。
  • primary副本的確定:這個問題和副本讀取最新數(shù)據(jù)其實(shí)是一個問題,可以利用quoram以及全局版本號確定primary副本。zookeeper在leader選舉的過程中其實(shí)利用了quoram以及全局事務(wù)id——zxid確定primary副本。

存儲架構(gòu)模型

關(guān)于數(shù)據(jù)的分布和副本的模型這些細(xì)節(jié)問題已經(jīng)詳細(xì)敘述,那么從系統(tǒng)整體架構(gòu)來看,數(shù)據(jù)存儲的一般流程和主要模塊都有哪些呢?從元數(shù)據(jù)存儲以及節(jié)點(diǎn)之間的membership管理方面來看,主要分以下兩類:

中心化的節(jié)點(diǎn)membership管理架構(gòu)

如何學(xué)習(xí)分布式系統(tǒng)?一文全Get!

這類系統(tǒng)主要分為三個模塊:client模塊,負(fù)責(zé)用戶和系統(tǒng)內(nèi)部模塊的通信;master節(jié)點(diǎn)模塊,負(fù)責(zé)元數(shù)據(jù)的存儲以及節(jié)點(diǎn)健康狀態(tài)的管理;data節(jié)點(diǎn)模塊,用于數(shù)據(jù)的存儲和數(shù)據(jù)查詢返回。

數(shù)據(jù)的查詢流程通常分兩步:

  1. 向master節(jié)點(diǎn)查詢數(shù)據(jù)對應(yīng)的節(jié)點(diǎn)信息;
  2. 根據(jù)返回的節(jié)點(diǎn)信息連接對應(yīng)節(jié)點(diǎn),返回相應(yīng)的數(shù)據(jù)。

分析一下目前常見的數(shù)據(jù)存儲系統(tǒng),從hdfs,hbase再到Elastic Search,通過與上述通用系統(tǒng)對比,發(fā)現(xiàn):master節(jié)點(diǎn)模塊具體對應(yīng)hdfs的namenode、hbase的hMaster、Elastic Search的master節(jié)點(diǎn);data節(jié)點(diǎn)對應(yīng)hdfs的datanode、hbase的region server、Elastic Search的data node。

去中心化的節(jié)點(diǎn)membership管理架構(gòu)

如何學(xué)習(xí)分布式系統(tǒng)?一文全Get!

與上一模型比較,其最大的變化就是該架構(gòu)中不存在任何master節(jié)點(diǎn),系統(tǒng)中的每個節(jié)點(diǎn)可以做類似master的任務(wù):存儲系統(tǒng)元信息以及管理集群節(jié)點(diǎn)。

數(shù)據(jù)的查詢方式也有所不同,client可以訪問系統(tǒng)中的任意節(jié)點(diǎn),而不再局限于master節(jié)點(diǎn),具體查詢流程如下:1. 查詢系統(tǒng)中任意節(jié)點(diǎn),如果該數(shù)據(jù)在此節(jié)點(diǎn)上則返回相應(yīng)的數(shù)據(jù),如果不在該節(jié)點(diǎn),則返回對應(yīng)數(shù)據(jù)的節(jié)點(diǎn)地址,執(zhí)行第二步;2. 獲得數(shù)據(jù)對應(yīng)的地址后向相關(guān)請求數(shù)據(jù)。

節(jié)點(diǎn)之間共享狀態(tài)信息是如何做到的呢?常用的方法是使用如gossip的協(xié)議以及在此基礎(chǔ)之上開發(fā)的serf框架,感興趣的話可以參考redis cluster 和 consul實(shí)現(xiàn)。

數(shù)據(jù)計算處理系統(tǒng)

常用的數(shù)據(jù)計算主要分為離線批量計算,可以是實(shí)時計算,也可以是準(zhǔn)實(shí)時mini-batch計算,雖然開源的系統(tǒng)很多,且每個系統(tǒng)都有其側(cè)重點(diǎn),但有些問題卻是共性相通的。

數(shù)據(jù)投遞策略

在數(shù)據(jù)處理中首先要考慮一個問題,我們的數(shù)據(jù)記錄在系統(tǒng)中會被處理幾次(包括正常情形和異常情形):

  • at most once:數(shù)據(jù)處理最多一次,這種語義在異常情況下會有數(shù)據(jù)丟失;
  • at least once:數(shù)據(jù)處理最少一次,這種語義會造成數(shù)據(jù)的重復(fù);
  • exactly once:數(shù)據(jù)只處理一次,這種語義支持是最復(fù)雜的,要想完成這一目標(biāo)需要在數(shù)據(jù)處理的各個環(huán)節(jié)做到保障。
  • 如何做到exactly once, 需要在數(shù)據(jù)處理各個階段做些保證:
  • 數(shù)據(jù)接收:由不同的數(shù)據(jù)源保證。
  • 數(shù)據(jù)傳輸:數(shù)據(jù)傳輸可以保證exactly once。
  • 數(shù)據(jù)輸出:根據(jù)數(shù)據(jù)輸出的類型確定,如果數(shù)據(jù)的輸出操作對于同樣的數(shù)據(jù)輸入保證冪等性,這樣就很簡單(比如可以把kafka的offset作為輸出mysql的id),如果不是,要提供額外的分布式事務(wù)機(jī)制如兩階段提交等等。

異常任務(wù)的處理

異常處理相對數(shù)據(jù)存儲系統(tǒng)來說簡單很多,因為數(shù)據(jù)計算的節(jié)點(diǎn)都是無狀態(tài)的,只要啟動任務(wù)副本即可。

注意:異常任務(wù)除了那些失敗、超時的任務(wù),還有一類特殊任務(wù)——straggler(拖后腿)任務(wù),一個大的Job會分成多個小task并發(fā)執(zhí)行,發(fā)現(xiàn)某一個任務(wù)比同類型的其他任務(wù)執(zhí)行要慢很多(忽略數(shù)據(jù)傾斜導(dǎo)致執(zhí)行速度慢的因素)。

其中任務(wù)恢復(fù)策略有以下幾種:

  • 簡單暴力,重啟任務(wù)重新計算相關(guān)數(shù)據(jù),典型應(yīng)用:storm,當(dāng)某個數(shù)據(jù)執(zhí)行超時或失敗,則將該數(shù)據(jù)從源頭開始在拓?fù)渲兄匦掠嬎恪?/li>
  • 根據(jù)checkpoint重試出錯的任務(wù),典型應(yīng)用:mapreduce,一個完整的數(shù)據(jù)處理是分多個階段完成的,每個階段(map 或者reduce)的輸出結(jié)果都會保存到相應(yīng)的存儲中,只要重啟任務(wù)重新讀取上一階段的輸出結(jié)果即可繼續(xù)開始運(yùn)行,不必從開始重新執(zhí)行該任務(wù)。

背壓——Backpressure

在數(shù)據(jù)處理中,經(jīng)常會擔(dān)心這樣一個問題:數(shù)據(jù)處理的上游消費(fèi)數(shù)據(jù)速度太快,會不會壓垮下游數(shù)據(jù)輸出端如mysql等。 通常的解決方案:上線前期我們會做詳細(xì)的測試,評估數(shù)據(jù)下游系統(tǒng)承受的最大壓力,然后對數(shù)據(jù)上游進(jìn)行限流的配置,比如限制每秒最多消費(fèi)多少數(shù)據(jù)。其實(shí)這是一個常見的問題,現(xiàn)在各個實(shí)時數(shù)據(jù)處理系統(tǒng)都提供了背壓的功能,包括spark streaming、storm等,當(dāng)下游的數(shù)據(jù)處理速度過慢,系統(tǒng)會自動降低上游數(shù)據(jù)的消費(fèi)速度。

對背壓感興趣朋友們,或者有想法自己實(shí)現(xiàn)一套數(shù)據(jù)處理系統(tǒng),可以參考Reactive Stream,該項目對通用數(shù)據(jù)處理提供了一種規(guī)范,采用這種規(guī)范比較有名的是akka。

數(shù)據(jù)處理通用架構(gòu)

數(shù)據(jù)處理的架構(gòu)大抵是相似的,通常包含以下幾個模塊:

  • client: 負(fù)責(zé)計算任務(wù)的提交。
  • scheduler : 計算任務(wù)的生成和計算資源的調(diào)度,同時還包含計算任務(wù)運(yùn)行狀況的監(jiān)控和異常任務(wù)的重啟。
  • worker:計算任務(wù)會分成很多小的task, worker負(fù)責(zé)這些小task的執(zhí)行同時向scheduler匯報當(dāng)前node可用資源及task的執(zhí)行狀況。

如何學(xué)習(xí)分布式系統(tǒng)?一文全Get!

上圖是通用的架構(gòu)模型圖,有些人會問這是hadoop v1版本的mapreduce計算框架圖,現(xiàn)在都已經(jīng)yarn模式的新的計算框架圖,誰還用這種模式?哈哈,說的對,但是現(xiàn)在仍然有些處理框架就是這種模型————storm。

不妨把圖上的一些概念和storm的概念映射起來:Job tracker 對應(yīng)于 nimbus,task tracker 對應(yīng)于 supervisor,每臺supervisor 同樣要配置worker slot,worker對應(yīng)于storm中的worker。 這樣一對比,是不是就覺得一樣了?

這種框架模型有它的問題,責(zé)任不明確,每個模塊干著多樣工作。例如Job tracker不僅要監(jiān)控任務(wù)的執(zhí)行狀態(tài),還要負(fù)責(zé)任務(wù)的調(diào)度。TaskTracker也同樣,不僅要監(jiān)控task的狀態(tài)、執(zhí)行,同樣還要監(jiān)控節(jié)點(diǎn)資源的使用。

如何學(xué)習(xí)分布式系統(tǒng)?一文全Get!

針對以上問題,基于yarn模式的新的處理架構(gòu)模型,將任務(wù)執(zhí)行狀態(tài)的監(jiān)控和任務(wù)資源的調(diào)度分開。原來的Job tracker分為resource manger 負(fù)責(zé)資源的調(diào)度,任務(wù)執(zhí)行的監(jiān)控則交給每個appMaster來負(fù)責(zé),原來的task tracker,變?yōu)榱薾ode manager,負(fù)責(zé)資源的監(jiān)控和task的啟動,而task的執(zhí)行狀態(tài)和異常處理則交給appMaster處理。

同樣的,twitter 根據(jù)storm架構(gòu)方面的一些問題,推出了新的處理框架heron,其解決的問題也是將任務(wù)的調(diào)度和任務(wù)的執(zhí)行狀態(tài)監(jiān)控責(zé)任分離,引入了新的概念Topology Master,類似于這兒的appMaster。

總結(jié)

分布式系統(tǒng)涵蓋的內(nèi)容非常多,本篇文章主要從整體架構(gòu)以及概念上介紹如何入門,學(xué)習(xí)過程有一些共性的問題,在這兒總結(jié)一下:

  • 先分析該系統(tǒng)是數(shù)據(jù)存儲還是計算系統(tǒng)。
  • 如果是數(shù)據(jù)存儲系統(tǒng),從數(shù)據(jù)分布和副本策略開始入手;如果是數(shù)據(jù)處理問題,從數(shù)據(jù)投遞策略入手。
  • 讀對應(yīng)系統(tǒng)架構(gòu)圖,對應(yīng)著常用的架構(gòu)模型,每個組件和已有的系統(tǒng)進(jìn)行類比,想一下這個組件類似于hdfs的namenode等等,最后在腦海里梳理下數(shù)據(jù)流的整個流程。
  • 在了解了系統(tǒng)的大概,著重看下文檔中fault tolerence章節(jié),看系統(tǒng)如何容錯,或者自己可以預(yù)先問些問題,比如如果一個節(jié)點(diǎn)掛了、一個任務(wù)掛了系統(tǒng)是如何處理這些異常的,帶著問題看文檔。
  • 文檔詳細(xì)讀了一遍,就可以按照官方文檔寫些hello world的例子了,詳細(xì)查看下系統(tǒng)配置項,隨著工作的深入就可以看些系統(tǒng)的細(xì)節(jié)和關(guān)鍵源碼了。

這次分享的文章內(nèi)容就這么多,中間難免有些紕漏,有任何問題歡迎隨時指正交流,大家共同進(jìn)步,謝謝大家。

作者:李峰,高級工程師,目前就職于LogicMonitor(提供SaaS服務(wù)監(jiān)控平臺,每天采集監(jiān)控數(shù)據(jù)上百億條),從事數(shù)據(jù)處理平臺架構(gòu),專注于分布式存儲流式計算。點(diǎn)擊閱讀原文查看交流實(shí)錄。

 

責(zé)任編輯:未麗燕 來源: CSDN
相關(guān)推薦

2016-10-25 14:35:05

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

2022-08-16 10:35:00

分布式高可用方案

2016-09-01 13:48:18

2025-03-05 00:05:50

2022-12-21 08:40:05

限流器分布式限流

2022-04-25 15:23:18

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

2018-07-11 09:34:55

分布式架構(gòu)高可用

2020-04-14 11:14:02

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

2020-09-21 09:15:12

系統(tǒng)

2023-09-20 22:56:45

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

2023-09-21 16:10:44

2024-07-09 08:11:56

2023-11-06 09:06:54

分布式一致性數(shù)據(jù)

2021-06-28 10:03:44

分布式數(shù)據(jù)庫架構(gòu)

2019-08-07 10:44:28

MySQLGoogle

2023-11-29 07:40:12

分布式

2020-05-12 11:38:08

存儲架構(gòu)分布式

2020-10-28 11:15:24

EPaxos分布式性算法

2021-07-06 15:01:07

分布式架構(gòu)系統(tǒng)

2019-08-27 11:00:38

技術(shù)數(shù)據(jù)庫設(shè)計
點(diǎn)贊
收藏

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