多位大數(shù)據(jù)專家聯(lián)袂推薦,Autodesk博學(xué)系統(tǒng)研發(fā)工程師撰寫,參透大規(guī)模分布式實(shí)時處理系統(tǒng)。抽絲剝繭,從概念、原理到分布式實(shí)時計算框架實(shí)現(xiàn),兼顧理論與實(shí)踐,帶領(lǐng)讀者逐步實(shí)現(xiàn)一個高性能、基于C 11的分布式實(shí)時處理系統(tǒng)Hurricane。 第1~5章,分布式實(shí)時處理基石。
這部分涵蓋分布式系統(tǒng)原理與特性,分布式系統(tǒng)通信基礎(chǔ)與高層抽象,C 11的高性能編程基礎(chǔ)與進(jìn)階(內(nèi)存資源管理、編碼解決方案、并發(fā)與異步處理、線 程模型等),以及Hadoop與Storm基本模型和消息處理的基本思想。同時結(jié)合所講知識帶領(lǐng)讀者開發(fā)公告牌服務(wù)、留言板系統(tǒng)等,加深理解。
第6~11章,動手時間!
這部分是本書重點(diǎn),帶領(lǐng)大家實(shí)現(xiàn)一個基于C 11的高性能分布式實(shí)時處理框架,對讀者日后的框架理解、開發(fā)與定制能力大有裨益。涵蓋實(shí)時處理系統(tǒng)的總 體架構(gòu)設(shè)計,實(shí)時處理系統(tǒng)中各接口、服務(wù)組件、管理服務(wù)組件、消息處理方案,以及底層數(shù)據(jù)傳輸層及高性能網(wǎng)絡(luò)庫Meshy(實(shí)現(xiàn)的TCP/IP傳 輸和消息隊列,提供底層網(wǎng)絡(luò)傳輸基礎(chǔ))的設(shè)計與實(shí)現(xiàn)。
第12~14章,高級技能get!
這部分介紹一些實(shí)用的高級技能。涵蓋事務(wù)性拓?fù)鋵?shí)現(xiàn)方案,多語言接口與優(yōu)化方案,以及高級抽象元語、DRPC的佳實(shí)踐。
第15~17章,用起來!
這部分給出了框架的應(yīng)用案例,進(jìn)一步加強(qiáng)讀者實(shí)踐技能。涵蓋基于Hurricane開發(fā)的日志流處理實(shí)例、頻繁二項集挖掘系統(tǒng),以及在AWS和阿里云上部署Hurricane。
盧譽(yù)聲,Autodesk系統(tǒng)軟件研發(fā)工程師,從事平臺架構(gòu)方面的研發(fā)工作。在此之前,他曾在思科系統(tǒng)(中國)研發(fā)中心云產(chǎn)品研發(fā)部工作多年,并參與了大 規(guī)模分布式系統(tǒng)的服務(wù)器后端、前端以及SDK的設(shè)計與研發(fā)工作,在分布式系統(tǒng)設(shè)計與實(shí)現(xiàn)、性能調(diào)優(yōu)、高可用性和自動化等方面積累了豐富的敏捷實(shí)踐與開發(fā)經(jīng) 驗。他主要從事C/C 開發(fā)工作,致力于高性能平臺架構(gòu)的研究與開發(fā)。此外,對JavaScript、Lua以及移動開發(fā)平臺等也有一定研究。譯有 《Storm實(shí)時數(shù)據(jù)處理》《高級C/C 編譯技術(shù)》《JavaScript編程精解(原書第2版)》。
本書贊譽(yù) 序一
序二
序三
前言
第1章分布式計算概述1
1.1分布式概念1
1.2分布式計算及其原理2
1.3分布式系統(tǒng)特性3
1.3.1容錯性3
1.3.2高可擴(kuò)展性4
1.3.3開放性5
1.3.4并發(fā)處理能力5
1.3.5透明性6
1.4通用分布式計算系統(tǒng)6
1.4.1ApacheHadoop6
1.4.2ApacheSpark8
1.4.3ApacheStorm9
1.5分布式存儲系統(tǒng)10
1.5.1分布式存儲概念10
1.5.2分布式存儲系統(tǒng)特點(diǎn)12
1.5.3分布式存儲系統(tǒng)分類12
1.5.4常見分布式存儲系統(tǒng)13
1.6本章小結(jié)14
第2章分布式系統(tǒng)通信基礎(chǔ)15
2.1時代的浪潮15
2.1.1集中式通信網(wǎng)16
2.1.2去中心化16
2.2的數(shù)據(jù)鏈路17
2.2.1數(shù)據(jù)分組17
2.2.2幀同步18
2.2.3差錯控制18
2.2.4鏈路管理18
2.2.5問題與解決方案19
2.3分層架構(gòu)19
2.4網(wǎng)絡(luò)層22
2.4.1尋找路徑22
2.4.2網(wǎng)絡(luò)分層23
2.4.3TCP/IP概述23
2.4.4IP協(xié)議24
2.5傳輸層30
2.5.1數(shù)據(jù)自動分包30
2.5.2端到端的傳輸30
2.5.3數(shù)據(jù)的傳輸30
2.6應(yīng)用層35
2.6.1ping35
2.6.2telnet36
2.6.3OSPF36
2.6.4DNS36
2.6.5HTTP協(xié)議37
2.7基于消息協(xié)議的公告牌38
2.7.1需求描述38
2.7.2制定協(xié)議38
2.8分布式通信舉例——MapReduce39
2.9本章小結(jié)41
第3章通信系統(tǒng)高層抽象42
3.1RPC介紹42
3.2RESTful44
3.2.1資源和表現(xiàn)層45
3.2.2狀態(tài)轉(zhuǎn)移45
3.2.3RESTful總結(jié)46
3.3消息隊列46
3.4序列化49
3.5使用Thrift實(shí)現(xiàn)公告牌服務(wù)50
3.5.1ApacheThrift介紹51
3.5.2安裝ApacheThrift51
3.5.3編寫Thrift文件52
3.5.4實(shí)現(xiàn)服務(wù)器53
3.5.5實(shí)現(xiàn)客戶端54
3.6本章小結(jié)56
第4章走進(jìn)C 高性能編程57
4.1基于C 的留言板系統(tǒng)58
4.1.1基于Socket的通信58
4.1.2C 中的內(nèi)存與資源管理64
4.2來自服務(wù)器的天書69
4.2.1編碼69
4.2.2C 98的編碼缺陷72
4.2.3C 11編碼支持73
4.3繁忙的服務(wù)器75
4.3.1分身乏術(shù)75
4.3.2fork——分身術(shù)76
4.3.3進(jìn)程間通信79
4.3.4輕量級分身——線程85
4.3.5C 11線程86
4.3.6競爭問題與解決方案88
4.3.7多線程優(yōu)化95
4.3.8異步I/O99
4.4消失不見的內(nèi)存105
4.4.1內(nèi)存分配與內(nèi)存碎片106
4.4.2tcmalloc108
4.4.3內(nèi)存池110
4.5本章小結(jié)112
第5章分布式實(shí)時處理系統(tǒng)113
5.1Hadoop與MapReduce113
5.1.1HDFS114
5.1.2MapReduce模型115
5.2Storm實(shí)時處理系統(tǒng)129
5.2.1歷史129
5.2.2計算模型130
5.2.3總體架構(gòu)133
5.2.4Storm元數(shù)據(jù)133
5.2.5Storm與Hadoop比較138
5.3有保障的消息處理139
5.3.1處理與元組樹139
5.3.2元組的標(biāo)識139
5.3.3確認(rèn)和失敗141
5.3.4高效實(shí)現(xiàn)143
5.4本章小結(jié)144
第6章實(shí)時處理系統(tǒng)編程接口設(shè)計145
6.1總體架構(gòu)設(shè)計145
6.1.1Hurricane與Storm比較145
6.1.2總體架構(gòu)146
6.1.3任務(wù)接口148
6.2消息源接口設(shè)計149
6.3消息處理器接口設(shè)計150
6.4數(shù)據(jù)收集器設(shè)計151
6.5元組接口設(shè)計154
6.6序列化接口設(shè)計160
6.7本章小結(jié)161
第7章服務(wù)組件設(shè)計與實(shí)現(xiàn)162
7.1Executor設(shè)計與實(shí)現(xiàn)162
7.1.1事件驅(qū)動的消息隊列162
7.1.2動態(tài)裝載技術(shù)167
7.1.3Executor實(shí)現(xiàn)169
7.2Task設(shè)計與實(shí)現(xiàn)171
7.3本章小結(jié)172
第8章管理服務(wù)設(shè)計與實(shí)現(xiàn)173
8.1President功能與設(shè)計173
8.2President實(shí)現(xiàn)174
8.2.1簡單的網(wǎng)絡(luò)通信實(shí)現(xiàn)175
8.2.2Topology裝載實(shí)現(xiàn)182
8.2.3Manager管理調(diào)度實(shí)現(xiàn)184
8.2.4序列化實(shí)現(xiàn)193
8.3本章小結(jié)198
第9章實(shí)時處理系統(tǒng)編程接口實(shí)現(xiàn)199
9.1消息源接口實(shí)現(xiàn)200
9.1.1消息源執(zhí)行器200
9.1.2WordCount實(shí)現(xiàn)實(shí)例205
9.2消息處理單元接口實(shí)現(xiàn)207
9.2.1消息處理單元執(zhí)行器207
9.2.2事件處理212
9.2.3WordCount實(shí)現(xiàn)實(shí)例215
9.3數(shù)據(jù)收集器實(shí)現(xiàn)218
9.3.1分發(fā)策略218
9.3.2傳輸層實(shí)現(xiàn)224
9.4本章小結(jié)226
第10章消息處理227
10.1基本概念227
10.1.1處理227
10.1.2失敗與重發(fā)229
10.2接口設(shè)計229
10.3具體實(shí)現(xiàn)233
10.3.1簡單實(shí)現(xiàn)233
10.3.2高效實(shí)現(xiàn)235
10.4本章小結(jié)237
第11章通信系統(tǒng)設(shè)計與實(shí)現(xiàn)238
11.1I/O多路復(fù)用方案解析239
11.1.1基本網(wǎng)絡(luò)編程接口239
11.1.2非阻塞的服務(wù)器程序241
11.1.3使用select()接口的基于事件驅(qū)動的服務(wù)器模型242
11.1.4使用epoll實(shí)現(xiàn)異步事件通知模型245
11.2基礎(chǔ)工具249
11.2.1線程工具250
11.2.2日志工具254
11.3傳輸層實(shí)現(xiàn)263
11.3.1Reactor模式263
11.3.2定義抽象TP傳輸層264
11.3.3實(shí)現(xiàn)基于epoll的TP傳輸層269
11.3.4實(shí)現(xiàn)基于IOCP的TP傳輸層290
11.4應(yīng)用層HTTP實(shí)現(xiàn)307
11.4.1HttpContext307
11.4.2HttpRequest311
11.4.3HttpResponse313
11.4.4HttpConnection315
11.4.5HttpServer317
11.4.6總結(jié)319
11.5跨平臺分割編譯320
11.5.1Makefile320
11.5.2Kake323
11.6與實(shí)時處理系統(tǒng)集成325
11.6.1修改NetListener325
11.6.2修改NetConnector327
11.7本章小結(jié)330
第12章事務(wù)性Topology實(shí)現(xiàn)331
12.1Exact-once語義解決方案331
12.2設(shè)計細(xì)節(jié)333
12.2.1構(gòu)造事務(wù)性Topology333
12.2.2消息處理單元334
12.3事務(wù)性TopologyAPI337
12.3.1消息處理單元337
12.3.2事務(wù)性消息源339
12.4本章小結(jié)339
第13章多語言接口340
13.1C語言通用接口340
13.1.1元組接口342
13.1.2消息源接口346
13.1.3消息處理單元接口349
13.1.4計算拓?fù)浣涌?52
13.2Python接口354
13.2.1ctypes354
13.2.2元組接口356
13.2.3消息源接口359
13.2.4消息處理單元接口360
13.2.5計算拓?fù)浣涌?61
13.2.6應(yīng)用示例364
13.3JavaScript接口365
13.3.1V8引擎366
13.3.2Node.js366
13.3.3V8的互操作接口367
13.3.4任務(wù)接口368
13.3.5消息源接口369
13.3.6消息處理單元接口370
13.3.7計算拓?fù)浣涌?71
13.3.8應(yīng)用示例373
13.4Java接口375
13.4.1任務(wù)接口375
13.4.2消息源接口376
13.4.3消息處理單元接口377
13.4.4計算拓?fù)浣涌?77
13.4.5本地代碼380
13.4.6應(yīng)用示例382
13.5Swift接口384
13.5.1應(yīng)用范圍385
13.5.2任務(wù)接口385
13.5.3消息源接口386
13.5.4消息處理單元接口387
13.5.5計算拓?fù)浣涌?88
13.6本章小結(jié)390
第14章Squared設(shè)計與實(shí)現(xiàn)——實(shí)現(xiàn)高級抽象元語391
14.1StormTrident介紹391
14.1.1Squared示例391
14.1.2DRPC示例394
14.2Squared實(shí)現(xiàn)396
14.2.1SquaredTopology和Spout396
14.2.2SquaredBolt401
14.2.3Stream405
14.2.4狀態(tài)存儲410
14.2.5DRPC實(shí)現(xiàn)412
14.2.6操作與處理節(jié)點(diǎn)416
14.2.7流操作419
14.3本章小結(jié)423
第15章實(shí)戰(zhàn):日志流處理425
15.1日志流處理設(shè)計方案425
15.2實(shí)現(xiàn)Topology427
15.2.1編寫消息源427
15.2.2編寫索引消息處理單元428
15.2.3編寫統(tǒng)計消息處理單元429
15.3本章小結(jié)431
第16章實(shí)戰(zhàn):頻繁組合查找432
16.1背景介紹432
16.1.1數(shù)據(jù)挖掘概念432
16.1.2關(guān)聯(lián)規(guī)則和頻繁項集433
16.1.3啤酒與尿布435
16.2頻繁二項集挖掘方法435
16.2.1頻繁二項集435
16.2.2算法設(shè)計思路438
16.2.3Hurricane實(shí)現(xiàn)思路439
16.3編寫Spout439
16.4編寫B(tài)olt441
16.4.1SplitBolt441
16.4.2PairCountBolt442
16.4.3PairTotalCountBolt443
16.4.4ConfidenceComputeBolt444
16.4.5SupportComputeBolt445
16.4.6FilterBolt447
16.5編寫Topology448
16.6本章小結(jié)449
第17章實(shí)戰(zhàn):在AWS和阿里云上部署Hurricane實(shí)時處理系統(tǒng)450
17.1AWS部署450
17.1.1搭建虛擬私有云452
17.1.2配置安全組455
17.1.3加載EC2實(shí)例456
17.1.4彈性IP地址管理461
17.2阿里云部署464
17.2.1創(chuàng)建虛擬私有云464
17.2.2管理安全組467
17.2.3創(chuàng)建ECS468
17.2.4SSH登錄471
17.3Hurricane分布式部署與管理471
17.3.1分布式部署原理472
17.3.2分布式安裝配置472
17.3.3分布式啟動476
17.4部署分布式實(shí)時處理系統(tǒng)477
17.5未來之路478
17.6本章小結(jié)479
本書不但講解高性能分布式實(shí)時處理系統(tǒng)編程的原理,特別是對于內(nèi)存資源管理、編碼解決方案、并發(fā)與異步處理、線程模型、批處理與實(shí)時處理的區(qū)別、消 息隊列、動態(tài)裝載等作了詳細(xì)介紹,還深入分析了實(shí)時處理系統(tǒng)的架構(gòu)以及內(nèi)部實(shí)現(xiàn),詳細(xì)分析了怎么樣實(shí)現(xiàn)一套分布式實(shí)時處理系統(tǒng)Hurricane。本 書非常適合大數(shù)據(jù)開發(fā)人員和架構(gòu)師閱讀,同時可以解決性能優(yōu)化的很多問題。 ——盧億雷AdMaster技術(shù)副總裁兼總架構(gòu)師
分布式系統(tǒng)可以追溯到20世紀(jì)60年代的ARPANET。隨著物聯(lián)網(wǎng)、邊緣計算和其他相關(guān)領(lǐng)域的蓬勃發(fā)展,對高性能分布式實(shí)時處理系統(tǒng)的需求日益增多。這本技術(shù)專著著眼于實(shí)際分布式框架的編程應(yīng)用,將助力有志于該領(lǐng)域的軟件開發(fā)人員。
——安寧Oracle空間數(shù)據(jù)部門首席工程師
本書將對自己的C 編程、分布式存儲系統(tǒng)、分布式計算框架、分布式通信等知識進(jìn)行洗禮,不知不覺間就提升了自己的層次,期待閱讀本書之后,也可以構(gòu)建一個全新的分布式實(shí)時處理系統(tǒng),變成分布式實(shí)時計算領(lǐng)域的貢獻(xiàn)者。
——于俊科大訊飛大數(shù)據(jù)專家
本書由淺到深,從基礎(chǔ)的分布式系統(tǒng)的概念、網(wǎng)絡(luò)通信和C 11高性能編程,到流處理中的消息、消息源、處理單元、收集器、計算拓?fù)涞戎匾橄蟮膶?shí)現(xiàn),到日志處理、頻繁組合等典型應(yīng)用,深入研究了一個典型分布式流處理系統(tǒng)的各個重要方面,推薦。
——蔡斌騰訊科技高級工程師