-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

分布式實時處理系統:原理、架構與實現

( 簡體 字)
作者:盧譽聲 著類別:1. -> 程式設計 -> 綜合
譯者:
出版社:機械工業出版社分布式實時處理系統:原理、架構與實現 3dWoo書號: 44681
詢問書籍請說出此書號!

缺書
NT售價: 495

出版日:7/1/2016
頁數:479
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111539964
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

為什么要寫這本書

云計算與大數據為計算機科學領域注入了前所未有的活力,而大數據的實時處理更是為海量數據處理和數據挖掘帶來了嶄新的契機。從某種意義上講,傳統大數據的批處理方式已經一定程度上解決了我們所面臨的問題,由MapReduce、Bulk Synchronous Parallel以及其他計算范式衍生而來的大規模計算集群已經廣泛運用于生產環境中。然而,客戶的要求是永不滿足的。他們想要更多的數據、服務、價值以及更多的便利。隨著數據量的增加,對實時響應時間的需求也在提高,原本承載著海量數據處理任務的批處理系統在實時計算處理方面越發顯得乏力。這么說的原因很簡單,像Hadoop使用的MapReduce這樣的數據批處理技術,其設計初衷并不是為了滿足實時計算的需求。數據批處理系統與實時處理系統在需求上存在著本質的區別。要做到實時性,不僅需要及時地推送數據以便處理,還要將數據劃分成盡可能小的單位,而像HDFS存儲推送數據的能力已經遠不能滿足實時性的需求。

雖然目前Apache Spark等新平臺和框架越來越為流行,同時極大提升了批處理的性能,但是由于這些傳統批處理系統的運行機制本身,無法從根本上解決實時計算的問題。

因此,隨著業務數據規模的爆炸式增長,對數據實時處理能力的需求也越來越大。專注于實時性、規模化的計算平臺新時代已經悄然來臨。

Apache Storm的出現扭轉了傳統數據批處理系統的劣勢,成為了真正意義上的實時數據處理系統。Storm實時處理系統實現了一個可靠的、高容錯性的實時分布式處理平臺,那么這些聽起來十分抽象的概念到底是如何實現的呢?這其實就是筆者寫作本書的目的之一。當筆者深入研究和學習了Storm的內部結構和代碼實現之后,就在思考有沒有什么辦法讓其他更多的人少走彎路,并能在實踐中對這個看似“神秘”的實時處理系統的設計與實現融會貫通呢?

本書特色

本書是一本由淺入深并詳細講解編寫一套全新的基于C/C++的實時處理系統的編程實戰書。本書從基礎知識開始,到實時數據系統的架構設計,到代碼的實際編寫,逐步實現一個完整的實時數據處理系統。本書把這套全新的高性能分布式實時處理系統命名為Hurricane,該單詞與Storm涵義類似,但略有不同,其中維基百科對Hurricane的解釋是“A storm that has very strong fast winds and that moves over water”,即“在水面高速移動的颶風(storm)”。

同時,為了支持高性能的實時處理系統,我們必須提供高性能的網絡層,能夠支持大量的并發,因此本書設計實現了一套跨平臺的網絡庫Meshy,并將其作為Hurricane實時處理系統的傳輸層。

為了編寫更清晰、易于移植、易于維護的現代化C++代碼,我們在書中大量使用了C++ 11的特性,從一些小的語法點(如auto、override)到C++ 11中新增加的庫(如thread、chrono、functional)到一些翻天覆地的語法特性(如統一初始化、Lambda表達式)都有所涉及。每當遇到新的C++ 11知識時,我們都會著重向讀者介紹。由于目前C++ 14還不夠普及成熟,因此在本書中暫不考慮C++ 14的特性。

為此,本書一開始將會花費大量篇幅介紹分布式計算存儲的概念以及網絡通信的基礎知識。接著闡述和分布式計算存儲相關的網絡高層抽象知識,為構建分布式網絡應用打下堅實基礎。接著集中介紹本書需要運用的C++相關知識,包括C++ 11的語言特性以及需要了解的底層知識。之后就開始介紹Hurricane實時處理系統的設計方案,并引導讀者一步步自己實現Hurricane實時處理系統。

完成Hurricane實時處理系統的主體功能部分后,我們轉而介紹Meshy,闡述如何實現Meshy這一跨平臺的網絡框架,并與Hurricane實時處理系統進行對接。為了實現跨平臺的高性能網絡通信庫,我們必須學習使用epoll、IOCP等與平臺密切相關的技術來保證系統性能。同時,我們也要學會如何編寫管理一個需要考慮移植和平臺兼容性的系統的技巧與實踐方法。最后輔以實戰用例講解如何將該系統應用于實際的生產環境中。

