日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1

無論是我們在學校剛開始學編程,還是在剛參加工作開始處理實際問題,寫出來的程序都是很簡單的。因為面對的問題很簡單。

以處理數據為例,可能只是把一個幾十 K 的文件解析下,然后生成一個詞頻分析的報告。很簡單的程序,十幾行甚至幾行就搞定了。

直到有一天,給你扔過來 1000 個文件,有些還特別大,好幾百 M 了。你用之前的程序一跑,發現跑的時間有點長。于是想要去優化下。

1000 個文件,互相還沒業務聯系,用多線程呀,一個線程處理一個文件,結果再匯總就搞定了??偹惆褜W校里學的操作系統知識和編程語言里的多線程庫都運用起來了。你很高興,老師知道了也會很欣慰。

如果多線程效果不夠好,比如像 Python 的多線程,沒法利用多核的威力,那就用多進程。

如果嫌線程和進程切換開銷太大,大到影響整體性能 -- 通常就是所謂的 I/O bound 的場景,還可以用協程這類技術。

無論是線程、進程,還是協程,本質上,目的都是為了計算的并行化,解決的是算的慢的問題。

而如果計算量足夠大,就算榨干了機器的計算能力,也算不過來,咋辦?

一臺機器不夠,那就多搞幾臺機器嘛。所以就從多線程/進程/協程的「計算并行化」,進化到了「計算的分布式化」(當然,分布式一定程度上也是并行化)。

漫談分布式系統:為什么要有分布式系統?

 

2

這還沒完,另一方面,如果處理的數據有 10T,而你手上的機器只有 500G 的硬盤,怎么辦?

一種辦法是縱向擴展,搞一臺幾十 T 硬盤的機器;另一種是橫向擴展,多搞幾臺機器,分散著放。前者很容易到瓶頸,畢竟數據無限,而一臺機器的容量有限,所以在大數據量的情況下,只能選后者。

把數據分散到多臺機器,本質上解決的是存不下的問題。

同時,剛才提到計算分布式化后,總不能所以程序都去同一臺機器讀數據吧,這樣效率必然會受到單臺機器性能的拖累,比如磁盤 IO、網絡帶寬等,也就逼著數據存儲也要分散到各個機器去了。

基于這兩個原因,數據存儲也分布式起來了。

3

前面說計算的分布式化的時候,有這么一句話:

一個線程處理一個文件,結果再匯總就搞定了

先做任務的拆分,然后再做結果的合并。本質上就是分治的思想。很顯然,分治是個非常通用和應用無關的方法,沒有必要每個應用都去實現一遍,做個通用的庫就行了,或者裝逼點,我們叫它框架。

解決這個問題之后,再做好抽象,豐富下功能,定義好 API,基本的樣子就出來了。

于是,我們有了一個分布式的計算框架。

 

4

而說存儲的分布式化的時候,忽略了一些問題,比如:

  • 怎么拆分數據?以什么粒度拆?
  • 使用方怎么知道哪些數據在哪里?

這些問題的答案也不難:

  • 像前面說的那樣以文件為單位去拆分,恐怕不妥。文件大小差距可能很大,不利于數據的均衡分布,需要拆的更細。
  • 為了讓使用方知道該去哪臺機器拿想要的數據,尤其在數據的切割粒度不再是使用方能理解的文件之后,需要維護一個數據單元和機器/服務位置的映射關系。

當然,問題不只這些,只是舉例而已。解決這些問題之后,再加以完善,封裝好 API 和服務,一個能存海量數據的框架就有了,或者裝逼點,我們叫它引擎。

于是,我們有了一個分布式的存儲引擎。

5

分布式存儲引擎和分布式計算框架,就是一個分布式系統最基礎的組成部分。

廣義的分布式系統,當然不只包含這兩個東西。但它們是最基礎和核心的東西。有了它們,我們就能對海量數據做最基本和通用的處理,而不再被單臺機器束縛住。

是的,分布式系統很強大、很有用。但什么時候該用,什么時候又不要高射炮打蚊子呢?

其實也很簡單。和分布式系統嘗試解決的問題對應起來,就一目了然了:

  • 當你嘗試了各種優化方法,還是不能把計算時間降低到一個可接受的程度的時候
  • 當你發現找不到硬盤更大的機器來裝下你的數據,或者無法承擔這個成本的時候

那很有可能,你需要考慮分布式系統了。

至于多慢叫慢,多大叫大,就區別于應用場景了。

老板每天早上要看的報表,凌晨跑幾個小時都能接受;全平臺的準實時監控數據,就等不了幾個小時了。

同樣是做指標統計,幾百 G 的用戶注冊數據可能不算大,但幾百 G 的用戶行為數據可能就很大了。后者比前者更有可能需要分布式系統,因為增長速度會快一兩個數量級。
 

6

一個乍看起來很無厘頭,細想又挺值得思考的問題:微服務是不是分布式系統?

類似的問題還有:分庫分表+訪問中間件的數據庫是不是分布式系統?

廣義來講,都可以算是。

狹義來講,也是從這個系列關注的角度來看,分布式系統是指大數據領域下,以處理海量數據為目的的系統。

當然,分布式系統遠不止這么簡單的兩個分類,也遠不止表面上看起來這樣隨便弄弄就能用好,還有非常多需要考慮和解決的問題,其中很多恰恰是分布式本身帶來的問題(聽起來很無奈吧),這也是這個系列后面會花大量篇幅去講的內容。

這樣,我們就對開頭提到的 What -- 這個東西是什么,也有了基本的認識。

(看吧,先講 Why,再講 What,也沒有影響我們學習這個東西。我這么組織,也是想借這點來強調開頭提到的多思考 Why 的重要性。)

總結:

這個系列文章關注的分布式系統,是指以處理海量數據為目的的多機系統。

我們之所以需要分布式系統,是為了擺脫單機資源的束縛。再具體點,是為了解決這兩個問題:

  • 單臺機器算的慢,哪怕協程、多線程、多進程全用上
  • 單臺機器裝不下,哪怕你有再多的錢

實際應用中,分布式系統最基礎核心的是兩種:

  • 分布式計算框架,用來解決算的慢的問題
  • 分布式存儲引擎,用來解決存不下的問題

知道了為什么要有分布式系統,以及什么時候應該用分布式系統。緊接著一個問題就是,分布式系統都是怎么來的,又是誰做出來的呢?

分享到:
標簽:分布式 系統
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定