多位大数据专家联袂推荐,Autodesk资深系统研发工程师撰写,参透大规模分布式实时处理系统
抽丝剥茧,从概念、原理到分布式实时计算框架实现,兼顾理论与实践,带领读者逐步实现一个高性能、基于C++11的分布式实时处理系统
多位大数据专家联袂推荐,Autodesk资深系统研发工程师撰写,参透大规模分布式实时处理系统。抽丝剥茧,从概念、原理到分布式实时计算框架实现,兼顾理论与实践,带领读者逐步实现一个高性能、基于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.1ApacheHadoop6
1.4.2ApacheSpark8
1.4.3ApacheStorm9
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.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
2.9本章小结41
第3章通信系统高层抽象42
3.1RPC介绍42
3.2RESTful44
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
4.1基于C++的留言板系统58
4.1.1基于Socket的通信58
4.1.2C++中的内存与资源管理64
4.2来自服务器的天书69
4.2.1编码69
4.2.2C++98的编码缺陷72
4.2.3C++11编码支持73
4.3繁忙的服务器75
4.3.1分身乏术75
4.3.2fork——分身术76
4.3.3进程间通信79
4.3.4轻量级分身——线程85
4.3.5C++11线程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
5.1.2MapReduce模型115
5.2Storm实时处理系统129
5.2.1历史129
5.2.2计算模型130
5.2.3总体架构133
5.2.4Storm元数据133
5.2.5Storm与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.1Hurricane与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.1Executor设计与实现162
7.1.1事件驱动的消息队列162
7.1.2动态装载技术167
7.1.3Executor实现169
7.2Task设计与实现171
7.3本章小结172
第8章管理服务设计与实现173
8.1President功能与设计173
8.2President实现174
8.2.1简单的网络通信实现175
8.2.2Topology装载实现182
8.2.3Manager管理调度实现184
8.2.4序列化实现193
8.3本章小结198
第9章实时处理系统编程接口实现199
9.1消息源接口实现200
9.1.1消息源执行器200
9.1.2WordCount实现实例205
9.2消息处理单元接口实现207
9.2.1消息处理单元执行器207
9.2.2事件处理212
9.2.3WordCount实现实例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.1I/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.1Reactor模式263
11.3.2定义抽象TP传输层264
11.3.3实现基于epoll的TP传输层269
11.3.4实现基于IOCP的TP传输层290
11.4应用层HTTP实现307
11.4.1HttpContext307
11.4.2HttpRequest311
11.4.3HttpResponse313
11.4.4HttpConnection315
11.4.5HttpServer317
11.4.6总结319
11.5跨平台分割编译320
11.5.1Makefile320
11.5.2Kake323
11.6与实时处理系统集成325
11.6.1修改NetListener325
11.6.2修改NetConnector327
11.7本章小结330
第12章事务性Topology实现331
12.1Exact-once语义解决方案331
12.2设计细节333
12.2.1构造事务性Topology333
12.2.2消息处理单元334
12.3事务性TopologyAPI337
12.3.1消息处理单元337
12.3.2事务性消息源339
12.4本章小结339
第13章多语言接口340
13.1C语言通用接口340
13.1.1元组接口342
13.1.2消息源接口346
13.1.3消息处理单元接口349
13.1.4计算拓扑接口352
13.2Python接口354
13.2.1ctypes354
13.2.2元组接口356
13.2.3消息源接口359
13.2.4消息处理单元接口360
13.2.5计算拓扑接口361
13.2.6应用示例364
13.3JavaScript接口365
13.3.1V8引擎366
13.3.2Node.js366
13.3.3V8的互操作接口367
13.3.4任务接口368
13.3.5消息源接口369
13.3.6消息处理单元接口370
13.3.7计算拓扑接口371
13.3.8应用示例373
13.4Java接口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.5Swift接口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.1StormTrident介绍391
14.1.1Squared示例391
14.1.2DRPC示例394
14.2Squared实现396
14.2.1SquaredTopology和Spout396
14.2.2SquaredBolt401
14.2.3Stream405
14.2.4状态存储410
14.2.5DRPC实现412
14.2.6操作与处理节点416
14.2.7流操作419
14.3本章小结423
第15章实战:日志流处理425
15.1日志流处理设计方案425
15.2实现Topology427
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.3Hurricane实现思路439
16.3编写Spout439
16.4编写Bolt441
16.4.1SplitBolt441
16.4.2PairCountBolt442
16.4.3PairTotalCountBolt443
16.4.4ConfidenceComputeBolt444
16.4.5SupportComputeBolt445
16.4.6FilterBolt447
16.5编写Topology448
16.6本章小结449
第17章实战:在AWS和阿里云上部署Hurricane实时处理系统450
17.1AWS部署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创建ECS468
17.2.4SSH登录471
17.3Hurricane分布式部署与管理471
17.3.1分布式部署原理472
17.3.2分布式安装配置472
17.3.3分布式启动476
17.4部署分布式实时处理系统477
17.5未来之路478
17.6本章小结479
本书不但讲解高性能分布式实时处理系统编程的原理,特别是对于内存资源管理、编码解决方案、并发与异步处理、线程模型、批处理与实时处理的区别、消息队列、动态装载等作了详细介绍,还深入分析了实时处理系统的架构以及内部实现,最后详细分析了怎么样实现一套分布式实时处理系统Hurricane。本书非常适合大数据开发人员和架构师阅读,同时可以解决性能优化的很多问题。
——卢亿雷AdMaster技术副总裁兼总架构师
分布式系统可以追溯到20世纪60年代的ARPANET。随着物联网、边缘计算和其他相关领域的蓬勃发展,对高性能分布式实时处理系统的需求日益增多。这本技术专著着眼于实际分布式框架的编程应用,将助力有志于该领域的软件开发人员。
——安宁Oracle空间数据部门首席工程师
本书将对自己的C++编程、分布式存储系统、分布式计算框架、分布式通信等知识进行洗礼,不知不觉间就提升了自己的层次,期待阅读本书之后,也可以构建一个全新的分布式实时处理系统,变成分布式实时计算领域的贡献者。
——于俊科大讯飞大数据专家
本书由浅到深,从基础的分布式系统的概念、网络通信和C++11高性能编程,到流处理中的消息、消息源、处理单元、收集器、计算拓扑等重要抽象的实现,到日志处理、频繁组合等典型应用,深入研究了一个典型分布式流处理系统的各个重要方面,推荐。
——蔡斌腾讯科技高级工程师