分佈式(存儲和計算)

目錄

一、從一個新聞門戶網站案例引入前端

二、推算一下你須要分析多少條數據?android

三、完美組合:分佈式存儲+分佈式計算框架

這篇文章聊一個話題:什麼是分佈式計算系統?分佈式

 

(1)從一個新聞門戶網站案例引入

 

如今不少同窗常常會看到一些名詞,好比分佈式服務框架,分佈式系統,分佈式存儲系統,分佈式消息系統。oop

可是有些經驗尚淺的同窗,可能都很容易被這些名詞給搞暈。因此這篇文章就對「分佈式計算系統」這個概念作一個科普類的分析。post

若是你要理解啥是分佈式計算,就必須先得理解啥是分佈式存儲,如今咱們從一個小例子來引入。大數據

好比說如今你有一個網站,我們假設是一個新聞門戶網站好了。天天是否是會有可能上千萬用戶會涌入進來看你的新聞?網站

好的,那麼他們會怎麼看新聞呢?spa

其實很簡單,首先他們會點擊一些板塊,好比「體育板塊」,「娛樂板塊」。操作系統

而後,點擊一些新聞標題,好比「20年來最刺激的一場比賽即將拉開帷幕」,接着還可能會發表一些評論,或者點擊對某個好的新聞進行收藏。

那麼你的這些用戶乾的這些事兒有一個專業的名詞,叫作「用戶行爲」。

由於在你的網站或者APP上,用戶必定會進行各類操做,點擊各類按鈕,發表一些信息,這些都是各類行爲,統稱爲「用戶行爲」。

好了,如今假如說新聞門戶網站的boss說想要作一個功能,在網站裏天天作一個排行榜,統計出來天天每一個版塊被點擊的次數,包括最熱門的一些新聞。

而後呢,在網站後臺系統裏須要有一些報表,要讓他看到不一樣的編輯產出的文章的點擊量彙總,作一個編輯的績效排名,還有不少相似的事情。

這些事情叫什麼呢?你能夠認爲是基於用戶行爲數據進行分析和統計,產出各類各樣的數據統計分析報表和結果,供網站的用戶、管理人員來查看。

這也有一個專業的名詞,叫作「用戶行爲分析」。

 

(2)推算一下你須要分析多少條數據?

 

好,我們繼續。若是你要對用戶行爲進行分析,那你是否是首先須要收集這些用戶行爲的數據?

好比說有個哥兒們如今點了一下「體育」板塊,你須要在網頁前端或者是APP上立馬發送一條日誌到後臺,記錄清楚「id爲117的用戶點擊了一下id位003的板塊」。

一樣,這個東西也有一個專業的名詞,叫作「用戶行爲日誌」。

那你能夠來計算一下,這些用戶行爲若是採用日誌的方式收集,天天大概會產生多少條數據?

假設天天1000萬人訪問你的新聞網站,平均每一個人作出30個點擊、評論以及收藏等行爲,那麼就是3億條用戶行爲日誌。

假設每條用戶行爲日誌的大小是100個字節,由於可能包含了不少不少的字段,好比他是在網頁點擊的,仍是在手機APP上點擊的,手機APP是用的什麼操做系統,android仍是IOS,相似這樣的字段是不少的。

那麼你就有天天大概28GB左右的數據,這裏一共包含3億條。

假如對這3億條數據,你就本身寫個Java程序,從一個超大的28GB的大日誌文件裏,一條一條讀取日誌來統計分析和計算,一直到把3億條數據都計算完畢,你以爲會花費多少時間?

不可想象,根據你的計算邏輯複雜度來講,搞很差要花費幾十個小時的時間。

因此你以爲這種大數據場景下的分析,這麼玩兒靠譜麼?不靠譜。

 

(3)完美組合:分佈式存儲+分佈式計算

 

因此這個時候,你就能夠首先採用分佈式存儲的方式,把那3億條數據分散存放在好比30臺機器上,每臺機器大概就放1000萬條數據,大概就1GB的數據量。

你們看看下面的圖:

接着你就能夠上分佈式計算了,你能夠把統計分析數據的計算任務,拆分紅30個計算任務,每一個計算任務都分發到一臺機器上去運行。

也就是說,就專門針對機器本地的1GB數據,那1000萬條數據進行分析和計算。

這樣的好處就是能夠依託30臺機器的資源並行的進行數據的統計和分析,這也就是所謂的分佈式計算了。

每臺機器的計算結果出來以後,就能夠進行綜合性的彙總,而後就能夠拿到最終的一個分析結果,你們看下圖。

假設以前你的3億條數據都在一個30GB的大文件裏,而後你一個Java程序一條一條慢慢讀慢慢計算,須要耗費30小時。

那麼如今把計算任務並行到了30臺機器上去,就能夠提高30倍的計算速度,是否是就只須要1小時就能夠完成計算了?

因此這個就是所謂的分佈式計算,他通常是針對超大數據集,也就是如今很流行的大數據進行計算的。

首先須要將超大數據集拆分紅不少數據塊分散在多臺機器上,而後把計算任務分發到各個機器上去,利用多臺機器的CPU、內存等計算資源來進行計算。

這種分佈式計算的方式,對於超大數據集的計算能夠提高几十倍甚至幾百倍的效率,其實這個理論和概念,也是大數據技術的基礎。

好比如今最流行的大數據技術棧裏,Hadoop HDFS就是用作分佈式存儲的,他能夠把一個超大文件拆分爲不少小的數據塊放在不少機器上。

而像Spark就是分佈式計算系統,他能夠把計算任務分發到各個機器上,對各個數據塊進行並行計算。

以上就是用大白話+畫圖,給小白同窗們科普了一下分佈式計算系統的相關知識,相信你們看了以後,對分佈式計算系統,應該有一個初步的認識了。

參考:https://juejin.im/post/5c8f92d3f265da60d1081514

相關文章
相關標籤/搜索