分佈式學習最佳實踐:從分佈式系統的特徵開始(附思惟導圖)

什麼是分佈式系統

  分佈式系統是由一組經過網絡進行通訊、爲了完成共同的任務而協調工做的計算機節點組成的系統。分佈式系統的出現是爲了用廉價的、普通的機器完成單個計算機沒法完成的計算、存儲任務。其目的是利用更多的機器,處理更多的數據html

  首先須要明確的是,只有當單個節點的處理能力沒法知足日益增加的計算、存儲任務的時候,且硬件的提高(加內存、加磁盤、使用更好的CPU)高昂到得不償失的時候,應用程序也不能進一步優化的時候,咱們才須要考慮分佈式系統。由於,分佈式系統要解決的問題自己就是和單機系統同樣的,而因爲分佈式系統多節點、經過網絡通訊的拓撲結構,會引入不少單機系統沒有的問題,爲了解決這些問題又會引入更多的機制、協議,帶來更多的問題。。。網絡

  在不少文章中,主要講分佈式系統分爲分佈式計算(computation)與分佈式存儲(storage)。計算與存儲是相輔相成的,計算須要數據,要麼來自實時數據(流數據),要麼來自存儲的數據;而計算的結果也是須要存儲的。在操做系統中,對計算與存儲有很是詳盡的討論,分佈式系統只不過將這些理論推廣到多個節點罷了。併發

  那麼分佈式系統怎麼將任務分發到這些計算機節點呢,很簡單的思想,分而治之,即分片(partition)。對於計算,那麼就是對計算任務進行切換,每一個節點算一些,最終彙總就好了,這就是MapReduce的思想;對於存儲,更好理解一下,每一個節點存一部分數據就好了。當數據規模變大的時候,Partition是惟一的選擇,同時也會帶來一些好處:分佈式

  (1)提高性能和併發,操做被分發到不一樣的分片,相互獨立性能

  (2)提高系統的可用性,即便部分分片不能用,其餘分片不會受到影響優化

 

  理想的狀況下,有分片就好了,但事實的狀況卻不大理想。緣由在於,分佈式系統中有大量的節點,且經過網絡通訊。單個節點的故障(進程crash、斷電、磁盤損壞)是個小几率事件,但整個系統的故障率會隨節點的增長而指數級增長,網絡通訊也可能出現斷網、高延遲的狀況。在這種必定會出現的「異常」狀況下,分佈式系統仍是須要繼續穩定的對外提供服務,即須要較強的容錯性。最簡單的辦法,就是冗餘或者複製集(Replication),即多個節點負責同一個任務,最爲常見的就是分佈式存儲中,多個節點複雜存儲同一份數據,以此加強可用性與可靠性。同時,Replication也會帶來性能的提高,好比數據的locality能夠減小用戶的等待時間。spa

相關文章
相關標籤/搜索