淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)-創(chuàng)新互聯(lián)

介紹

分布式計(jì)算簡(jiǎn)單來(lái)說(shuō),是把一個(gè)大計(jì)算任務(wù)拆分成多個(gè)小計(jì)算任務(wù)分布到若干臺(tái)機(jī)器上去計(jì)算,然后再進(jìn)行結(jié)果匯總。 目的在于分析計(jì)算海量的數(shù)據(jù),從雷達(dá)監(jiān)測(cè)的海量歷史信號(hào)中分析異常信號(hào)(外星文明),淘寶雙十一實(shí)時(shí)計(jì)算各地區(qū)的消費(fèi)習(xí)慣等。

創(chuàng)新互聯(lián)公司IDC提供業(yè)務(wù):成都移動(dòng)機(jī)房托管,成都服務(wù)器租用,成都移動(dòng)機(jī)房托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

海量計(jì)算最開(kāi)始的方案是提高單機(jī)計(jì)算性能,如大型機(jī),后來(lái)由于數(shù)據(jù)的爆發(fā)式增長(zhǎng)、單機(jī)性能卻跟不上,才有分布式計(jì)算這種妥協(xié)方案。 因?yàn)橛?jì)算一旦拆分,問(wèn)題會(huì)變得非常復(fù)雜,像一致性、數(shù)據(jù)完整、通信、容災(zāi)、任務(wù)調(diào)度等問(wèn)題也都來(lái)了。

舉個(gè)例子,產(chǎn)品要求從數(shù)據(jù)庫(kù)中100G的用戶購(gòu)買(mǎi)數(shù)據(jù),分析出各地域的消費(fèi)習(xí)慣金額等。 如果沒(méi)什么時(shí)間要求,程序員小明就寫(xiě)個(gè)對(duì)應(yīng)的業(yè)務(wù)處理服務(wù)程序,部署到服務(wù)器上,讓它慢慢跑就是了,小明預(yù)計(jì)10個(gè)小時(shí)能處理完。 后面產(chǎn)品嫌太慢,讓小明想辦法加快到3個(gè)小時(shí)。
平常開(kāi)發(fā)中類(lèi)似的需求也很多,總結(jié)出來(lái)就是,數(shù)據(jù)量大、單機(jī)計(jì)算慢。 如果上Hadoop、storm之類(lèi)成本較高、而且有點(diǎn)大才小用。 當(dāng)然讓老板買(mǎi)更好的服務(wù)器配置也是一種辦法。

利用分片算法

小明作為一個(gè)有追求有理想的程序員,決定用介于單機(jī)計(jì)算和成熟計(jì)算框架的過(guò)度解決方案,這樣成本和需求都能滿足了。 分布式計(jì)算的核心在于計(jì)算任務(wù)拆分,如果數(shù)據(jù)能以水平拆分的方式,分布到5臺(tái)機(jī)器上,每臺(tái)機(jī)器只計(jì)算自身的1/5數(shù)據(jù),這樣即能在3小時(shí)內(nèi)完成產(chǎn)品需求了。

如上所述,小明需要把這些數(shù)據(jù)按照一定維度進(jìn)行劃分。 按需求來(lái)看以用戶ID劃分最好,由于用戶之間沒(méi)有狀態(tài)上的關(guān)聯(lián),所以也不需要事務(wù)性及二次迭代計(jì)算。 小明用簡(jiǎn)單的hash取模對(duì)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臺(tái)機(jī)器上,然后程序按照配置只取對(duì)應(yīng)余數(shù)的用戶id,計(jì)算出結(jié)果并入庫(kù)。 這種方式多機(jī)之間毫無(wú)關(guān)聯(lián),不需要進(jìn)行通信,可以避免很多問(wèn)題。 機(jī)器上的程序本身也不具備分布式的特性,它和單機(jī)一樣,只計(jì)算自身獲取到的數(shù)據(jù)即可,所以如果某臺(tái)機(jī)器上程序崩潰的話,處理方式和單機(jī)一樣,比如記錄下處理進(jìn)度,下次從當(dāng)前進(jìn)度繼續(xù)進(jìn)行后續(xù)計(jì)算。

利用消息隊(duì)列

使用分片方式相對(duì)比較簡(jiǎn)單,但有如下不足之處。

  • 它不具有負(fù)載均衡的能力,如果某臺(tái)機(jī)器配置稍好點(diǎn),它可能最先計(jì)算完,然后空閑等待著。也有可能是某些用戶行為數(shù)據(jù)比較少,導(dǎo)致計(jì)算比較快完成。
  • 還有一個(gè)弊端就是每臺(tái)機(jī)器上需要手動(dòng)更改對(duì)應(yīng)的配置, 這樣的話多臺(tái)機(jī)器上的程序不是完全一樣的,這樣可以用遠(yuǎn)程配置動(dòng)態(tài)修改的辦法來(lái)解決。

