(六)關(guān)于分布式計(jì)算的一些概念

前言

一 不得不說的Actor模型

1.1 Actor模型的誕生與發(fā)展

1.2 Actor模型是什么?

1.3 Actor模型原理簡單介紹

1.4 Actor模型的優(yōu)缺點(diǎn)

二 初始AKKA

2.1 AKKA簡介

2.2 為什么要用Akka?

三 使用面很廣的Storm

3.1 Storm簡介

3.2 Storm的應(yīng)用場景

3.3 Storm與Hadoop的關(guān)系

四 MapReduce及其引發(fā)的新世界

4.1 MapReduce簡單介紹

4.2 MapReduce與Spark以及Storm孰優(yōu)孰劣關(guān)于三者的一些概括總結(jié)

前言

不管是網(wǎng)絡(luò)、內(nèi)存、還是存儲的分布式鼎姊,它們最終目的都是為了實(shí)現(xiàn)計(jì)算的分布式:數(shù)據(jù)在各個計(jì)算機(jī)節(jié)點(diǎn)上流動,同時(shí)各個計(jì)算機(jī)節(jié)點(diǎn)都能以某種方式訪問共享數(shù)據(jù)相赁,最終分布式計(jì)算后的輸出結(jié)果被持久化存儲和輸出。?分布式作為分布式系統(tǒng)里最重要的一個能力和目標(biāo)慰于,也是大數(shù)據(jù)系統(tǒng)的關(guān)技術(shù)之一钮科。經(jīng)過多年的發(fā)展與演進(jìn),目前業(yè)界已經(jīng)存在很多成熟的分布式計(jì)算相關(guān)的開源編程框架和平臺供我們選擇婆赠。

一 不得不說的Actor模型?

1.1 Actor模型的誕生與發(fā)展?

Carl Hewitt于1970年發(fā)明Actor模型绵脯,當(dāng)時(shí)Actor模型的概念遠(yuǎn)遠(yuǎn)領(lǐng)先于那個時(shí)代,知道Erlang這樣基于Actor模型設(shè)計(jì)的面向并發(fā)編程的新語言橫空出世之后休里,Actor模型才真真火了起來蛆挫。

1.2 Actor模型是什么?

Actor是計(jì)算機(jī)科學(xué)領(lǐng)域中的一個并行計(jì)算模型妙黍,它把Actor當(dāng)做通用的并行計(jì)算原語:一個Actor對接收到的消息做出響應(yīng)悴侵,進(jìn)行本地決策,可以創(chuàng)建更多的Actor(子Actor)拭嫁,或者發(fā)送更多的消息可免;同時(shí)準(zhǔn)備接收下一條消息抓于。

在Actor理論中,一切都被認(rèn)為是Actor浇借,這和面向?qū)ο笳Z言里一切都被看成對象很類似捉撮。但包括面向?qū)ο笳Z言在內(nèi)的軟件通常是順序執(zhí)行的,而Actor模型本質(zhì)上則是并發(fā)的妇垢。Actor之間僅通過發(fā)送消息進(jìn)行通信巾遭,所有的操作都是異步的,不同的Actor可以同時(shí)處理各自的信息闯估,使整個系統(tǒng)獲得大規(guī)模的并發(fā)能力灼舍。

1.3 Actor模型原理簡單介紹

Actor模型簡單原理圖:?

根據(jù)上圖,每個Actor都有一個Mailbox(郵箱)睬愤,Actor A 發(fā)送給消息給Actor B片仿,就好像Actor A 給Actor B寫了一封郵箱地址為Actor B的郵箱地址的郵件(消息)一樣,隨后平臺負(fù)責(zé)投遞郵件尤辱。當(dāng)郵件Actor B之后砂豌,平臺就會通知Actor B收取郵件并做出回復(fù),如果有多封郵件光督,則Actor B順序處理阳距。很簡單和容易理解的技術(shù),但是蘊(yùn)含了強(qiáng)大的力量结借。

Actor B收到消息后可能會做那些處理呢筐摘?

1創(chuàng)建其他Actor、2向其他Actor發(fā)送消息船老、3指定下一條消息到來的行為咖熟,比如修改自己的狀態(tài)

