描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787111539964丛书名: 大数据技术丛书
多位大数据专家联袂推荐,Autodesk资深系统研发工程师撰写,参透大规模分布式实时处理系统
抽丝剥茧,从概念、原理到分布式实时计算框架实现,兼顾理论与实践,带领读者逐步实现一个高性能、基于C 11的分布式实时处理系统
第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空间数据部门首席工程师、IEEE高级会员和ACM终身会员
本书不仅仅是一部讲授代码编写的书籍,还是一个开源社区的星星火种,我特别推荐所有对实时大数据分析感兴趣的同业中人阅读此书,并以此作为迈入下一个开源大时代的步。
——徐立冰,思科系统高级客户经理
通常来说,在互联网 、大数据时代盛行拿来主义;有开源的Spark、Strom,不会动自己构建分布式系统的心思。但是作者不然,深厚的C 功底以及对分布式计算框架的深度理解,构建了高性能分布式、实时处理系统Hurricane,进入了更高层次的追求。
静下心来,这本书将对自己的C 编程、分布式存储系统、分布式计算框架、分布式通信等知识进行了洗礼,不知不觉间就提升了自己的层次,期待阅读本书之后,也可以构建一个全新的分布式实时处理系统,变成分布式实时计算领域的贡献者。
路已铺好,如何贡献,那是追求。
——于俊,科大讯飞大数据专家
“天下武功,无坚不摧,唯快不破”,如果说以MapReduce、Spark等为代表的批处理方式,是数据处理的“坚”,则Storm、
Hurricane等流处理系统,充分体现了数据处理的“快”。本书由浅到深,从基础的分布式系统的概念、网络通信和C 11高性能编程,到流处理中的
消息、消息源、处理单元、收集器、计算拓扑等重要抽象的实现,到日志处理、频繁组合等典型应用,深入研究了一个典型分布式流处理系统的各个重要方面,推
荐。
——蔡斌,腾讯科技高级工程师
分布式实时处理系统,难就难在把分布式和实时处理结合起来。本文从拆解留言板系统开始节节升级,直至推出Hurricane实时处理系统,旁征博引,纲举目张。充分体现了分布式构建和实时处理的细节考虑。
——彭敏,思科系统(中国)研发有限公司服务器与平台架构部门研发经理
作者以他参与Cisco和Autodesk诸多大型系统开发时所积累的经验以及对开源技术多年的钻研铸就本书。本书由理论到应用,由实现到优化,由浅入深,抽丝剥茧地把这么浩繁的概念在本书中讲得十分清晰。
——张洋,Autodesk(中国)研发中心平台架构研发部门经理
正如“如何阅读本书”中说的一样,“本书从基本概念作为引子,逐步引入高性能分布式实时处理系统编程所需要的方方面面,抽丝剥茧把实时处理系统的架构
以及实现娓娓道来”,有概念、有理论,有本身知识体系的交代,也有周边必要知识内容的说明,有实战、有案例,不空谈,能落地,是一本不可多得的学习分布式
实时架构的好书。
——贾锋,知名大数据布道者和践行者
前言Preface
为什么要写这本书
云计算与大数据为计算机科学领域注入了前所未有的活力,而大数据的实时处理更是为海量数据处理和数据挖掘带来了崭新的契机。从某种意义上讲,传统大数据
的批处理方式已经一定程度上解决了我们所面临的问题,由MapReduce、BulkSynchronousParallel以及其他计算范式衍生而来的
大规模计算集群已经广泛运用于生产环境中。然而,客户的要求是永不满足的。他们想要更多的数据、服务、价值以及更多的便利。随着数据量的增加,对实时响应
时间的需求也在提高,原本承载着海量数据处理任务的批处理系统在实时计算处理方面越发显得乏力。这么说的原因很简单,像Hadoop使用的
MapReduce这样的数据批处理技术,其设计初衷并不是为了满足实时计算的需求。数据批处理系统与实时处理系统在需求上存在着本质的区别。要做到实时
性,不仅需要及时地推送数据以便处理,还要将数据划分成尽可能小的单位,而像HDFS存储推送数据的能力已经远不能满足实时性的需求。
虽然目前ApacheSpark等新平台和框架越来越为流行,同时极大提升了批处理的性能,但是由于这些传统批处理系统的运行机制本身,无法从根本上解决实时计算的问题。
因此,随着业务数据规模的爆炸式增长,对数据实时处理能力的需求也越来越大。专注于实时性、规模化的计算平台新时代已经悄然来临。
ApacheStorm的出现扭转了传统数据批处理系统的劣势,成为了真正意义上的实时数据处理系统。Storm实时处理系统实现了一个可靠的、高容错
性的实时分布式处理平台,那么这些听起来十分抽象的概念到底是如何实现的呢?这其实就是笔者写作本书的目的之一。当笔者深入研究和学习了Storm的内部
结构和代码实现之后,就在思考有没有什么办法让其他更多的人少走弯路,并能在实践中对这个看似“神秘”的实时处理系统的设计与实现融会贯通呢?
本书特色
本书是一本由浅入深并详细讲解编写一套全新的基于C/C 的实时处理系统的编程实战书。本书从基础知识开始,到实时数据系统的架构设计,到代码的实际
编写,逐步实现一个完整的实时数据处理系统。本书把这套全新的高性能分布式实时处理系统命名为Hurricane,该单词与Storm涵义类似,但略有不
同,其中维基百科对Hurricane的解释是
“Astormthathasverystrongfastwindsandthatmovesoverwater”,即“在水面高速移动的飓风
(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的分布式部署原理与方法。
息队列、动态装载等作了详细介绍,还深入分析了实时处理系统的架构以及内部实现,后详细分析了怎么样实现一套分布式实时处理系统Hurricane。本
书非常适合大数据开发人员和架构师阅读,同时可以解决性能优化的很多问题。
——卢亿雷AdMaster技术副总裁兼总架构师
分布式系统可以追溯到20世纪60年代的ARPANET。随着物联网、边缘计算和其他相关领域的蓬勃发展,对高性能分布式实时处理系统的需求日益增多。这本技术专著着眼于实际分布式框架的编程应用,将助力有志于该领域的软件开发人员。
——安宁Oracle空间数据部门首席工程师
本书将对自己的C 编程、分布式存储系统、分布式计算框架、分布式通信等知识进行洗礼,不知不觉间就提升了自己的层次,期待阅读本书之后,也可以构建一个全新的分布式实时处理系统,变成分布式实时计算领域的贡献者。
——于俊科大讯飞大数据专家
本书由浅到深,从基础的分布式系统的概念、网络通信和C 11高性能编程,到流处理中的消息、消息源、处理单元、收集器、计算拓扑等重要抽象的实现,到日志处理、频繁组合等典型应用,深入研究了一个典型分布式流处理系统的各个重要方面,推荐。
——蔡斌腾讯科技高级工程师
评论
还没有评论。