1. 程式人生 > >【讀書精華分享】《分散式實時處理系統 原理、架構與實現》盧譽聲著/2016年

【讀書精華分享】《分散式實時處理系統 原理、架構與實現》盧譽聲著/2016年

【分享說明】:

我會花很多時間或淺或深的研讀一本書,然後總結一些提煉出來的精華,用簡短的語言,讓其他人能夠用很少的時間大致知道這本書能帶給自己的價值,如果適用自己,鼓勵買一本正本實體書細讀和收藏。

通篇會以原文目錄為結構,給出提煉內容,如果不重要或者一看目錄就懂的,會保留目錄,有不明白的,以原文學習為參照。

所有分享內容,為了區分,會以》開頭,可能有多行縮排,或差異化顏色表示。

【書名】:《分散式實時處理系統 原理、架構與實現》

【作者】:盧譽聲,Autodesk(全球很大的軟體公司)系統軟體研發工程師,從事平臺架構方面的研發工作。通過全文來看,作者在大資料框架方面,尤其是storm,做了很深入的研究。

【發行】:2016年

【適用】:大資料行業從業務者,希望借鑑別人經驗的,希望手把手實現一個分散式計算框架的。想學習完整知識體系的不適用。

【總結】:

1、作者談不上是專業的研究人員,全文更像是一個總結和分享。

2、前面以storm等鋪墊了很多知識背景,彙總借鑑為主,有點像論文。後面從0實現一個分散式框架,很細緻。

3、全文融匯了較強的工作經驗分享,storm等大資料從業者,可以吸取不少的經驗,後文在AWS和阿里部署都考慮到可見一斑。

4、經驗有餘但知識體系不健全是本書的不足,不適用於做教材,也不太適用於0基礎人員。

5、全文實踐細節很到位,讀一遍之後,很需要抽時間跟著作者的程式碼,邊讀邊實踐一回。

【章節總結】

第1章介紹了分散式相關的一些理論知識,分享了幾個常用框架

2-3章論文似的介紹了網路通訊和分散式通訊技術,有經驗的忽略。

4章鋪墊了c++,故事模式的把c++開發相關的技術都貫穿起來,有所偏離,但非常贊,強烈建議c++中低階從業者完整看一遍。

5章介紹storm等框架的一些實現細節,看一下,這個是後續實踐的基礎。

6-14以stom框架為參考,自行實現了一個分散式計算框架Hurricane,比stom更猛烈的風,命名有意思。

15-16章以具體的需求為例,應用了Hurricane,想收穫實踐經驗的值得看一遍。

17章AWS和阿里雲部署,由於框架是自實現的,相當於使用雲主機,偏運維。

【正式分享】

注:由於作者偏實踐,分享內容融入一些我個人的解釋和補填的資訊,原文找不到的。我自己已經有一些相關知識背景,初學者可能需要看的再仔細一些。

序一

序二

序三

前言

1章分散式計算概述1

1.1分散式概念1

1.2分散式計算及其原理2

》一般3:

設計分散式模型:拆分、通訊、彙總

分散式任務分配演算法

編寫分散式執行程式

1.3分散式系統特性3

1.3.1容錯性3

》多指節點故障而非程式碼錯誤

1.3.2高可擴充套件性4

》動態增減功能和資源

1.3.3開放性5

》系統整合能力

1.3.4併發處理能力5

CAP,一致性,可用性,分割槽容錯

1.3.5透明性6

》內部細節外部不可見

1.4通用分散式計算系統6

1.4.1ApacheHadoop6

》特性

高可靠

高可擴充套件,自動負載均衡

高效,並行讀取資料

高容錯,冗餘儲存資料

低成本,開源免費

注:HDFS非高實時,MapReduce基於HDFS

1.4.2ApacheSpark8

》特點

執行速度極快,資料儲存於記憶體而不是HDFS

支援多種資料模式,資料來源豐富

更多通用計算模型(SQL介面、流模型、機器學習、GraphX圖片計算等介面)

注:Spark是任務式的,非實時

1.4.3ApacheStorm9

》特點

高可擴充套件

高容錯性(重試)

易於管理:ZooKeepe

訊息可靠性

1.5分散式儲存系統10

1.5.1分散式儲存概念10

NoSQL優缺點:

模式相對自由,沒有嚴格的限定,這也導致維護資料有效性困難

資料一致性和事務性較弱,依賴於上層邏輯保障

查詢與關聯有限,上層邏輯解決

讀寫效能問題:一般寫入快,Cassandra寫很快,讀相對慢。MongoDB複雜索引較慢

1.5.2分散式儲存系統特點12

》高效能、高可擴充套件(節點)、成本低(廉價裝置)

1.5.3分散式儲存系統分類12

》列儲存:HBaseCassandra

》文件型儲存(整體儲存):MongoDBCoudhDB

》圖型儲存:典型的是Neo4j,節點之間互通,可以快速檢索

》健值對(KV)儲存:redisriak

》分散式檔案系統:

1.5.4常見分散式儲存系統13

