大家都在說的分散式系統到底是什麼?

HollisChuang發表於2018-05-14

隨著大型網站的各種高併發訪問、海量資料處理等場景越來越多,如何實現網站的高可用、易伸縮、可擴充套件、安全等目標就顯得越來越重要。為了解決這樣一系列問題,大型網站的架構也在不斷髮展。提高大型網站的高可用架構,不得不提的就是分散式。本文主要簡單介紹了分散式系統的概念、分散式系統的特點、常用的分散式方案以及分散式和叢集的區別等。

一、集中式系統

在學習分散式之前,先了解一下與之相對應的集中式系統是什麼樣的。

集中式系統用一句話概括就是:一個主機帶多個終端。終端沒有資料處理能力,僅負責資料的錄入和輸出。而運算、儲存等全部在主機上進行。現在的銀行系統,大部分都是這種集中式的系統,此外,在大型企業、科研單位、軍隊、政府等也有分佈。集中式系統,主要流行於上個世紀。

集中式系統的最大的特點就是部署結構非常簡單,底層一般採用從IBM、HP等廠商購買到的昂貴的大型主機。因此無需考慮如何對服務進行多節點的部署,也就不用考慮各節點之間的分散式協作問題。但是,由於採用單機部署。很可能帶來系統大而複雜、難於維護、發生單點故障(單個點發生故障的時候會波及到整個系統或者網路,從而導致整個系統或者網路的癱瘓)、擴充套件性差等問題。

二、分散式系統(distributed system)

在《分散式系統概念與設計》一書中,對分散式系統做了如下定義:

分散式系統是一個硬體或軟體元件分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調的系統

簡單來說就是一群獨立計算機集合共同對外提供服務,但是對於系統的使用者來說,就像是一臺計算機在提供服務一樣。分散式意味著可以採用更多的普通計算機(相對於昂貴的大型機)組成分散式叢集對外提供服務。計算機越多,CPU、記憶體、儲存資源等也就越多,能夠處理的併發訪問量也就越大。

從分散式系統的概念中我們知道,各個主機之間通訊和協調主要通過網路進行,所以,分散式系統中的計算機在空間上幾乎沒有任何限制,這些計算機可能被放在不同的機櫃上,也可能被部署在不同的機房中,還可能在不同的城市中,對於大型的網站甚至可能分佈在不同的國家和地區。但是,無論空間上如何分佈,一個標準的分散式系統應該具有以下幾個主要特徵:

分佈性

分散式系統中的多臺計算機之間在空間位置上可以隨意分佈,系統中的多臺計算機之間沒有主、從之分,即沒有控制整個系統的主機,也沒有受控的從機。

透明性

系統資源被所有計算機共享。每臺計算機的使用者不僅可以使用本機的資源,還可以使用本分散式系統中其他計算機的資源(包括CPU、檔案、印表機等)。

同一性

系統中的若干臺計算機可以互相協作來完成一個共同的任務,或者說一個程式可以分佈在幾臺計算機上並行地執行。

通訊性

系統中任意兩臺計算機都可以通過通訊來交換資訊。

和集中式系統相比,分散式系統的價效比更高、處理能力更強、可靠性更高、也有很好的擴充套件性。但是,分散式在解決了網站的高併發問題的同時也帶來了一些其他問題。首先,分散式的必要條件就是網路,這可能對效能甚至服務能力造成一定的影響。其次,一個叢集中的伺服器數量越多,伺服器當機的概率也就越大。另外,由於服務在叢集中分佈是部署,使用者的請求只會落到其中一臺機器上,所以,一旦處理不好就很容易產生資料一致性問題。

常用的分散式方案

分散式應用和服務

將應用和服務進行分層和分割,然後將應用和服務模組進行分散式部署。這樣做不僅可以提高併發訪問能力、減少資料庫連線和資源消耗,還能使不同應用複用共同的服務,使業務易於擴充套件。

分散式靜態資源

對網站的靜態資源如JS、CSS、圖片等資源進行分散式部署可以減輕應用伺服器的負載壓力,提高訪問速度。

分散式資料和儲存

大型網站常常需要處理海量資料,單臺計算機往往無法提供足夠的記憶體空間,可以對這些資料進行分散式儲存。

分散式計算

隨著計算技術的發展,有些應用需要非常巨大的計算能力才能完成,如果採用集中式計算,需要耗費相當長的時間來完成。分散式計算將該應用分解成許多小的部分,分配給多臺計算機進行處理。這樣可以節約整體計算時間,大大提高計算效率。

分散式與叢集

分散式(distributed)是指在多臺不同的伺服器中部署不同的服務模組,通過遠端呼叫協同工作,對外提供服務。

叢集(cluster)是指在多臺不同的伺服器中部署相同應用或服務模組,構成一個叢集,通過負載均衡裝置對外提供服務。

大家都在說的分散式系統到底是什麼?

相關文章