在什么情況下一個Actor會創(chuàng)建子Actor呢?

通常情況是為了并行計(jì)算,比如我們有10G的文件要分析處理柳畔,我們可以在根Actor里創(chuàng)建10個子Actor馍管,讓每個Actor分別處理一個文件,為此根Actor給每個子Actor發(fā)送一個消息薪韩,消息里包含分配給它的的文件編號(或位置)确沸,當(dāng)子Actor完成處理后,就把處理好的結(jié)果封裝為應(yīng)答消息返回給根Actor俘陷,然后根Actor在進(jìn)行最后的匯總與輸出罗捎,下面是這個過程的示意圖。

一個Actor與其所創(chuàng)建的Actor形成父子關(guān)系拉盾。在實(shí)際編程中桨菜,Actor應(yīng)該監(jiān)督其所創(chuàng)建的Actor的狀態(tài),原因是父Actor知道可能會出現(xiàn)那些失敗情況捉偏,知道如何處理他們雷激,比如重新產(chǎn)生一個新的子Actor 來重做失敗的任務(wù)替蔬,或者某個Actor失敗后就通知其他Actor終止任務(wù)

1.4 Actor模型的優(yōu)缺點(diǎn)

通過上面對Actor模型原理的簡單分析屎暇,我們來總結(jié)一下Actor模型的優(yōu)缺點(diǎn)承桥。

優(yōu)點(diǎn):

1)將消息收發(fā)、線程調(diào)度根悼、處理競爭和同步的所有復(fù)雜邏輯都委托給了Actor框架本身凶异,而且對應(yīng)用來說是透明的,我們可以認(rèn)為Actor只是一個實(shí)現(xiàn)了Runnable接口的對象挤巡。關(guān)注多線程并發(fā)問題時(shí)剩彬,只需要關(guān)注多個Actor之間的消息流即可。?

2)符合Actor模型的程序很容易進(jìn)行測試矿卑,因?yàn)?b>任意一個Actor都可以被單獨(dú)進(jìn)行單元測試喉恋。如果測試案例覆蓋了該Actor所能響應(yīng)的所有類型的消息,我們就可以確定該Actor的代碼十分可靠母廷。

缺點(diǎn):

1) Actor完全避免共享并且僅通過消息來進(jìn)行交流轻黑,使得程序失去了精細(xì)化并發(fā)調(diào)控能力,所以不適合實(shí)施細(xì)粒度并行且可能導(dǎo)致系統(tǒng)響應(yīng)時(shí)延的增加琴昆。如果在Actor程序中引入一些并行框架风喇,就可能會導(dǎo)致系統(tǒng)的不確定性有送。?

2)盡管使用Actor模型的程序 比使用線程和鎖模型的程序更容易調(diào)試,Actor模型仍會碰到死鎖這一類的共性問題膛壹,也會碰到一些Actor模型獨(dú)有的問題(例如信箱移溢出)斗遏。

二 初始AKKA?

2.1 AKKA簡介?

Akka 是一個用 Scala 編寫叽唱,用于簡化編寫容錯的励两、高可伸縮性的 Java 和 Scala Actor 模型應(yīng)用帕涌。它已經(jīng)成功運(yùn)用在電信行業(yè)。系統(tǒng)幾乎不會宕機(jī)(高可用性 99.9999999 % 一年只有 31 ms 宕機(jī))下面。

Akka雖然是Scala寫成的复颈,但是由于Scala最終還是編譯為Java字節(jié)碼運(yùn)行在JVM上,所以我們可以認(rèn)為Akka屬于Java領(lǐng)域诸狭。

Akka處理并發(fā)的方法基于Actor模型。在Akka里君纫,Actor之間通信的唯一機(jī)制就是消息傳遞驯遇。

Akka官方宣傳是這樣介紹Akka的:

是對并發(fā)、并行程序的簡單的高級別的抽象

異步蓄髓、非阻塞叉庐、高性能的事件驅(qū)動編程模型

是非常輕量級的事件驅(qū)動處理(1GB內(nèi)存可容納約270萬個actors)

2.2 為什么要用Akka?

