Praise本书赞誉
本书不但讲解高性能分布式实时处理系统编程的原理,特别对内存资源管理、编码解决方案、并发与异步处理、线程模型、批处理与实时处理的区别、消息队列、动态装载等作了详细介绍,还深入分析了实时处理系统的架构以及内部实现,最后详细分析了怎样实现一套分布式实时处理系统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的分布式部署原理与方法。