分散式系統架構:初識分散式
認識集中式系統和分散式系統
集中式系統
所謂的集中式系統,指的是由一臺或一臺以上的計算機組成的中心節點(節點:伺服器/電腦),系統資料集中在該中心節點中處理;
通俗點來說,就是一臺或一臺以上的伺服器都使用同一套完整的系統程式碼來提供服務,即伺服器部署的都是一個完整應用;
集中式系統 - 例子圖:
集中式系統(叢集) - 例子圖:
分散式系統
分散式系統是一個硬體或軟體元件(應用拆分)分佈在不同網路計算機上,彼此之間只通過訊息傳遞進行通訊和協作的系統 -- 《分散式系統概念與設計》
由上定義可以得出結論,只要是伺服器之間只通過訊息傳遞通訊和協作的系統,都屬於分散式系統;
分散式系統 - 例圖:
分散式系統(叢集) - 例圖:
集中式和分散式的優缺點
圖片源自:CSDN - OnTheRoad_Kang
分散式系統的特點
分佈性:
分散式系統中的多臺計算機都會在空間上隨意分佈,同時,機器的分佈情況也會隨時變動;
對等性:
分散式系統中伺服器與伺服器之間沒有主從之分;
但有“副本”,分為資料副本和服務副本;
資料副本:指的是分散式系統對資料和服務的一種冗餘方式,主要用於提供高可用的服務,即當某個節點(伺服器)上的資料有丟失就可以重副本節點中獲取完整的資料;
伺服器副本:實質就是處理請求的伺服器,即所有伺服器副本都具有處理請求的能力
併發性:
如同一個分散式系統中多個節點,可能同時併發操作一些共享資源,如資料庫、分散式快取等等;
如何準確並且有效地協調分散式併發操作,是分散式系統架構和設計中最大的挑戰之一
缺乏全域性時鐘:
分散式系統工作時由多個程序組成,具有明顯的分佈性,這些程序之間通過交換訊息來進行通訊。因此很難定義某兩個事件的先後順序;
原因就是因為分散式系統缺乏一個全域性的時鐘序列控制;
分散式環境中的問題
通訊異常
- 因為網路本身的不可靠性,因此分散式系統在通訊過程中就會伴隨著網路的不可用風險:網路光纖、路由器、DNS伺服器等等硬體裝置或是系統不可用都會導致最終分散式系統無法順利完成一次網路通訊;
- 即使網路通訊正常進行,但延遲也會遠大於單機操作,因此訊息丟失和訊息延遲變得非常普遍;
網路分割槽
- 所謂的網路分割槽,就是有這麼一種情況,由於網路延遲,導致分散式系統節點與節點之間的通訊延時逐漸增大,最後導致部分節點有些能夠正常通訊有些不能正常通訊,這就是網路分割槽現象,也被稱為“腦裂”
- 出現網路分割槽之後,剩下那些部分能夠相互通訊的節點就要負起原來可能是整個分散式系統的操作責任來完成請求、事務等,這對分散式的一致性是一大挑戰;
三態
由於網路通訊可能會出現各種問題,因此,分散式系統的每一個請求和響應動作,都有三個狀態:成功、失敗、超時;
主要原因是因為不像傳統的單機系統,單機系統只需要在應用內部獲取一個函式的返回結果即可得出一個並且的相應結果;但分散式系統由於網路的不可靠性,就算是能夠接受到相應結果,卻可能會出現超時的現象,通常有一下兩種情況:
- 由於網路原因,請求並沒有被成功地傳送到接收方,而是在傳送的途中發生了丟失的現象
- 請求成功,也被接收方接受處理,但在響應返回給傳送方的時候發生了訊息丟失現象
當出現以上兩種情況,網路通訊的發起方是無法確定當前請求是否被成功處理的
節點故障
節點故障是分散式環境下比較常見的問題,指的是組成分散式系統的伺服器節點出現了 宕機 或者 “僵死” 等現象;