官术网_书友最值得收藏!

前言

為什么要寫這本書

云計(jì)算與大數(shù)據(jù)為計(jì)算機(jī)科學(xué)領(lǐng)域注入了前所未有的活力,而大數(shù)據(jù)的實(shí)時(shí)處理更是為海量數(shù)據(jù)處理和數(shù)據(jù)挖掘帶來了嶄新的契機(jī)。從某種意義上講,傳統(tǒng)大數(shù)據(jù)的批處理方式已經(jīng)一定程度上解決了我們所面臨的問題,由MapReduce、Bulk Synchronous Parallel以及其他計(jì)算范式衍生而來的大規(guī)模計(jì)算集群已經(jīng)廣泛運(yùn)用于生產(chǎn)環(huán)境中。然而,客戶的要求是永不滿足的。他們想要更多的數(shù)據(jù)、服務(wù)、價(jià)值以及更多的便利。隨著數(shù)據(jù)量的增加,對(duì)實(shí)時(shí)響應(yīng)時(shí)間的需求也在提高,原本承載著海量數(shù)據(jù)處理任務(wù)的批處理系統(tǒng)在實(shí)時(shí)計(jì)算處理方面越發(fā)顯得乏力。這么說的原因很簡(jiǎn)單,像Hadoop使用的MapReduce這樣的數(shù)據(jù)批處理技術(shù),其設(shè)計(jì)初衷并不是為了滿足實(shí)時(shí)計(jì)算的需求。數(shù)據(jù)批處理系統(tǒng)與實(shí)時(shí)處理系統(tǒng)在需求上存在著本質(zhì)的區(qū)別。要做到實(shí)時(shí)性,不僅需要及時(shí)地推送數(shù)據(jù)以便處理,還要將數(shù)據(jù)劃分成盡可能小的單位,而像HDFS存儲(chǔ)推送數(shù)據(jù)的能力已經(jīng)遠(yuǎn)不能滿足實(shí)時(shí)性的需求。

雖然目前Apache Spark等新平臺(tái)和框架越來越為流行,同時(shí)極大提升了批處理的性能,但是由于這些傳統(tǒng)批處理系統(tǒng)的運(yùn)行機(jī)制本身,無法從根本上解決實(shí)時(shí)計(jì)算的問題。

因此,隨著業(yè)務(wù)數(shù)據(jù)規(guī)模的爆炸式增長(zhǎng),對(duì)數(shù)據(jù)實(shí)時(shí)處理能力的需求也越來越大。專注于實(shí)時(shí)性、規(guī)模化的計(jì)算平臺(tái)新時(shí)代已經(jīng)悄然來臨。

Apache Storm的出現(xiàn)扭轉(zhuǎn)了傳統(tǒng)數(shù)據(jù)批處理系統(tǒng)的劣勢(shì),成為了真正意義上的實(shí)時(shí)數(shù)據(jù)處理系統(tǒng)。Storm實(shí)時(shí)處理系統(tǒng)實(shí)現(xiàn)了一個(gè)可靠的、高容錯(cuò)性的實(shí)時(shí)分布式處理平臺(tái),那么這些聽起來十分抽象的概念到底是如何實(shí)現(xiàn)的呢?這其實(shí)就是筆者寫作本書的目的之一。當(dāng)筆者深入研究和學(xué)習(xí)了Storm的內(nèi)部結(jié)構(gòu)和代碼實(shí)現(xiàn)之后,就在思考有沒有什么辦法讓其他更多的人少走彎路,并能在實(shí)踐中對(duì)這個(gè)看似“神秘”的實(shí)時(shí)處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)融會(huì)貫通呢?

本書特色

本書是一本由淺入深并詳細(xì)講解編寫一套全新的基于C/C++的實(shí)時(shí)處理系統(tǒng)的編程實(shí)戰(zhàn)書。本書從基礎(chǔ)知識(shí)開始,到實(shí)時(shí)數(shù)據(jù)系統(tǒng)的架構(gòu)設(shè)計(jì),到代碼的實(shí)際編寫,逐步實(shí)現(xiàn)一個(gè)完整的實(shí)時(shí)數(shù)據(jù)處理系統(tǒng)。本書把這套全新的高性能分布式實(shí)時(shí)處理系統(tǒng)命名為Hurricane,該單詞與Storm涵義類似,但略有不同,其中維基百科對(duì)Hurricane的解釋是“A storm that has very strong fast winds and that moves over water”,即“在水面高速移動(dòng)的颶風(fēng)(storm)”。

