分布式計算簡單來說,是把一個大計算任務(wù)拆分成多個小計算任務(wù)分布到若干臺機(jī)器上去計算,然后再進(jìn)行結(jié)果匯總。 目的在于分析計算海量的數(shù)據(jù),從雷達(dá)監(jiān)測的海量歷史信號中分析異常信號(外星文明),淘寶雙十一實時計算各地區(qū)的消費(fèi)習(xí)慣等。
海量計算最開始的方案是提高單機(jī)計算性能,如大型機(jī),后來由于數(shù)據(jù)的爆發(fā)式增長、單機(jī)性能卻跟不上,才有分布式計算這種妥協(xié)方案。 因為計算一旦拆分,問題會變得非常復(fù)雜,像一致性、數(shù)據(jù)完整、通信、容災(zāi)、任務(wù)調(diào)度等問題也都來了。
舉個例子,產(chǎn)品要求從數(shù)據(jù)庫中100G的用戶購買數(shù)據(jù),分析出各地域的消費(fèi)習(xí)慣金額等。 如果沒什么時間要求,程序員小明就寫個對應(yīng)的業(yè)務(wù)處理服務(wù)程序,部署到服務(wù)器上,讓它慢慢跑就是了,小明預(yù)計10個小時能處理完。 后面產(chǎn)品嫌太慢,讓小明想辦法加快到3個小時。
平常開發(fā)中類似的需求也很多,總結(jié)出來就是,數(shù)據(jù)量大、單機(jī)計算慢。 如果上Hadoop、storm之類成本較高、而且有點(diǎn)大才小用。 當(dāng)然讓老板買更好的服務(wù)器配置也是一種辦法。
小明作為一個有追求有理想的程序員,決定用介于單機(jī)計算和成熟計算框架的過度解決方案,這樣成本和需求都能滿足了。 分布式計算的核心在于計算任務(wù)拆分,如果數(shù)據(jù)能以水平拆分的方式,分布到5臺機(jī)器上,每臺機(jī)器只計算自身的1/5數(shù)據(jù),這樣即能在3小時內(nèi)完成產(chǎn)品需求了。
如上所述,小明需要把這些數(shù)據(jù)按照一定維度進(jìn)行劃分。 按需求來看以用戶ID劃分最好,由于用戶之間沒有狀態(tài)上的關(guān)聯(lián),所以也不需要事務(wù)性及二次迭代計算。 小明用簡單的hash取模對id進(jìn)行劃分。
<pre style="margin:0px;
padding:0px;
white-space:pre-wrap;
overflow-wrap:break-word;
font-family:"
Courier New"
!important;
font-size:12px !important;
">f(memberid) % 5 = ServerN</pre>
這樣程序可以分別部署到5臺機(jī)器上,然后程序按照配置只取對應(yīng)余數(shù)的用戶id,計算出結(jié)果并入庫。 這種方式多機(jī)之間毫無關(guān)聯(lián),不需要進(jìn)行通信,可以避免很多問題。 機(jī)器上的程序本身也不具備分布式的特性,它和單機(jī)一樣,只計算自身獲取到的數(shù)據(jù)即可,所以如果某臺機(jī)器上程序崩潰的話,處理方式和單機(jī)一樣,比如記錄下處理進(jìn)度,下次從當(dāng)前進(jìn)度繼續(xù)進(jìn)行后續(xù)計算。
使用分片方式相對比較簡單,但有如下不足之處。
小明這種方式引入了個第三方,消息隊列。 小明先用一個單獨(dú)的程序把用戶信息推送到消息隊列里去,然后各臺機(jī)器分別取消費(fèi)這個隊列。 于是就有了3個角色:
雖然僅僅引入了個第三方,但它已經(jīng)具備了分布式計算的很多特性。
Hadoop介紹已經(jīng)相當(dāng)多了,這里簡述下比如:"Hadoop是一套海量數(shù)據(jù)計算存儲的基礎(chǔ)平臺架構(gòu)",分析下這句話。
下面找了介紹Hadoop的概覽圖,跟小明的設(shè)計做對比下:
PS:為了方便描述,把小明設(shè)計的分布式計算,叫做小和尚。
由于MapReduce計算輸入和輸出都是基于HDFS文件,所以大多數(shù)公司的做法是把mysql或sqlserver的數(shù)據(jù)導(dǎo)入到HDFS,計算完后再導(dǎo)出到常規(guī)的數(shù)據(jù)庫中,這是MapReduce不夠靈活的地方之一。 MapReduce優(yōu)勢在于提供了比較簡單的分布式計算編程模型,使開發(fā)此類程序變得非常簡單,像之前的MPI編程就相當(dāng)復(fù)雜。
狹隘的來講,MapReduce是把計算任務(wù)給規(guī)范化了,它可以等同于小和尚中Worker的業(yè)務(wù)邏輯部分。 MapReduce把業(yè)務(wù)邏輯給拆分成2個大部分,Map和Reduce,可以先在Map部分把任務(wù)計算一半后,扔給Reduce部分繼續(xù)后面的計算。 當(dāng)然在Map部分把計算任務(wù)全做完也是可以的。
如果把小明產(chǎn)品經(jīng)理的需求放到Hadoop來做,其處理流程大致如下:
這樣一看好像是把簡單的計算任務(wù)給復(fù)雜化了,其實如果只有幾臺計算任務(wù)的話,使用Mapreduce確實是殺雞用牛刀了。 如果有TB、PB級別的數(shù)據(jù)、跑在成百上千臺計算節(jié)點(diǎn)上,Mapreduce的優(yōu)勢才會體現(xiàn)出來。 其計算框架圖架構(gòu)如下:?
通常稱Mapreduce及小和尚這種計算為離線計算,因為它對已經(jīng)持久化的文件數(shù)據(jù)進(jìn)行計算,不能實時響應(yīng)。 還有個原因就是它的處理速度比較慢,它的輸入和輸出源都是基于HDFS設(shè)計,如果數(shù)據(jù)不是一開始就寫入到HDFS上,就會涉及到數(shù)據(jù)導(dǎo)入導(dǎo)出,這部分相對耗費(fèi)時間。 而且它的數(shù)據(jù)流動是基于文件系統(tǒng)的,Map部分輸出的數(shù)據(jù)不是直接傳送到Reduce部分,而是先寫入HDFS再進(jìn)行傳送。
處理速度慢也是Mapreduce的不足之處,促使了后面實時計算的誕生。
另外個缺點(diǎn)是Mapreduce的計算任務(wù)流比較單一,它只有Map、Reduce兩部分。 簡單的可以只寫一部分邏輯來解決,如果想拆分成多個部分,如邏輯A、邏輯B、邏輯C等, 而且一部分計算邏輯依賴上一次計算結(jié)果的話,MapReduce處理起來就比較困難了。 像storm框架解決此類問題的方案,也稱為流式計算,下一章繼續(xù)補(bǔ)充。?
針對于上面所涉及到的知識點(diǎn)我總結(jié)出了有1到5年開發(fā)經(jīng)驗的程序員在面試中涉及到的絕大部分架構(gòu)面試題及答案做成了文檔和架構(gòu)視頻資料免費(fèi)分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發(fā)等架構(gòu)技術(shù)資料),希望能幫助到您面試前的復(fù)習(xí)且找到一個好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時間來學(xué)習(xí),也可以關(guān)注我一下以后會有更多干貨分享。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁標(biāo)題:淺談分布式計算的開發(fā)與實現(xiàn)(一)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://aaarwkj.com/article48/gidep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、App設(shè)計、網(wǎng)站收錄、App開發(fā)、企業(yè)建站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容