【讀書精華分享】《分散式實時處理系統 原理、架構與實現》盧譽聲著/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
》列儲存:HBase、Cassandra
》文件型儲存(整體儲存):MongoDB、CoudhDB
》圖型儲存:典型的是Neo4j,節點之間互通,可以快速檢索
》健值對(KV)儲存:redis、riak
》分散式檔案系統:
1.5.4常見分散式儲存系統13
》HBase架構:
Zookeeper:叢集管理
HMaster:叢集控制者
HRegionServer:叢集資料節點
HDFS:底層檔案系統
》Cassandra特點
模式靈活
無單點故障:沒有主節點
可擴充套件性(相對資源)
》MongoDB:BSON資料儲存格式
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存資料,操作資料請求到NameNode,NameNode分發給DataNode處理
2.9本章小結41
第3章通訊系統高層抽象42
》非常基礎的概念知識,跳過
3.1RPC介紹42
3.2RESTful44
》看了好幾遍,沒懂,上網查出好多資訊,也沒懂,綜合所有資料,自己總結如下:
1、REST的核心是一種資源視角,不再是操作視角。比如我要查詢餘額,理解為餘額是資源,我的做的是是“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.1Hadoop與MapReduce113
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:相當於隨機分組,但會選擇訂閱bolt或spout在相同程序的bolt來執行,並未實現,也就是去下一步目的地執行。
Directgrouping:指向分組,定向指定
Localor shuffle grouping:相當於隨機分組,但會優先選擇本機處理,相當於哪裡發起哪裡執行
5.2.3總體架構133
》