同時(shí),為了支持高性能的實(shí)時(shí)處理系統(tǒng),我們必須提供高性能的網(wǎng)絡(luò)層,能夠支持大量的并發(fā),因此本書設(shè)計(jì)實(shí)現(xiàn)了一套跨平臺(tái)的網(wǎng)絡(luò)庫(kù)Meshy,并將其作為Hurricane實(shí)時(shí)處理系統(tǒng)的傳輸層。

為了編寫更清晰、易于移植、易于維護(hù)的現(xiàn)代化C++代碼,我們?cè)跁写罅渴褂昧薈++11的特性,從一些小的語(yǔ)法點(diǎn)(如auto、override)到C++11中新增加的庫(kù)(如thread、chrono、functional)到一些翻天覆地的語(yǔ)法特性(如統(tǒng)一初始化、Lambda表達(dá)式)都有所涉及。每當(dāng)遇到新的C++11知識(shí)時(shí),我們都會(huì)著重向讀者介紹。由于目前C++14還不夠普及成熟,因此在本書中暫不考慮C++14的特性。

為此,本書一開始將會(huì)花費(fèi)大量篇幅介紹分布式計(jì)算存儲(chǔ)的概念以及網(wǎng)絡(luò)通信的基礎(chǔ)知識(shí)。接著闡述和分布式計(jì)算存儲(chǔ)相關(guān)的網(wǎng)絡(luò)高層抽象知識(shí),為構(gòu)建分布式網(wǎng)絡(luò)應(yīng)用打下堅(jiān)實(shí)基礎(chǔ)。接著集中介紹本書需要運(yùn)用的C++相關(guān)知識(shí),包括C++11的語(yǔ)言特性以及需要了解的底層知識(shí)。之后就開始介紹Hurricane實(shí)時(shí)處理系統(tǒng)的設(shè)計(jì)方案,并引導(dǎo)讀者一步步自己實(shí)現(xiàn)Hurricane實(shí)時(shí)處理系統(tǒng)。

完成Hurricane實(shí)時(shí)處理系統(tǒng)的主體功能部分后,我們轉(zhuǎn)而介紹Meshy,闡述如何實(shí)現(xiàn)Meshy這一跨平臺(tái)的網(wǎng)絡(luò)框架,并與Hurricane實(shí)時(shí)處理系統(tǒng)進(jìn)行對(duì)接。為了實(shí)現(xiàn)跨平臺(tái)的高性能網(wǎng)絡(luò)通信庫(kù),我們必須學(xué)習(xí)使用epoll、IOCP等與平臺(tái)密切相關(guān)的技術(shù)來保證系統(tǒng)性能。同時(shí),我們也要學(xué)會(huì)如何編寫管理一個(gè)需要考慮移植和平臺(tái)兼容性的系統(tǒng)的技巧與實(shí)踐方法。最后輔以實(shí)戰(zhàn)用例講解如何將該系統(tǒng)應(yīng)用于實(shí)際的生產(chǎn)環(huán)境中。

總之,Hurricane實(shí)時(shí)處理系統(tǒng)是一個(gè)使用C++11編寫的,以高性能為關(guān)注點(diǎn)的分布式實(shí)時(shí)計(jì)算框架,使用流模型作為計(jì)算模型,同時(shí)提供更易于理解的高層接口。

希望讀者能夠從本書中或多或少學(xué)到點(diǎn)新的知識(shí),能夠?qū)++語(yǔ)言以及網(wǎng)絡(luò)通信有更加深入的認(rèn)識(shí),了解如何構(gòu)建一個(gè)可應(yīng)用于生產(chǎn)環(huán)境的分布式實(shí)時(shí)處理系統(tǒng)。

如何閱讀本書

本書以最基本的云計(jì)算與大數(shù)據(jù)概念作為引子,逐步引入高性能分布式實(shí)時(shí)處理系統(tǒng)編程所需要的知識(shí),抽絲剝繭地把有關(guān)實(shí)時(shí)處理系統(tǒng)的架構(gòu)以及內(nèi)部實(shí)現(xiàn)娓娓道來。

第1章 介紹分布式系統(tǒng)的一些基本概念,以及開發(fā)實(shí)時(shí)處理系統(tǒng)所需要具備的一些重要知識(shí)點(diǎn)。

第2章 介紹分布式系統(tǒng)通信基礎(chǔ),包括TCP/IP以及Socket方面的基本概念,為后續(xù)開發(fā)網(wǎng)絡(luò)庫(kù)Meshy做知識(shí)儲(chǔ)備。

第3章 介紹分布式系統(tǒng)通信所需的高層抽象,包括RPC遠(yuǎn)程過程調(diào)用、RESTful、消息隊(duì)列等常用的通信模型。同時(shí)介紹基本的序列化概念與解決方案,并使用Thrift開發(fā)簡(jiǎn)單的公告牌服務(wù),為Hurricane的開發(fā)建立通信抽象與框架上的基礎(chǔ)概念。