Akka是一個運(yùn)行時(shí)與編程模型一致的系統(tǒng),為以下目標(biāo)設(shè)計(jì):

1垂直擴(kuò)展并發(fā)

2水平擴(kuò)展遠(yuǎn)程調(diào)用

3高容錯

使用Akka帶來的好處:

AKKA提供一種Actor并發(fā)模型会喝,其粒度比線程小很多陡叠,這意味著你可以在項(xiàng)目中使用大量的Actor玩郊。

Akka提供了一套容錯機(jī)制,允許在Actor出錯時(shí)進(jìn)行一些恢復(fù)或者重置操作

AKKA不僅可以在單機(jī)上構(gòu)建高并發(fā)程序枉阵,也可以在網(wǎng)絡(luò)中構(gòu)建分布式程序译红,并提供位置透明的Actor定位服務(wù)

三 使用面很廣的Storm?

與前面提到的Actor面向消息的分布式計(jì)算式模型不同,Apache Storm提供的是面向連續(xù)消息流(Stream)的一種通用的分布式計(jì)算解決框架兴溜。

2.1 Storm簡介??

Apache Storm是一種側(cè)重于極低延遲流處理框架侦厚,也是要求近實(shí)時(shí)處理工作負(fù)載的最佳選擇。該技術(shù)可處理非常大量的數(shù)據(jù)拙徽,通過比其他解決方案更低的延遲提供結(jié)果刨沦。

Storm作為實(shí)時(shí)流式計(jì)算中的佼佼者,因其良好的特性使其使用場景非常廣泛膘怕。?

Zookeeper作為分布式協(xié)調(diào)服務(wù)框架想诅,因其完善的數(shù)據(jù)一致性保證特性使其成為各框架必備組件

2.2 Storm的應(yīng)用場景?

1)日志處理:?監(jiān)控系統(tǒng)中的事件日志岛心,使用 Storm 檢查每條日志信息来破,把符合匹配規(guī)則的消息保存到數(shù)據(jù)庫。?

2)電商商品推薦:?后臺需要維護(hù)每個用戶的興趣點(diǎn)鹉梨,主要基于用戶的歷史行為讳癌、查詢、點(diǎn)擊存皂、地理信息等信息獲得晌坤,其中有很多實(shí)時(shí)數(shù)據(jù),可以使用 Storm 進(jìn)行處理旦袋,在此基礎(chǔ)上進(jìn)行精準(zhǔn)的商品推薦和放置廣告骤菠。

2.3 Storm與Hadoop的關(guān)系

Hadoop 是強(qiáng)大的大數(shù)據(jù)處理系統(tǒng),但是在實(shí)時(shí)計(jì)算方面不夠擅長疤孕;Storm的核心功能就是提供強(qiáng)大的實(shí)時(shí)處理能力商乎,但沒有涉及存儲;所以 Storm 與 Hadoop 即不同也互補(bǔ)祭阀。

Storm與Hadoop應(yīng)用場景對比:

Storm:?分布式實(shí)時(shí)計(jì)算鹉戚,強(qiáng)調(diào)實(shí)時(shí)性,常用于實(shí)時(shí)性要求較高的地方?

Hadoop:分布式批處理計(jì)算专控,強(qiáng)調(diào)批處理抹凳,常用于對已經(jīng)在的大量數(shù)據(jù)挖掘、分析

三 MapReduce及其引發(fā)的新世界?

3.1 MapReduce簡單介紹?

與前面介紹的Actor模型一樣伦腐,MapReduce本質(zhì)上也是一種很古老的并行計(jì)算模型赢底,它的名字起源于LISP類函數(shù)式語言里的map和reduce操作。MapReduce的計(jì)算模型非常簡單,它的思想就是“分而治之”幸冻,Mapper負(fù)責(zé)“分”粹庞,即把復(fù)雜的大任務(wù)分解為若干個小任務(wù)來處理,彼此之間沒有依賴關(guān)系洽损,以便可以分布到多個計(jì)算節(jié)點(diǎn)上實(shí)現(xiàn)高度的并行計(jì)算能力庞溜;Reducer則負(fù)責(zé)對map階段的結(jié)果進(jìn)行匯總和輸出

