分布式系統是由一組通過網路進行通訊,為了完成共同的任務而協調工作的計算機節點組成的系統。分布式系統的出現是為了用廉價的、普通的機器完成單個計算機無法完成的計算、儲存任務,其目的利用更多的機器處理更多的資料
首先需要明確的是,只有單個節點的處理能力無法滿足日益增長的計算、儲存任務的時候,且硬體的提公升(加記憶體,加磁碟,使用更好的cpu)高昂到得不償失的時候,應用程式也不能進一步優化的時候,我們才需要考慮分布式系統。因為分布式系統需要解決的問題本身就和單機系統一樣,而由於分布式系統多節點、通過網路通訊的拓撲結構,會引入很多單機系統沒有的問題,為了解決這些問題又會引入更多的機制、協議,帶來更多的問題
在很多文章中,主要講分布式系統分為分布式計算(computation)與分布式儲存(storage)。計算與儲存是相輔相成的,計算需要資料,要麼來自實時的流量,要麼來自儲存資料,而計算的結果也需要儲存。在作業系統中,對計算與儲存有非常詳盡的討論,分布式系統只不過將這些理論推廣到多個幾點罷了
那麼分布式系統怎麼將任務分發到這些計算機節點呢,很簡單的思想,分而治之,即分片(partiton)。對於計算,那麼就是對計算任務進行拆分,每個節點處理一些,最終彙總就行了,這就是mapreduce的思想,對於儲存,更好理解,每個節點存一部分資料就行了,當資料規模變大的時候,partiton是唯一的選擇,同時也會帶來一些好處:
理想情況下,有分片就行了,但事實的情況卻不大理想。原因在於,分布式系統中有大量的節點,且通過網路通訊。單個節點故障(程序crash、斷電、磁碟損壞)是個小概率事件,但整個系統的故障率會隨節點的增加而指數級增加,網路通訊也可能出現斷網、高延遲的情況。在這種一定會出現的"異常"情況下,分布式系統還是需要繼續穩定的對外提供服務,即需要較強的容錯性。最簡單的辦法就是冗餘或者複製集(replication),即多個節點負責同乙個任務,最為常見的就是分布式儲存中,對個節點負責儲存同乙份資料,以增強可用性與可靠性
partiton(分片)和replication(複製)是解決分布式系統問題的一記組合拳,很多具體的問題都可以用這個思路去解決,但往往是為了解決乙個問題,會引入更多的問題,比如為了可用性與可靠性保證,引用了冗餘(複製集),有了冗餘,各個副本的一致性問題就會變得更頭疼,一致性在系統的角度和使用者的角度又有不同的等級劃分,如果要保證強一致性,那麼會影響可用性和效能,在一些應用是難以接受的,在分布式系統中,沒有最佳的選擇,都是需要權衡,做出最合適的選擇
分布式系統需要大量的機器協作,面臨諸多的挑戰
第一,異構的機器與網路:分布式系統中的機器,配置不一樣,其上執行的服務也可能由不同的語音、架構實現,因此處理能力也不一樣,節點間通過網路連線,而不同的網路的頻寬,延時,丟包率又不一樣,怎麼保證大家齊頭並進,共同完成目標,這是個不小的挑戰
第二,普通的節點故障:雖然單節點故障概率較低,但節點數達到一定規模,出故障的概率就會變更了。分布式系統需要保證故障發生的時候,系統仍然是可用的,這就需要監控節點的狀態,在節點故障的情況下將該節點負責的計算、儲存任務轉移到其他節點
第三,不可靠的網路:相比單機過程呼叫,網路通訊是不可靠的,節點a向節點b發出請求,在約定的時間內沒有收到節點b的響應,那麼b是否處理了請求,這個是不確定的,這個不確定帶來了諸多問題,最簡單的,是否需要重試請求,節點b會不會多次處理同乙個請求
總而言之,分布式的挑戰來自不確定性,不確定計算機什麼時候crash,斷電,不確定磁碟什麼時候損壞,不確定每次網路通訊要延遲多久,也不確定通訊對端是否處理了傳送的資訊。而分布式系統放大了這個不確定性,所有有諸多的分布式理論、協議來保證這種不確定性的情況下,系統還能持續正常的工作。
可擴充套件性:分布式系統根本目標就是為了處理單個計算機無法處理的任務,當任務增加的時候,分布式系統的處理能力需要隨之增加,簡單來說,要比較方便的通過增加機器來應對資料量的增長,同時,當任務規模縮減時,可以撤掉一些多餘的機器,達到動態伸縮的效果
可用性與可靠性:一般來說,分布式系統需要7*24小時提供服務。可用性是指系統在各種情況對外提供服務的能力,簡單來說,可以通過不可用時間於正常服務時間的比值來衡量,而可靠性是指計算結果正確、儲存的資料不丟失
一致性:分布式系統為了提高可用性可靠性,一般會引入冗餘(複製集),那麼如何保證這些節點上的一致效能,這就是分布式系統不得不面對的一致性問題,一致性越強,對使用者越友好,但會制約系統的可用性,一致性等級越低,使用者就需要相容資料不一致的情況,但系統的可用性,併發性會高很多
什麼是分布式系統
一 什麼是分布式系統?1.所謂分布式,就是將乙個軟體或者是系統,看成乙個整體 不管多複雜 2.然後將這個整體拆分成若干個progress,每乙個progress都具備一定的功能 3.最後通過不同的協議,使每個progress都能夠互相通訊,連線起來。這個系統就是分布式系統。二 為什麼要這樣做?也就是...
到底什麼是分布式系統?
分布式系統背景 說分布式系統必須要說集中式系統,集中式系統中整個專案就是乙個獨立的應用,整個應用也就是整個專案,所有的東西都在乙個應用裡面。如下圖所示 如乙個 就是乙個應用,最後是多個增加多台伺服器或者多個容器來達到負載均衡的避免單點故障的目的,當然,資料庫是可以分開部署的。集中式很明顯的優點就是開...
什麼是分布式
1,什麼是分布式?任務分解 節點通訊 1 分布式和集群的關係?2 什麼是大型 訪問量 tps qps 資料量 儲存資料量 3 具體場景 第一版應用 第二版 單擊負載越來越高,資料庫伺服器和應用伺服器分離 第三版 應用伺服器做集群 cookie 儲存的是jsessionid concurrentmap...