分布式系統是由一組通過網路進行通信、為了完成共同的任務而協調作業的計算機節點組成的系統。分布式系統的出現是為了用廉價的、普通的機器完成單個計算機無法完成的計算、存盤任務。其目的是利用更多的機器,處理更多的資料。
首先需要明確的是,只有當單個節點的處理能力無法滿足日益增長的計算、存盤任務的時候,且硬體的提升(加記憶體、加磁盤、使用更好的CPU)高昂到得不償失的時候,應用程式也不能進一步優化的時候,我們才需要考慮分布式系統。因為,分布式系統要解決的問題本身就是和單機系統一樣的,而由于分布式系統多節點、通過網路通信的拓撲結構,會引入很多單機系統沒有的問題,為了解決這些問題又會引入更多的機制、協議,帶來更多的問題。
主要講分布式系統分為分布式計算(computation)與分布式存盤(storage)。計算與存盤是相輔相成的,計算需要資料,要么來自實時資料(流資料),要么來自存盤的資料;而計算的結果也是需要存盤的。在作業系統中,對計算與存盤有非常詳盡的討論,分布式系統只不過將這些理論推廣到多個節點罷了。
那么分布式系統怎么將任務分發到這些計算機節點呢,很簡單的思想,分而治之,即分片(partition)。對于計算,那么就是對計算任務進行切換,每個節點算一些,最侄訓總就行了,這就是MapReduce的思想;對于存盤,更好理解一下,每個節點存一部分資料就行了。當資料規模變大的時候,Partition是唯一的選擇,同時也會帶來一些好處:
(1)提升性能和并發,操作被分發到不同的分片,相互獨立
(2)提升系統的可用性,即使部分分片不能用,其他分片不會受到影響
理想的情況下,有分片就行了,但事實的情況卻不大理想。原因在于,分布式系統中有大量的節點,且通過網路通信。單個節點的故障(行程crash、斷電、磁盤損壞)是個小概率事件,但整個系統的故障率會隨節點的增加而指數級增加,網路通信也可能出現斷網、高延遲的情況。在這種一定會出現的“例外”情況下,分布式系統還是需要繼續穩定的對外提供服務,即需要較強的容錯性。最簡單的辦法,就是冗余或者復制集(Replication),即多個節點負責同一個任務,最為常見的就是分布式存盤中,多個節點復雜存盤同一份資料,以此增強可用性與可靠性。同時,Replication也會帶來性能的提升,比如資料的locality可以減少用戶的等待時間。
uj5u.com熱心網友回復:
分片分布服務器?來學習下。。。uj5u.com熱心網友回復:
分片分布服務器,前來學習。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/42605.html
標籤:服務器
上一篇:基于 Ubuntu 搭建 WordPress 個人博客
下一篇:EsHadoopException: Could not write all entries [185/122112] (maybe ES was overlo
