全书分为3篇:
1.第一篇详细讲解本书将要开发的分布式实时计算系统所涉及的相关技术,特别针对C++11的新特性着重介绍。
2.第二篇剖析分布式计算系统编程细节,其中对每个重要的概念、模型和函数都加以阐述。
3.第三篇主要关注实战用例,将编写数个极具实践价值的应用程序,为开发者提供参考。
通过阅读本书,读者不仅能开发出一套基于C/C++实现的分布式实时计算系统,而且还可以以此学习和了解服务器编程接口设计以及UNIX服务器开发的多个重要主题,对未来实际应用与开发提供参考。
封面图
目录
- 本书赞誉
- 序一
- 序二
- 序三
- 前言
- 第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.1Apache Hadoop6
- 1.4.2Apache Spark8
- 1.4.3Apache Storm9
- 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.1Apache Thrift介绍51
- 3.5.2安装Apache Thrift51
- 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事务性Topology API337
- 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.1Storm Trident介绍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