HBase架構:

      Zookeeper:叢集管理

      HMaster:叢集控制者

      HRegionServer:叢集資料節點

      HDFS:底層檔案系統

Cassandra特點

模式靈活

無單點故障:沒有主節點

可擴充套件性(相對資源)

MongoDBBSON資料儲存格式

1.6本章小結14

2章分散式系統通訊基礎15

》非常基礎的網路知識,跳過

2.1時代的浪潮15

2.1.1集中式通訊網16

2.1.2去中心化16

2.2可靠的資料鏈路17

2.2.1資料分組17

2.2.2幀同步18

2.2.3差錯控制18

2.2.4鏈路管理18

2.2.5問題與解決方案19

2.3分層架構19

2.4網路層22

2.4.1尋找路徑22

2.4.2網路分層23

2.4.3TCP/IP概述23

2.4.4IP協議24

2.5傳輸層30

2.5.1資料自動分包30

2.5.2端到端的傳輸30

2.5.3資料的可靠傳輸30

2.6應用層35

2.6.1ping35

2.6.2telnet36

2.6.3OSPF36

2.6.4DNS36

2.6.5HTTP協議37

2.7基於訊息協議的公告牌38

2.7.1需求描述38

2.7.2制定協議38

2.8分散式通訊舉例——MapReduce39

MR的通訊機制是讀寫操作共享的HDFS

HDFS的基本原則是:NameNode管理資料儲存資訊,DataNode存資料,操作資料請求到NameNodeNameNode分發給DataNode處理

2.9本章小結41

3章通訊系統高層抽象42

》非常基礎的概念知識,跳過

3.1RPC介紹42

3.2RESTful44

》看了好幾遍,沒懂,上網查出好多資訊,也沒懂,綜合所有資料,自己總結如下:

      1REST的核心是一種資源視角,不再是操作視角。比如我要查詢餘額,理解為餘額是資源,我的做的是是“GET”

      2、資源擁有很多狀態,對資料的修改理解為狀態的轉換,你如不是要存錢,而是修改餘額

      3、符合上以設計風格的就是RESTfull

例如:

           GET /user/info

           DEL /user/info

           /user/getinfo

           /user/delinfo

前者是,後者不是

3.2.1資源和表現層45

3.2.2狀態轉移45

3.2.3RESTful總結46

3.3訊息佇列46

3.4序列化49

3.5使用Thrift實現公告牌服務50

3.5.1ApacheThrift介紹51

3.5.2安裝ApacheThrift51

3.5.3編寫Thrift檔案52

3.5.4實現伺服器53

3.5.5實現客戶端54

3.6本章小結56

4章走進C高效能程式設計57

》與分散式無關,作者用了劇情模式從最初的簡單需求,到最後的實現,貫穿了一個研發工程師日常用到的大部分技術,雖然知識初級,但是非常有意思,讓看似無關的一系列技術點形成了強烈的聯絡,深刻理解一下技術誕生的需求場景,50多頁,這是我見過最詳細的了,如果看一遍目錄有較多不認識或用的少,強烈建議抽時間仔細研讀一遍

4.1基於C的留言板系統58

4.1.1基於Socket的通訊58

4.1.2C中的記憶體與資源管理64

4.2來自伺服器的天書69

4.2.1編碼69

4.2.2C98的編碼缺陷72

4.2.3C11編碼支援73

4.3繁忙的伺服器75

4.3.1分身乏術75

4.3.2fork——分身術76

4.3.3程序間通訊79

4.3.4輕量級分身——執行緒85

4.3.5C11執行緒86

4.3.6競爭問題與解決方案88

4.3.7多執行緒優化95

4.3.8非同步I/O99

4.4消失不見的記憶體105

4.4.1記憶體分配與記憶體碎片106

4.4.2tcmalloc108

4.4.3記憶體池110

4.5本章小結112

5章分散式實時處理系統113

5.1HadoopMapReduce113

5.1.1HDFS114

HDFS特點

高容錯性:冗餘儲存

廉價叢集

高吞吐(定長分塊)低實時

流式訪問

5.1.2MapReduce模型115

》基本思想:拆任務合結果

》侷限性

      1、只是一個計算模型,欠缺流程支援(有資料依賴)

      2、任務觸發,不能持久服務,啟動和關閉和損耗

5.2Storm實時處理系統129

5.2.1歷史129

5.2.2計算模型130

8種內建分組策略,作者簡單介紹了一下,我查閱資料整理如下

      Shufflegrouping:隨機分組,Bolt均勻收到tuple

      Fieldsgrouping:按欄位分組,容易導致task不均衡

      PartialKey grouping:按欄位分組之後,在下游負載均衡,解決輸入不均衡

Allgrouping:全複製分給所有Bolt所有task,訂閱廣播

Globalgrouping:所有資料發給taskid最小的task,集中處理

Nonegrouping:相當於隨機分組,但會選擇訂閱boltspout在相同程序的bolt來執行,並未實現,也就是去下一步目的地執行。

Directgrouping:指向分組,定向指定

Localor shuffle grouping:相當於隨機分組,但會優先選擇本機處理,相當於哪裡發起哪裡執行

5.2.3總體架構133