第4章 介紹C++高性能編程所需的基礎(chǔ)與進(jìn)階知識(shí),包括C++中的內(nèi)存資源管理、編碼解決方案、并發(fā)與異步處理以及內(nèi)存管理技巧,以及C++11中與內(nèi)存管理、編碼處理、線程模型相關(guān)的內(nèi)容。

第5章 介紹分布式處理系統(tǒng)的基本概念,包括批處理與實(shí)時(shí)處理的區(qū)別,Hadoop與Storm的基本介紹及基本模型。最后介紹可靠消息處理的基本思想。

第6章 介紹實(shí)時(shí)處理系統(tǒng)的總體架構(gòu)與接口設(shè)計(jì),包括消息源、消息處理器、數(shù)據(jù)收集器、元組以及序列化接口。

第7章 介紹服務(wù)組件的設(shè)計(jì)與實(shí)現(xiàn),包括Executor及其消息隊(duì)列、動(dòng)態(tài)裝載以及Task的設(shè)計(jì)與實(shí)現(xiàn)等。

第8章 介紹管理服務(wù)的設(shè)計(jì)與實(shí)現(xiàn),其中包括集群管理器President以及節(jié)點(diǎn)管理器Manager的架構(gòu)設(shè)計(jì)與編程實(shí)現(xiàn)。

第9章 介紹實(shí)時(shí)處理系統(tǒng)中各部分接口的實(shí)現(xiàn),包括消息源、消息處理單元以及數(shù)據(jù)收集器的實(shí)現(xiàn)。

第10章 介紹可靠消息處理的概念、接口設(shè)計(jì)與具體實(shí)現(xiàn),包括簡(jiǎn)單和高效的實(shí)現(xiàn)方案。

第11章 介紹底層數(shù)據(jù)傳輸層及Meshy的設(shè)計(jì)與實(shí)現(xiàn),包括I/O多路復(fù)用的概念與實(shí)現(xiàn)方法、所需的基礎(chǔ)工具,以及跨平臺(tái)的實(shí)現(xiàn)方案。最后輔以實(shí)戰(zhàn)用例來展示集成與使用Meshy的方法。

第12章 介紹事務(wù)性計(jì)算拓?fù)涞母拍睢?shí)現(xiàn)方案與編程實(shí)現(xiàn),并介紹相關(guān)API,以及如何使用Cassandra存儲(chǔ)元數(shù)據(jù)。

第13章 介紹在不同的編程語(yǔ)言中實(shí)現(xiàn)計(jì)算拓?fù)涞姆椒ǎ⒃诂F(xiàn)有技術(shù)基礎(chǔ)上增加一些新的技術(shù)。

第14章 介紹基于Hurricane實(shí)時(shí)處理系統(tǒng)的高級(jí)抽象元語(yǔ)、分布式遠(yuǎn)程過程調(diào)用(DRPC)的設(shè)計(jì)、實(shí)現(xiàn)方案及編程實(shí)戰(zhàn)。

第15章 介紹了基于Hurricane實(shí)時(shí)處理系統(tǒng)開發(fā)的日志流處理實(shí)例,其中包含日志流處理的整體流程、使用Hurricane處理日志的具體實(shí)現(xiàn)思路,以及使用Hurricane處理日志的具體實(shí)現(xiàn)。

第16章 介紹了基于Hurricane實(shí)時(shí)處理系統(tǒng)開發(fā)的頻繁組合查找實(shí)例,其中包含頻繁項(xiàng)集挖掘概念與方法、頻繁二項(xiàng)集挖掘算法原理與實(shí)現(xiàn)分布式統(tǒng)計(jì)方法。并介紹如何使用Hurricane實(shí)現(xiàn)自己的頻繁二項(xiàng)集挖掘系統(tǒng)。

第17章 介紹在AWS和阿里云上部署Hurricane實(shí)時(shí)處理系統(tǒng),首先介紹在AWS上創(chuàng)建私有云和EC2實(shí)例的方法,接著介紹在阿里云上創(chuàng)建私有云和ECS實(shí)例的方法,最后介紹Hurricane的分布式部署原理與方法。

閱讀前提

本書采用Ubuntu或Debian操作系統(tǒng)以及Windows操作系統(tǒng)作為基本的開發(fā)環(huán)境。此外,本書并不準(zhǔn)備對(duì)基礎(chǔ)的編程概念進(jìn)行理論介紹。我們假定你在閱讀本書之前已經(jīng)達(dá)到基本的編程技術(shù)水平以及具備一定的C++編程經(jīng)驗(yàn)和功底。如果不是,筆者建議閱讀《C++編程思想》作為基礎(chǔ)來了解編程的基本概念,并閱讀《高級(jí)C/C++編譯技術(shù)》作為提高。