總之,Hurricane實時處理系統是一個使用C++ 11編寫的,以高性能為關注點的分布式實時計算框架,使用流模型作為計算模型,同時提供更易于理解的高層接口。

希望讀者能夠從本書中或多或少學到點新的知識,能夠對C++語言以及網絡通信有更加深入的認識,了解如何構建一個可應用于生產環境的分布式實時處理系統。

如何閱讀本書

本書以最基本的云計算與大數據概念作為引子,逐步引入高性能分布式實時處理系統編程所需要的知識,抽絲剝繭地把有關實時處理系統的架構以及內部實現娓娓道來。

第1章 介紹分布式系統的一些基本概念,以及開發實時處理系統所需要具備的一些重要知識點。

第2章 介紹分布式系統通信基礎,包括TCP/IP以及Socket方面的基本概念,為后續開發網絡庫Meshy做知識儲備。

第3章 介紹分布式系統通信所需的高層抽象,包括RPC遠程過程調用、RESTful、消息隊列等常用的通信模型。同時介紹基本的序列化概念與解決方案,并使用Thrift開發簡單的公告牌服務,為Hurricane的開發建立通信抽象與框架上的基礎概念。

第4章 介紹C++高性能編程所需的基礎與進階知識,包括C++中的內存資源管理、編碼解決方案、并發與異步處理以及內存管理技巧,以及C++ 11中與內存管理、編碼處理、線程模型相關的內容。

第5章 介紹分布式處理系統的基本概念,包括批處理與實時處理的區別,Hadoop與Storm的基本介紹及基本模型。最后介紹可靠消息處理的基本思想。

第6章 介紹實時處理系統的總體架構與接口設計,包括消息源、消息處理器、數據收集器、元組以及序列化接口。

第7章 介紹服務組件的設計與實現,包括Executor及其消息隊列、動態裝載以及Task的設計與實現等。

第8章 介紹管理服務的設計與實現,其中包括集群管理器President以及節點管理器Manager的架構設計與編程實現。

第9章 介紹實時處理系統中各部分接口的實現,包括消息源、消息處理單元以及數據收集器的實現。

第10章 介紹可靠消息處理的概念、接口設計與具體實現,包括簡單和高效的實現方案。

第11章 介紹底層數據傳輸層及Meshy的設計與實現,包括I/O多路復用的概念與實現方法、所需的基礎工具,以及跨平臺的實現方案。最后輔以實戰用例來展示集成與使用Meshy的方法。

第12章 介紹事務性計算拓撲的概念、實現方案與編程實現,并介紹相關API,以及如何使用Cassandra存儲元數據。

第13章 介紹在不同的編程語言中實現計算拓撲的方法,并在現有技術基礎上增加一些新的技術。

第14章 介紹基于Hurricane實時處理系統的高級抽象元語、分布式遠程過程調用(DRPC)的設計、實現方案及編程實戰。

第15章 介紹了基于Hurricane實時處理系統開發的日志流處理實例,其中包含日志流處理的整體流程、使用Hurricane處理日志的具體實現思路,以及使用Hurricane處理日志的具體實現。

第16章 介紹了基于Hurricane實時處理系統開發的頻繁組合查找實例,其中包含頻繁項集挖掘概念與方法、頻繁二項集挖掘算法原理與實現分布式統計方法。并介紹如何使用Hurricane實現自己的頻繁二項集挖掘系統。

第17章 介紹在AWS和阿里云上部署Hurricane實時處理系統,首先介紹在AWS上創建私有云和EC2實例的方法,接著介紹在阿里云上創建私有云和ECS實例的方法,最后介紹Hurricane的分布式部署原理與方法。

閱讀前提

本書采用Ubuntu或Debian操作系統以及Windows操作系統作為基本的開發環境。此外,本書并不準備對基礎的編程概念進行理論介紹。我們假定你在閱讀本書之前已經達到基本的編程技術水平以及具備一定的C++編程經驗和功底。如果不是,筆者建議閱讀《C++編程思想》作為基礎來了解編程的基本概念,并閱讀《高級C/C++編譯技術》作為提高。

本書版式約定

在本書中,讀者會發現針對不同信息類型的文本樣式。下面是這些樣式的示例和解釋。

所有命令行輸入和輸出如下所示:

mkdir Hurricane

cd Hurricane

代碼清單通常以以下格式展現:

1 #include

2 #include

3

4 int main()

5 {

6 std::cout << "Welcome to Hurricane" << std::endl;

7

8 return EXIT_SUCCESS;

9 }

在正文中時常會用以下方式拓展所講解的內容:

