摘要:關于三者的一些概括總結離線分析框架,適合離線的復雜的大數據處理內存計算框架,適合在線離線快速的大數據處理流式計算框架,適合在線的實時的大數據處理我是一個以架構師為年之內目標的小小白。
整理自《架構解密從分布式到微服務》第七章——聊聊分布式計算.做了相應補充和修改。
[TOC]
前言不管是網絡、內存、還是存儲的分布式,它們最終目的都是為了實現計算的分布式:數據在各個計算機節(jié)點上流動,同時各個計算機節(jié)點都能以某種方式訪問共享數據,最終分布式計算后的輸出結果被持久化存儲和輸出。 分布式作為分布式系統里最重要的一個能力和目標,也是大數據系統的關技術之一。經過多年的發(fā)展與演進,目前業(yè)界已經存在很多成熟的分布式計算相關的開源編程框架和平臺供我們選擇。
一 不得不說的Actor模型 1.1 Actor模型的誕生與發(fā)展Carl Hewitt于1970年發(fā)明Actor模型,當時Actor模型的概念遠遠領先于那個時代,知道Erlang這樣基于Actor模型設計的面向并發(fā)編程的新語言橫空出世之后,Actor模型才真真火了起來。
1.2 Actor模型是什么?Actor是計算機科學領域中的一個并行計算模型,它把Actor當做通用的并行計算原語:一個Actor對接收到的消息做出響應,進行本地決策,可以創(chuàng)建更多的Actor(子Actor),或者發(fā)送更多的消息;同時準備接收下一條消息。
在Actor理論中,一切都被認為是Actor,這和面向對象語言里一切都被看成對象很類似。但包括面向對象語言在內的軟件通常是順序執(zhí)行的,而Actor模型本質上則是并發(fā)的。Actor之間僅通過發(fā)送消息進行通信,所有的操作都是異步的,不同的Actor可以同時處理各自的信息,使整個系統獲得大規(guī)模的并發(fā)能力。
1.3 Actor模型原理簡單介紹Actor模型簡單原理圖:
根據上圖,每個Actor都有一個Mailbox(郵箱),Actor A 發(fā)送給消息給Actor B,就好像Actor A 給Actor B寫了一封郵箱地址為Actor B的郵箱地址的郵件(消息)一樣,隨后平臺負責投遞郵件。當郵件Actor B之后,平臺就會通知Actor B收取郵件并做出回復,如果有多封郵件,則Actor B按順序處理。很簡單和容易理解的技術,但是蘊含了強大的力量。Actor B收到消息后可能會做那些處理呢?
創(chuàng)建其他Actor
向其他Actor發(fā)送消息
指定下一條消息到來的行為,比如修改自己的狀態(tài)
在什么情況下一個Actor會創(chuàng)建子Actor呢?
通常情況是為了并行計算,比如我們有10G的文件要分析處理,我們可以在根Actor里創(chuàng)建10個子Actor,讓每個Actor分別處理一個文件,為此根Actor給每個子Actor發(fā)送一個消息,消息里包含分配給它的的文件編號(或位置),當子Actor完成處理后,就把處理好的結果封裝為應答消息返回給根Actor,然后根Actor在進行最后的匯總與輸出,下面是這個過程的示意圖。
一個Actor與其所創(chuàng)建的Actor形成父子關系。在實際編程中,父Actor應該監(jiān)督其所創(chuàng)建的子Actor的狀態(tài),原因是父Actor知道可能會出現那些失敗情況,知道如何處理他們,比如重新產生一個新的子Actor 來重做失敗的任務,或者某個Actor失敗后就通知其他Actor終止任務。
1.4 Actor模型的優(yōu)缺點通過上面對Actor模型原理的簡單分析,我們來總結一下Actor模型的優(yōu)缺點。
優(yōu)點:
1)將消息收發(fā)、線程調度、處理競爭和同步的所有復雜邏輯都委托給了Actor框架本身,而且對應用來說是透明的,我們可以認為Actor只是一個實現了Runnable接口的對象。關注多線程并發(fā)問題時,只需要關注多個Actor之間的消息流即可。
2)符合Actor模型的程序很容易進行測試,因為任意一個Actor都可以被多帶帶進行單元測試。如果測試案例覆蓋了該Actor所能響應的所有類型的消息,我們就可以確定該Actor的代碼十分可靠。
缺點:
1) Actor完全避免共享并且僅通過消息來進行交流,使得程序失去了精細化并發(fā)調控能力,所以不適合實施細粒度的并行且可能導致系統響應時延的增加。如果在Actor程序中引入一些并行框架,就可能會導致系統的不確定性。二 初始AKKA 2.1 AKKA簡介
2)盡管使用Actor模型的程序 比使用線程和鎖模型的程序更容易調試,Actor模型仍會碰到死鎖這一類的共性問題,也會碰到一些Actor模型獨有的問題(例如信箱移溢出)。
Akka 是一個用 Scala 編寫的庫,用于簡化編寫容錯的、高可伸縮性的 Java 和 Scala 的 Actor 模型應用。它已經成功運用在電信行業(yè)。系統幾乎不會宕機(高可用性 99.9999999 % 一年只有 31 ms 宕機)。
Akka雖然是Scala寫成的,但是由于Scala最終還是編譯為Java字節(jié)碼運行在JVM上,所以我們可以認為Akka屬于Java領域。
Akka處理并發(fā)的方法基于Actor模型。在Akka里,Actor之間通信的唯一機制就是消息傳遞。
Akka官方宣傳是這樣介紹Akka的:
是對并發(fā)、并行程序的簡單的高級別的抽象
是異步、非阻塞、高性能的事件驅動編程模型
是非常輕量級的事件驅動處理(1GB內存可容納約270萬個actors)
2.2 為什么要用Akka?Akka是一個運行時與編程模型一致的系統,為以下目標設計:
垂直擴展(并發(fā))
水平擴展(遠程調用)
高容錯
使用Akka帶來的好處:
AKKA提供一種Actor并發(fā)模型,其粒度比線程小很多,這意味著你可以在項目中使用大量的Actor。
Akka提供了一套容錯機制,允許在Actor出錯時進行一些恢復或者重置操作
AKKA不僅可以在單機上構建高并發(fā)程序,也可以在網絡中構建分布式程序,并提供位置透明的Actor定位服務
三 使用面很廣的Storm與前面提到的Actor面向消息的分布式計算式模型不同,Apache Storm提供的是面向連續(xù)的消息流(Stream)的一種通用的分布式計算解決框架。2.1 Storm簡介
Apache Storm是一種側重于極低延遲的流處理框架,也是要求近實時處理的工作負載的最佳選擇。該技術可處理非常大量的數據,通過比其他解決方案更低的延遲提供結果。
Storm作為實時流式計算中的佼佼者,因其良好的特性使其使用場景非常廣泛。
Zookeeper作為分布式協調服務框架,因其完善的數據一致性保證特性使其成為各框架必備組件。
1)日志處理: 監(jiān)控系統中的事件日志,使用 Storm 檢查每條日志信息,把符合匹配規(guī)則的消息保存到數據庫。
2)電商商品推薦: 后臺需要維護每個用戶的興趣點,主要基于用戶的歷史行為、查詢、點擊、地理信息等信息獲得,其中有很多實時數據,可以使用 Storm 進行處理,在此基礎上進行精準的商品推薦和放置廣告。
Hadoop 是強大的大數據處理系統,但是在實時計算方面不夠擅長;Storm的核心功能就是提供強大的實時處理能力,但沒有涉及存儲;所以 Storm 與 Hadoop 即不同也互補。
Storm與Hadoop應用場景對比:
Storm: 分布式實時計算,強調實時性,常用于實時性要求較高的地方三 MapReduce及其引發(fā)的新世界 3.1 MapReduce簡單介紹
Hadoop:分布式批處理計算,強調批處理,常用于對已經在的大量數據挖掘、分析
與前面介紹的Actor模型一樣,MapReduce本質上也是一種很古老的并行計算模型,它的名字起源于LISP類函數式語言里的map和reduce操作。MapReduce的計算模型非常簡單,它的思想就是“分而治之”,Mapper負責“分”,即把復雜的大任務分解為若干個小任務來處理,彼此之間沒有依賴關系,以便可以分布到多個計算節(jié)點上實現高度的并行計算能力;Reducer則負責對map階段的結果進行匯總和輸出。
我們通過一個最簡單的統計詞頻的案例看一下,MapReduce的簡單原理:
Hadoop傳統意義上就是離線數據處理平臺。但是2.0之后就不一樣了,因為多了yarn資源管理器(可能是收到了分布式資源調度系統Mesos的啟發(fā)),Spark和Storm都可以搭建在Hadoop之上,用yarn進行調度。這是大數據處理中目前最流行的三個計算框架。
Mapreduce: 適用于離線計算。這個框架充分利用了磁盤,處處存在著排序和合并。所以適合于實時性不高的離線計算。
Spark: 相對于Hadoop的MapReduce會在運行完工作后將中介數據存放到磁盤中,Spark使用了存儲器內運算技術,能在數據尚未寫入硬盤時即在存儲器內分析運算。Spark在存儲器內運行程序的運算速度能做到比Hadoop MapReduce的運算速度快上100倍,即便是運行程序于硬盤時,Spark也能快上10倍速度。Spark允許用戶將數據加載至集群存儲器,并多次對其進行查詢,非常適合用于機器學習算法。
Storm: 一種側重于極低延遲的流處理框架,也是要求近實時處理的工作負載的最佳選擇。該技術可處理非常大量的數據,通過比其他解決方案更低的延遲提供結果。
關于三者的一些概括總結Hadoop: 離線分析框架,適合離線的復雜的大數據處理
Spark:內存計算框架,適合在線、離線快速的大數據處理
Storm: 流式計算框架,適合在線的實時的大數據處理
我是Snailclimb,一個以架構師為5年之內目標的小小白。 歡迎關注我的微信公眾號:"Java面試通關手冊"(一個有溫度的微信公眾號,期待與你共同進步~~~堅持原創(chuàng),分享美文,分享各種Java學習資源)
最后,就是使用阿里云服務器一段時間后,感覺阿里云真的很不錯,就申請做了阿里云大使,然后這是我的優(yōu)惠券地址.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/11882.html
閱讀 1684·2021-11-23 09:51
閱讀 1229·2019-08-30 13:57
閱讀 2324·2019-08-29 13:12
閱讀 2062·2019-08-26 13:57
閱讀 1256·2019-08-26 11:32
閱讀 1037·2019-08-23 15:08
閱讀 788·2019-08-23 14:42
閱讀 3137·2019-08-23 11:41