小明這種方式引入了個(gè)第三方,消息隊(duì)列。 小明先用一個(gè)單獨(dú)的程序把用戶信息推送到消息隊(duì)列里去,然后各臺(tái)機(jī)器分別取消費(fèi)這個(gè)隊(duì)列。 于是就有了3個(gè)角色:

  • 推送消息的,簡(jiǎn)稱(chēng)Master。
  • 消息隊(duì)列,這里以Rabbitmq為例。
  • 各個(gè)處理程序,簡(jiǎn)稱(chēng)Worker或Slave都行。

雖然僅僅引入了個(gè)第三方,但它已經(jīng)具備了分布式計(jì)算的很多特性。

  1. 計(jì)算任務(wù)分發(fā)。 Master把需要計(jì)算的用戶數(shù)據(jù),不斷的推送消息隊(duì)列。
  2. 程序一致性。 Worker訂閱相同的消息隊(duì)列即可,無(wú)需更改程序代碼。
  3. 任意擴(kuò)容。 由于程序完全一樣,意味著如果想要加快速度,重復(fù)部署一份程序到新機(jī)器即可。 當(dāng)然這是理論上的,實(shí)際當(dāng)中會(huì)受限于消息隊(duì)列、數(shù)據(jù)庫(kù)存儲(chǔ)等。
  4. 容災(zāi)性。 如果5臺(tái)中某一臺(tái)程序掛了也不影響,利用Rabbitmq的消息確認(rèn)機(jī)制,機(jī)器崩潰時(shí)正在計(jì)算的那一條數(shù)據(jù)會(huì)在超時(shí),在其他節(jié)點(diǎn)上進(jìn)行消費(fèi)處理。

Hadoop簡(jiǎn)介

Hadoop介紹已經(jīng)相當(dāng)多了,這里簡(jiǎn)述下比如:"Hadoop是一套海量數(shù)據(jù)計(jì)算存儲(chǔ)的基礎(chǔ)平臺(tái)架構(gòu)",分析下這句話。

  • 其中計(jì)算指的是MapReduce,這是做分布式計(jì)算用的。
  • 存儲(chǔ)指的是HDFS,基于此上層的有HBase、Hive,用來(lái)做數(shù)據(jù)存儲(chǔ)用的。
  • 平臺(tái),指可以給多個(gè)用戶使用,比如小明有一計(jì)算需求,他只需要按照對(duì)應(yīng)的接口編寫(xiě)業(yè)務(wù)邏輯即可,然后把程序以包的形式發(fā)布到平臺(tái)上,平臺(tái)進(jìn)行分配調(diào)度計(jì)算等。 而上面小明的分布式計(jì)算設(shè)計(jì)只能給自己使用,如果另外有小華要使用就需要重新寫(xiě)一份,然后單獨(dú)部署,申請(qǐng)機(jī)器等。Hadoop大的優(yōu)勢(shì)之一就在于提供了一套這樣的完整解決方案。

下面找了介紹Hadoop的概覽圖,跟小明的設(shè)計(jì)做對(duì)比下:

  • 圖中“大數(shù)據(jù)計(jì)算任務(wù)” 對(duì)應(yīng)小明的100G用戶數(shù)據(jù)的計(jì)算任務(wù)。
  • ”任務(wù)劃分“ 對(duì)應(yīng)Master和消息隊(duì)列。
  • “子任務(wù)” 對(duì)應(yīng)Worker的業(yè)務(wù)邏輯。
  • ”結(jié)果合并“ 對(duì)應(yīng)把每個(gè)worker的計(jì)算結(jié)果入庫(kù)。
  • “計(jì)算結(jié)果” 對(duì)應(yīng)入庫(kù)的用戶消費(fèi)習(xí)慣數(shù)據(jù)。

淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)

PS:為了方便描述,把小明設(shè)計(jì)的分布式計(jì)算,叫做小和尚。

MapReduce

由于MapReduce計(jì)算輸入和輸出都是基于HDFS文件,所以大多數(shù)公司的做法是把mysql或sqlserver的數(shù)據(jù)導(dǎo)入到HDFS,計(jì)算完后再導(dǎo)出到常規(guī)的數(shù)據(jù)庫(kù)中,這是MapReduce不夠靈活的地方之一。 MapReduce優(yōu)勢(shì)在于提供了比較簡(jiǎn)單的分布式計(jì)算編程模型,使開(kāi)發(fā)此類(lèi)程序變得非常簡(jiǎn)單,像之前的MPI編程就相當(dāng)復(fù)雜。

狹隘的來(lái)講,MapReduce是把計(jì)算任務(wù)給規(guī)范化了,它可以等同于小和尚中Worker的業(yè)務(wù)邏輯部分。 MapReduce把業(yè)務(wù)邏輯給拆分成2個(gè)大部分,Map和Reduce,可以先在Map部分把任務(wù)計(jì)算一半后,扔給Reduce部分繼續(xù)后面的計(jì)算。 當(dāng)然在Map部分把計(jì)算任務(wù)全做完也是可以的。