這里是相關提示的文字。

讀者對象

(1)大數據系統研發工程師。本書不但講解高性能分布式實時處理系統編程所需要的方方面面,抽絲剝繭地呈現出實時處理系統的架構以及內部實現,還帶領大家自己編寫一套分布式實時處理系統。

(2)研發人員。本書是一本深入剖析分布式實時處理系統編號的指南。

(3)架構師。本書是一本層次化分布式系統架構設計的實戰書。讀者可以深入理解分布式實時處理系統的內部構造以及重要組成部分,并自已設計分布式系統的各個層次。

(4)編程初學者。學習實戰技術,掌握分布式系統開發中慣用的編程技巧。

勘誤和支持

雖然筆者在編寫本書的過程中經過反復審校,全力確保本書內容的準確性,但疏漏在所難免。書中難免可能會出現一些不妥或不準確的描述,懇請讀者批評指正。本書所涉及的所有源代碼及工程都可以從華章官網(www.hzbook.com)下載,同時這些項目也都是開源項目。現在我懷著期盼和忐忑的心情,將這本著作呈獻給大家,我渴望得到你的認可,更渴望和你成為朋友,如果你有任何問題和建議,請與我聯系(電子郵箱:samblg@me.com),期待能夠得到你的真摯反饋。

致謝

在創作本書的過程中,我得到了很多人的幫助,這里必須要一一感謝,聊表寸心。感謝魯昌華教授,在我的成長道路上給予了很大的支持和鼓勵。感謝我在Autodesk中國研究院(ACRD)的同事和思科系統(中國)研發中心的朋友。特別是我的良師益友彭敏、曠天亮和徐立冰,在我的學習工作中給予了很大幫助。感謝我的好友金柳頎,感謝你在寫作本書過程中的通力合作以及技術問題上的共同探討。還要感謝機械工業出版社的高婧雅編輯對我的信任與支持。

謹以此書獻給我最親愛的家人與朋友,你們是我奮斗路上堅強的后盾。



盧譽聲

于上海
內容簡介:

多位大數據專家聯袂推薦,資深系統研發工程師撰寫,參透大規模分布式實時處理系統。抽絲剝繭,從概念、原理到分布式實時計算框架實現,兼顧理論與實踐,帶領讀者逐步實現一個高性能、基于C++ 11的分布式實時處理系統Hurricane。
第1∼5章,分布式實時處理基石。
這部分涵蓋分布式系統原理與特性,分布式系統通信基礎與高層抽象, C++ 11的高性能編程基礎與進階(內存資源管理、編碼解決方案、并發與異步處理、線程模型等),以及Hadoop與Storm基本模型和可靠消息處理的基本思想。同時結合所講知識帶領讀者開發公告牌服務、留言板系統等,加深理解。
第6∼11章,動手時間!
這部分是本書重點,帶領大家實現一個基于C++ 11的高性能分布式實時處理框架,對讀者日后的框架理解、開發與定制能力大有裨益。涵蓋實時處理系統的總體架構設計,實時處理系統中各接口、服務組件、管理服務組件、可靠消息處理方案,以及底層數據傳輸層及高性能網絡庫Meshy(實現可靠的TCP/IP傳輸和消息隊列,提供底層網絡傳輸基礎)的設計與實現。
第12∼14章,高級技能get!
這部分介紹一些實用的高級技能。涵蓋事務性拓撲實現方案,多語言接口與優化方案,以及高級抽象元語、DRPC的最佳實踐。
第15∼17章,用起來!
這部分給出了框架的應用案例,進一步加強讀者實踐技能。涵蓋基于Hurricane開發的日志流處理實例、頻繁二項集挖掘系統,以及在AWS和阿里云上部署Hurricane。
目錄:

本書贊譽

序一

序二

序三

前言

第1章 分布式計算概述 1

1.1 分布式概念 1

1.2 分布式計算及其原理 2

1.3 分布式系統特性 3

1.3.1 容錯性 3

1.3.2 高可擴展性 4

1.3.3 開放性 5

1.3.4 并發處理能力 5

1.3.5 透明性 6

1.4 通用分布式計算系統 6

1.4.1 Apache Hadoop 6

1.4.2 Apache Spark 8

1.4.3 Apache Storm 9

1.5 分布式存儲系統 10

1.5.1 分布式存儲概念 10

1.5.2 分布式存儲系統特點 12

1.5.3 分布式存儲系統分類 12

1.5.4 常見分布式存儲系統 13

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.3 TCP/IP概述 23

2.4.4 IP協議 24

2.5 傳輸層 30

2.5.1 數據自動分包 30

