目錄
本書贊譽
序一
序二
序三
前言
第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
· · · · · · (
收起)