我們通過一個最簡單的統(tǒng)計(jì)詞頻的案例看一下趁啸,MapReduce的簡單原理:?

3.2 MapReduce與Spark以及Storm孰優(yōu)孰劣

Hadoop傳統(tǒng)意義上就是離線數(shù)據(jù)處理平臺强缘。但是2.0之后就不一樣了,因?yàn)槎嗔藋arn資源管理器(可能是收到了分布式資源調(diào)度系統(tǒng)Mesos的啟發(fā))不傅,Spark和Storm都可以搭建在Hadoop之上旅掂,用yarn進(jìn)行調(diào)度。這是大數(shù)據(jù)處理中目前最流行的三個計(jì)算框架访娶。

Mapreduce:?適用于離線計(jì)算商虐。這個框架充分利用了磁盤,處處存在著排序和合并崖疤。所以適合于實(shí)時(shí)性不高的離線計(jì)算秘车。

Spark:?相對于Hadoop的MapReduce會在運(yùn)行完工作后將中介數(shù)據(jù)存放到磁盤中,Spark使用了存儲器內(nèi)運(yùn)算技術(shù)劫哼,能在數(shù)據(jù)尚未寫入硬盤時(shí)即在存儲器內(nèi)分析運(yùn)算叮趴。Spark在存儲器內(nèi)運(yùn)行程序的運(yùn)算速度能做到比Hadoop MapReduce的運(yùn)算速度快上100倍,即便是運(yùn)行程序于硬盤時(shí)权烧,Spark也能快上10倍速度眯亦。Spark允許用戶將數(shù)據(jù)加載至集群存儲器,并多次對其進(jìn)行查詢般码,非常適合用于機(jī)器學(xué)習(xí)算法妻率。

Storm:?一種側(cè)重于極低延遲的流處理框架,也是要求近實(shí)時(shí)處理的工作負(fù)載的最佳選擇板祝。該技術(shù)可處理非常大量的數(shù)據(jù)宫静,通過比其他解決方案更低的延遲提供結(jié)果。

關(guān)于三者的一些概括總結(jié)

Hadoop:?離線分析框架券时,適合離線的復(fù)雜的大數(shù)據(jù)處理?

Spark:內(nèi)存計(jì)算框架孤里,適合在線、離線快速的大數(shù)據(jù)處理?

Storm:?流式計(jì)算框架橘洞,適合在線的實(shí)時(shí)的大數(shù)據(jù)處理

https://blog.csdn.net/qq_34337272/article/details/80549020

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捌袜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震檩,更是在濱河造成了極大的恐慌琢蛤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抛虏,死亡現(xiàn)場離奇詭異博其,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)迂猴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門慕淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沸毁,你說我怎么就攤上這事峰髓。” “怎么了息尺?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵携兵,是天一觀的道長。 經(jīng)常有香客問我搂誉,道長徐紧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任炭懊,我火速辦了婚禮并级,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侮腹。我一直安慰自己嘲碧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布父阻。 她就那樣靜靜地躺著愈涩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪至非。 梳的紋絲不亂的頭發(fā)上钠署,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音荒椭,去河邊找鬼谐鼎。 笑死,一個胖子當(dāng)著我的面吹牛趣惠,可吹牛的內(nèi)容都是我干的狸棍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼味悄,長吁一口氣:“原來是場噩夢啊……” “哼草戈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侍瑟,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤唐片,失蹤者是張志新(化名)和其女友劉穎丙猬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體费韭,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茧球,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了星持。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抢埋。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖督暂,靈堂內(nèi)的尸體忽然破棺而出揪垄,到底是詐尸還是另有隱情,我是刑警寧澤逻翁,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布饥努,位于F島的核電站,受9級特大地震影響八回,放射性物質(zhì)發(fā)生泄漏肪凛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一辽社、第九天 我趴在偏房一處隱蔽的房頂上張望伟墙。 院中可真熱鬧,春花似錦滴铅、人聲如沸戳葵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拱烁。三九已至,卻和暖如春噩翠,著一層夾襖步出監(jiān)牢的瞬間戏自,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工伤锚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擅笔,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓屯援,卻偏偏與公主長得像猛们,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狞洋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容