2.5.2 端到端的傳輸 30

2.5.3 數據的可靠傳輸 30

2.6 應用層 35

2.6.1 ping 35

2.6.2 telnet 36

2.6.3 OSPF 36

2.6.4 DNS 36

2.6.5 HTTP協議 37

2.7 基于消息協議的公告牌 38

2.7.1 需求描述 38

2.7.2 制定協議 38

2.8 分布式通信舉例——MapReduce 39

2.9 本章小結 41

第3章 通信系統高層抽象 42

3.1 RPC介紹 42

3.2 RESTful 44

3.2.1 資源和表現層 45

3.2.2 狀態轉移 45

3.2.3 RESTful總結 46

3.3 消息隊列 46

3.4 序列化 49

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

3.5.1 Apache Thrift介紹 51

3.5.2 安裝Apache Thrift 51

3.5.3 編寫Thrift文件 52

3.5.4 實現服務器 53

3.5.5 實現客戶端 54

3.6 本章小結 56

第4章 走進C++高性能編程 57

4.1 基于C++的留言板系統 58

4.1.1 基于Socket的通信 58

4.1.2 C++中的內存與資源管理 64

4.2 來自服務器的天書 69

4.2.1 編碼 69

4.2.2 C++98的編碼缺陷 72

4.2.3 C++11編碼支持 73

4.3 繁忙的服務器 75

4.3.1 分身乏術 75

4.3.2 fork——分身術 76

4.3.3 進程間通信 79

4.3.4 輕量級分身——線程 85

4.3.5 C++11線程 86

4.3.6 競爭問題與解決方案 88

4.3.7 多線程優化 95

4.3.8 異步I/O 99

4.4 消失不見的內存 105

4.4.1 內存分配與內存碎片 106

4.4.2 tcmalloc 108

4.4.3 內存池 110

4.5 本章小結 112

第5章 分布式實時處理系統 113

5.1 Hadoop與MapReduce 113

5.1.1 HDFS 114

5.1.2 MapReduce模型 115

5.2 Storm實時處理系統 129

5.2.1 歷史 129

5.2.2 計算模型 130

5.2.3 總體架構 133

5.2.4 Storm元數據 133

5.2.5 Storm與Hadoop比較 138

5.3 有保證的消息處理 139

5.3.1 完全處理與元組樹 139

5.3.2 元組的唯一標識 139

5.3.3 確認和失敗 141

5.3.4 高效實現 143

5.4 本章小結 144

第6章 實時處理系統編程接口設計 145

6.1 總體架構設計 145

6.1.1 Hurricane與Storm比較 145

6.1.2 總體架構 146

6.1.3 任務接口 148

6.2 消息源接口設計 149

6.3 消息處理器接口設計 150

6.4 數據收集器設計 151

6.5 元組接口設計 154

6.6 序列化接口設計 160

6.7 本章小結 161

第7章 服務組件設計與實現 162

7.1 Executor設計與實現 162

7.1.1 事件驅動的消息隊列 162

7.1.2 動態裝載技術 167

7.1.3 Executor實現 169

7.2 Task設計與實現 171

7.3 本章小結 172

第8章 管理服務設計與實現 173

8.1 President功能與設計 173

8.2 President實現 174

8.2.1 簡單的網絡通信實現 175

8.2.2 Topology裝載實現 182

8.2.3 Manager管理調度實現 184

8.2.4 序列化實現 193

8.3 本章小結 198

第9章 實時處理系統編程接口實現 199

9.1 消息源接口實現 200

9.1.1 消息源執行器 200

9.1.2 WordCount實現實例 205

9.2 消息處理單元接口實現 207

9.2.1 消息處理單元執行器 207

9.2.2 事件處理 212

9.2.3 WordCount實現實例 215

9.3 數據收集器實現 218

9.3.1 分發策略 218

9.3.2 傳輸層實現 224

9.4 本章小結 226

第10章 可靠消息處理 227

10.1 基本概念 227

10.1.1 完全處理 227

10.1.2 失敗與重發 229

10.2 接口設計 229

10.3 具體實現 233

10.3.1 簡單實現 233

10.3.2 高效實現 235

10.4 本章小結 237

第11章 通信系統設計與實現 238

11.1 I/O多路復用方案解析 239

11.1.1 基本網絡編程接口 239

11.1.2 非阻塞的服務器程序 241

11.1.3 使用select()接口的基于事件驅動的服務器模型 242

11.1.4 使用epoll實現異步事件通知模型 245

11.2 基礎工具 249

11.2.1 線程工具 250

11.2.2 日志工具 254

11.3 傳輸層實現 263