如果把小明產(chǎn)品經(jīng)理的需求放到Hadoop來(lái)做,其處理流程大致如下:

  1. 把100G數(shù)據(jù)導(dǎo)入到HDFS
  2. 按照Mapreduce的接口編寫(xiě)處理邏輯,分Map、Reduce兩部分。
  3. 把程序包提交到Mapreduce平臺(tái)上,存儲(chǔ)在HDFS里。
  4. 平臺(tái)中有個(gè)叫Jobtracker進(jìn)程的角色進(jìn)行分發(fā)任務(wù)。 這個(gè)類(lèi)似小和尚的Master負(fù)載調(diào)度管理。
  5. 如果有5臺(tái)機(jī)器進(jìn)行計(jì)算的話,就會(huì)提前運(yùn)行5個(gè)叫TaskTracker的slave進(jìn)程。 這類(lèi)似小和尚worker的分離版,平臺(tái)把程序和業(yè)務(wù)邏輯進(jìn)行分離了, 簡(jiǎn)單來(lái)說(shuō)就是在機(jī)器上運(yùn)行個(gè)獨(dú)立進(jìn)程,它能動(dòng)態(tài)加載、執(zhí)行jar或dll的業(yè)務(wù)邏輯代碼。
  6. Jobtracker把任務(wù)分發(fā)到TaskTracker后,TaskTracker把開(kāi)始動(dòng)態(tài)加載jar包,創(chuàng)建個(gè)獨(dú)立進(jìn)程執(zhí)行Map部分,然后把結(jié)果寫(xiě)入到HDFS上。
  7. 如果有Reduce部分,TaskTracker會(huì)創(chuàng)建個(gè)獨(dú)立進(jìn)程把Map輸出的HDFS文件,通過(guò)RPC方式遠(yuǎn)程拉取到本地,拉取成功后,Reduce開(kāi)始計(jì)算后續(xù)任務(wù)。
  8. Reduce再把結(jié)果寫(xiě)入到HDFS中
  9. 從HDFS中把結(jié)果導(dǎo)出。

這樣一看好像是把簡(jiǎn)單的計(jì)算任務(wù)給復(fù)雜化了,其實(shí)如果只有幾臺(tái)計(jì)算任務(wù)的話,使用Mapreduce確實(shí)是殺雞用牛刀了。 如果有TB、PB級(jí)別的數(shù)據(jù)、跑在成百上千臺(tái)計(jì)算節(jié)點(diǎn)上,Mapreduce的優(yōu)勢(shì)才會(huì)體現(xiàn)出來(lái)。 其計(jì)算框架圖架構(gòu)如下:?

淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)

離線計(jì)算

通常稱(chēng)Mapreduce及小和尚這種計(jì)算為離線計(jì)算,因?yàn)樗鼘?duì)已經(jīng)持久化的文件數(shù)據(jù)進(jìn)行計(jì)算,不能實(shí)時(shí)響應(yīng)。 還有個(gè)原因就是它的處理速度比較慢,它的輸入和輸出源都是基于HDFS設(shè)計(jì),如果數(shù)據(jù)不是一開(kāi)始就寫(xiě)入到HDFS上,就會(huì)涉及到數(shù)據(jù)導(dǎo)入導(dǎo)出,這部分相對(duì)耗費(fèi)時(shí)間。 而且它的數(shù)據(jù)流動(dòng)是基于文件系統(tǒng)的,Map部分輸出的數(shù)據(jù)不是直接傳送到Reduce部分,而是先寫(xiě)入HDFS再進(jìn)行傳送。

處理速度慢也是Mapreduce的不足之處,促使了后面實(shí)時(shí)計(jì)算的誕生。
另外個(gè)缺點(diǎn)是Mapreduce的計(jì)算任務(wù)流比較單一,它只有Map、Reduce兩部分。 簡(jiǎn)單的可以只寫(xiě)一部分邏輯來(lái)解決,如果想拆分成多個(gè)部分,如邏輯A、邏輯B、邏輯C等, 而且一部分計(jì)算邏輯依賴上一次計(jì)算結(jié)果的話,MapReduce處理起來(lái)就比較困難了。 像storm框架解決此類(lèi)問(wèn)題的方案,也稱(chēng)為流式計(jì)算,下一章繼續(xù)補(bǔ)充。?
淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)


文末彩蛋

針對(duì)于上面所涉及到的知識(shí)點(diǎn)我總結(jié)出了有1到5年開(kāi)發(fā)經(jīng)驗(yàn)的程序員在面試中涉及到的絕大部分架構(gòu)面試題及答案做成了文檔和架構(gòu)視頻資料免費(fèi)分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發(fā)等架構(gòu)技術(shù)資料),希望能幫助到您面試前的復(fù)習(xí)且找到一個(gè)好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時(shí)間來(lái)學(xué)習(xí),也可以關(guān)注我一下以后會(huì)有更多干貨分享。

資料獲取方式 QQ群搜索“708-701-457” 即可免費(fèi)領(lǐng)取

淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)
淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)
淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)標(biāo)題:淺談分布式計(jì)算的開(kāi)發(fā)與實(shí)現(xiàn)(一)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://bm7419.com/article48/gidep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、App設(shè)計(jì)、網(wǎng)站收錄、App開(kāi)發(fā)、企業(yè)建站、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化