分散式 - 分散式系統的特點

土豆的奧特之父發表於2019-05-16

 

20世紀60年代,IBM研發了System 360架構大型機,與同時期的波音707、福特汽車譽為商業三大成就,憑藉其卓越的效能和良好的穩定性,開啟了大型機的時代,誕生了非常多的集中式系統,採用單機架構,有非常好的單機處理能力。

然而,大型機的高效能也伴隨著高成本,包括購買成本和運維成本,對運維人員的要求非常之高,需要掌握大型機緊密設計的技術細節。
並且購買成本也是極其昂貴,起步幾百萬刀,甚至更高,只有政府和金融等機構才有能力採購。

另一個問題,是當今大家都比較關注的單點故障,大型機設計在精良,也不代表它永不當機,而一臺大型機上面往往安裝一個甚至多個重要的系統,一旦當機,後果很嚴重。

美國國防部認為,如果僅有一個集中的軍事指揮中心,萬一被摧毀,全國軍事指揮將處於癱瘓狀態,因此,設計一個分散的,網路化的指揮通訊系統十分有必要,1969年組建了第一個分組交換實驗網ARPANET,1980年,TCP/IP(Transmission Control Protocol/Internet Protocol)研製成功,從此,奠定了分散式系統的基石 -- 網路和通訊協議!

看起來,分散式最早出現的目地首先是解決單點問題,避免單點故障,然後解決了效能問題。

隨著PC機效能的提升和普及,很多企業開始嘗試將系統執行在PC伺服器上,搭建基於分散式架構的系統,系統之間通過網路連線和通訊,分散式系統嚴重依賴於網路。

一句話總結單機集中式系統和分散式系統的核心差異:單機系統執行於一臺計算機上,而分散式系統是執行於網路之上!

而在前幾年,Hadoop生態倡導基於普通PC構建大型分散式計算系統,並大獲成功,加速了分散式架構快速普及和應用。

分散式的特點

分散式系統是一個各元件分佈在不同計算機上,彼此通過網路通訊和協調的系統。

這是來自《分散式系統概念與設計》一書中的定義,我給簡化了一下,但核心就是上面提到的,分散式,顧名思義,系統的特定部分是分佈在不同的計算機上,甚至是完全不在一個機房,或者一個地區的計算機上,各部分通過網路通訊,使得整體看起來還是一個系統,對使用者透明。

資源冗餘

網路中的計算機本身都是對等的,沒有主從之分,但是,分散式系統為了本身的健壯和可靠性考慮,會設計一些冗餘來化解分散式系統本身存在的一些必然性。
冗餘包括資料的冗餘和服務的冗餘,資料通常會有一主和多個副本,主資料丟失,系統會讀取副本資料,繼續對外提供服務;
而服務的冗餘是同樣一個服務,會執行在多個計算機節點上,每一個服務都有能力對外提供完整或部分服務。

併發問題

如上所述,一個系統服務可能存在多個執行例項,由於是同時執行,就可能會併發的操作一些共享資源,諸如資料庫,分散式檔案系統等,如何準確高效的協調併發操作,避免阻塞,保證一致性,是分散式架構設計中最大的挑戰之一!

全域性時鐘

請參考論文:《Time and clocks and ordering of events in a distributed system》或者 time-and-clocks-and-ordering-of-events-in-a-distributed-system
,深刻的剖析了分散式系統多節點之間缺乏全域性時鐘序列控制的問題,如何保證事件發生的精確的先後順序。

環境問題

分散式系統的優勢是網路化,為系統的擴充套件提供了可能性,然而,分散式最大的問題也是網路化帶來的各種不確定因素,從工業的角度來說,網路問題是分散式系統的原罪,給分散式系統的設計和實現都帶來了極大的難題和挑戰。

網路的不可靠性

 

 

 

 

 

假如CPU一次計算需要1s,那麼,一次從舊金山到紐約的網路請求,大約需要5年,到香港需要11年

所以,網路的倆個問題,1,不能保證資訊的完整性和必達性,存在資料丟包的問題;2,延遲,在整個系統當中,網路延遲是最耗時的部分,各部分效能對比請參考:Computer Latency at a Human Scale

網路分割槽

 

 

當網路通訊出現異常,導致分散式系統中部分節點之間的網路延時不斷增大,最終,只有部分節點之間的通訊是正常的,整個分散式系統變成幾個小組,這個現象稱為網路分割槽,也會形成腦裂。

因此,分散式系統被強行分為幾個區域性的小叢集,並且都會按照一致性演算法選舉出自己的master,這個有點像戰國時期的中國,這就是網路分割槽,也是腦裂。
可怕的是,每個小叢集都可以正常對外服務,出現資料嚴重不一致的情況,因此,網路分割槽,資料一致性,再加上可用性(就是出現前面兩種情況你怎麼辦?),被稱為傳說中的CAP定理,

 

CAP


這些情況對分散式系統的設計,工程實踐提出了非常大的挑戰。

 

三態

在集中式的系統中,模組之間的呼叫狀態只有倆種狀態,就是成功和失敗,而在分散式系統中,模組之間可能是通過網路通訊的,所以就多了一種超時的狀態。
超時狀態通常會出現在一下倆種情況:

  1. 由於網路原因,請求並沒有被成功的傳送到接收方,在過程中丟失;
  2. 請求被成功的傳送到接收方,並進行了處理,但是,接收方在響應給傳送方的過程中,資料丟失了,傳送方沒有收到反饋。

因此,成功、失敗、超時是分散式系統通訊的三種狀態,稱為三態。

節點故障

 

 

節點故障是分散式系統中另一個很常見的問題,指的是分散式組成的節點當中,有的節點因為當機、或者程式退出,出現的節點故障。
根據經驗,每個節點都有可能出現故障,並且每天都有可能發生,所以,分散式設計,除了要考慮網路問題,另一個重要的考慮因素是節點故障。

小結

本文主要討論了一下集中式系統的過去,和分散式系統盛行的當下和緣由,以及分散式系統的特點、困境,後面會繼續出一些關於分散式系統的相關內容,討論分散式系統的方方面面。

相關文章