11.3.1 Reactor模式 263

11.3.2 定義抽象TP傳輸層 264

11.3.3 實現基于epoll的TP傳輸層 269

11.3.4 實現基于IOCP的TP傳輸層 290

11.4 應用層HTTP實現 307

11.4.1 HttpContext 307

11.4.2 HttpRequest 311

11.4.3 HttpResponse 313

11.4.4 HttpConnection 315

11.4.5 HttpServer 317

11.4.6 總結 319

11.5 跨平臺分割編譯 320

11.5.1 Makefile 320

11.5.2 Kake 323

11.6 與實時處理系統集成 325

11.6.1 修改NetListener 325

11.6.2 修改NetConnector 327

11.7 本章小結 330

第12章 事務性Topology實現 331

12.1 Exact-once語義解決方案 331

12.2 設計細節 333

12.2.1 構造事務性Topology 333

12.2.2 消息處理單元 334

12.3 事務性Topology API 337

12.3.1 消息處理單元 337

12.3.2 事務性消息源 339

12.4 本章小結 339

第13章 多語言接口 340

13.1 C語言通用接口 340

13.1.1 元組接口 342

13.1.2 消息源接口 346

13.1.3 消息處理單元接口 349

13.1.4 計算拓撲接口 352

13.2 Python接口 354

13.2.1 ctypes 354

13.2.2 元組接口 356

13.2.3 消息源接口 359

13.2.4 消息處理單元接口 360

13.2.5 計算拓撲接口 361

13.2.6 應用示例 364

13.3 JavaScript接口 365

13.3.1 V8引擎 366

13.3.2 Node.js 366

13.3.3 V8的互操作接口 367

13.3.4 任務接口 368

13.3.5 消息源接口 369

13.3.6 消息處理單元接口 370

13.3.7 計算拓撲接口 371

13.3.8 應用示例 373

13.4 Java接口 375

13.4.1 任務接口 375

13.4.2 消息源接口 376

13.4.3 消息處理單元接口 377

13.4.4 計算拓撲接口 377

13.4.5 本地代碼 380

13.4.6 應用示例 382

13.5 Swift接口 384

13.5.1 應用范圍 385

13.5.2 任務接口 385

13.5.3 消息源接口 386

13.5.4 消息處理單元接口 387

13.5.5 計算拓撲接口 388

13.6 本章小結 390

第14章 Squared設計與實現——實現高級抽象元語 391

14.1 Storm Trident介紹 391

14.1.1 Squared示例 391

14.1.2 DRPC示例 394

14.2 Squared實現 396

14.2.1 SquaredTopology和Spout 396

14.2.2 SquaredBolt 401

14.2.3 Stream 405

14.2.4 狀態存儲 410

14.2.5 DRPC實現 412

14.2.6 操作與處理節點 416

14.2.7 流操作 419

14.3 本章小結 423

第15章 實戰:日志流處理 425

15.1 日志流處理設計方案 425

15.2 實現Topology 427

15.2.1 編寫消息源 427

15.2.2 編寫索引消息處理單元 428

15.2.3 編寫統計消息處理單元 429

15.3 本章小結 431

第16章 實戰:頻繁組合查找 432

16.1 背景介紹 432

16.1.1 數據挖掘概念 432

16.1.2 關聯規則和頻繁項集 433

16.1.3 啤酒與尿布 435

16.2 頻繁二項集挖掘方法 435

16.2.1 頻繁二項集 435

16.2.2 算法設計思路 438

16.2.3 Hurricane實現思路 439

16.3 編寫Spout 439

16.4 編寫Bolt 441

16.4.1 SplitBolt 441

16.4.2 PairCountBolt 442

16.4.3 PairTotalCountBolt 443

16.4.4 ConfidenceComputeBolt 444

16.4.5 SupportComputeBolt 445

16.4.6 FilterBolt 447

16.5 編寫Topology 448

16.6 本章小結 449

第17章 實戰:在AWS和阿里云上部署Hurricane實時處理系統 450

17.1 AWS部署 450

17.1.1 搭建虛擬私有云 452

17.1.2 配置安全組 455

17.1.3 加載EC2實例 456

17.1.4 彈性IP地址管理 461

17.2 阿里云部署 464

17.2.1 創建虛擬私有云 464

17.2.2 管理安全組 467

17.2.3 創建ECS 468

17.2.4 SSH登錄 471

17.3 Hurricane分布式部署與管理 471

17.3.1 分布式部署原理 472

17.3.2 分布式安裝配置 472

17.3.3 分布式啟動 476

17.4 部署分布式實時處理系統 477

17.5 未來之路 478

17.6 本章小結 479
序: