1. 程式人生 > >分散式學習最佳實踐:從分散式系統的特徵開始(附思維導圖)

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

什麼是分散式系統

回到頂部

  分散式系統是由一組通過網路進行通訊、為了完成共同的任務而協調工作的計算機節點組成的系統。分散式系統的出現是為了用廉價的、普通的機器完成單個計算機無法完成的計算、儲存任務。其目的是利用更多的機器,處理更多的資料

  首先需要明確的是,只有當單個節點的處理能力無法滿足日益增長的計算、儲存任務的時候,且硬體的提升(加記憶體、加磁碟、使用更好的CPU)高昂到得不償失的時候,應用程式也不能進一步優化的時候,我們才需要考慮分散式系統。因為,分散式系統要解決的問題本身就是和單機系統一樣的,而由於分散式系統多節點、通過網路通訊的拓撲結構,會引入很多單機系統沒有的問題,為了解決這些問題又會引入更多的機制、協議,帶來更多的問題。。。

  在很多文章中,主要講分散式系統分為分散式計算(computation)與分散式儲存(storage)。計算與儲存是相輔相成的,計算需要資料,要麼來自實時資料(流資料),要麼來自儲存的資料;而計算的結果也是需要儲存的。在作業系統中,對計算與儲存有非常詳盡的討論,分散式系統只不過將這些理論推廣到多個節點罷了。

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

  (1)提升效能和併發,操作被分發到不同的分片,相互獨立

  (2)提升系統的可用性,即使部分分片不能用,其他分片不會受到影響

 

  理想的情況下,有分片就行了,但事實的情況卻不大理想。原因在於,分散式系統中有大量的節點,且通過網路通訊。單個節點的故障(程序crash、斷電、磁碟損壞)是個小概率事件,但整個系統的故障率會隨節點的增加而指數級增加,網路通訊也可能出現斷網、高延遲的情況。在這種一定會出現的“異常”情況下,分散式系統還是需要繼續穩定的對外提供服務,即需要較強的容錯性。最簡單的辦法,就是冗餘或者複製集(Replication),即多個節點負責同一個任務,最為常見的就是分散式儲存中,多個節點複雜儲存同一份資料,以此增強可用性與可靠性。同時,Replication也會帶來效能的提升,比如資料的locality可以減少使用者的等待時間。