本書版式約定

在本書中,讀者會(huì)發(fā)現(xiàn)針對(duì)不同信息類型的文本樣式。下面是這些樣式的示例和解釋。

所有命令行輸入和輸出如下所示:


mkdir Hurricane
cd Hurricane

代碼清單通常以以下格式展現(xiàn):


1  #include <iostream>
2  #include <cstdlib>
3
4  int main( )
5  {
6       std::cout << "Welcome to Hurricane" << std::endl;
7
8       return EXIT_SUCCESS;
9  }

在正文中時(shí)常會(huì)用以下方式拓展所講解的內(nèi)容:

提示 這里是相關(guān)提示的文字。

讀者對(duì)象

(1)大數(shù)據(jù)系統(tǒng)研發(fā)工程師。本書不但講解高性能分布式實(shí)時(shí)處理系統(tǒng)編程所需要的方方面面,抽絲剝繭地呈現(xiàn)出實(shí)時(shí)處理系統(tǒng)的架構(gòu)以及內(nèi)部實(shí)現(xiàn),還帶領(lǐng)大家自己編寫一套分布式實(shí)時(shí)處理系統(tǒng)。

(2)研發(fā)人員。本書是一本深入剖析分布式實(shí)時(shí)處理系統(tǒng)編號(hào)的指南。

(3)架構(gòu)師。本書是一本層次化分布式系統(tǒng)架構(gòu)設(shè)計(jì)的實(shí)戰(zhàn)書。讀者可以深入理解分布式實(shí)時(shí)處理系統(tǒng)的內(nèi)部構(gòu)造以及重要組成部分,并自已設(shè)計(jì)分布式系統(tǒng)的各個(gè)層次。

(4)編程初學(xué)者。學(xué)習(xí)實(shí)戰(zhàn)技術(shù),掌握分布式系統(tǒng)開發(fā)中慣用的編程技巧。

勘誤和支持

雖然筆者在編寫本書的過程中經(jīng)過反復(fù)審校,全力確保本書內(nèi)容的準(zhǔn)確性,但疏漏在所難免。書中難免可能會(huì)出現(xiàn)一些不妥或不準(zhǔn)確的描述,懇請(qǐng)讀者批評(píng)指正。本書所涉及的所有源代碼及工程都可以從華章官網(wǎng)(www.hzbook.com)下載,同時(shí)這些項(xiàng)目也都是開源項(xiàng)目。現(xiàn)在我懷著期盼和忐忑的心情,將這本著作呈獻(xiàn)給大家,我渴望得到你的認(rèn)可,更渴望和你成為朋友,如果你有任何問題和建議,請(qǐng)與我聯(lián)系(電子郵箱:samblg@me.com),期待能夠得到你的真摯反饋。

致謝

在創(chuàng)作本書的過程中,我得到了很多人的幫助,這里必須要一一感謝,聊表寸心。感謝魯昌華教授,在我的成長(zhǎng)道路上給予了很大的支持和鼓勵(lì)。感謝我在Autodesk中國(guó)研究院(ACRD)的同事和思科系統(tǒng)(中國(guó))研發(fā)中心的朋友。特別是我的良師益友彭敏、曠天亮和徐立冰,在我的學(xué)習(xí)工作中給予了很大幫助。感謝我的好友金柳頎,感謝你在寫作本書過程中的通力合作以及技術(shù)問題上的共同探討。還要感謝機(jī)械工業(yè)出版社的高婧雅編輯對(duì)我的信任與支持。

謹(jǐn)以此書獻(xiàn)給我最親愛的家人與朋友,你們是我奮斗路上堅(jiān)強(qiáng)的后盾。

盧譽(yù)聲

于上海

主站蜘蛛池模板: 金沙县| 剑川县| 宿松县| 佳木斯市| 长顺县| 石楼县| 江口县| 五原县| 监利县| 东兴市| 百色市| 滦平县| 闵行区| 梅州市| 永平县| 合阳县| 天镇县| 宁波市| 蓝田县| 台南县| 乌鲁木齐县| 永安市| 闸北区| 岳阳市| 琼海市| 扬中市| 琼海市| 乌鲁木齐市| 喜德县| 双牌县| 德阳市| 沭阳县| 蒙自县| 大同市| 朝阳区| 宝丰县| 冕宁县| 金堂县| 瑞丽市| 漯河市| 仪征市|