隨著大型網(wǎng)站的各種高并發(fā)訪問、海量數(shù)據(jù)處理等場景越來越多,如何實現(xiàn)網(wǎng)站的高可用、易伸縮、可擴(kuò)展、安全等目標(biāo)就顯得越來越重要。為了解決這樣一系列問題,大型網(wǎng)站的架構(gòu)也在不斷發(fā)展。提高大型網(wǎng)站的高可用架構(gòu),不得不提的就是分布式。
先了解一下與之相對應(yīng)的集中式系統(tǒng)是什么樣的。
集中式系統(tǒng)用一句話概括就是:一個主機(jī)帶多個終端。終端沒有數(shù)據(jù)處理能力,僅負(fù)責(zé)數(shù)據(jù)的錄入和輸出,而運(yùn)算、存儲等全部在主機(jī)上進(jìn)行。拿一個電子商城舉例,一個集中式系統(tǒng)的電子商城,通過一個應(yīng)用實現(xiàn),該應(yīng)用部署在一起主機(jī)上,對外提供服務(wù)。用戶的所有操作均通過這一臺機(jī)器的一個應(yīng)用實現(xiàn)。
集中式系統(tǒng)的最大的特點(diǎn)就是部署結(jié)構(gòu)非常簡單,底層一般采用從IBM、HP等廠商購買到的昂貴的大型主機(jī)。因此無需考慮如何對服務(wù)進(jìn)行多節(jié)點(diǎn)的部署,也就不用考慮各節(jié)點(diǎn)之間的分布式協(xié)作問題。但是,由于采用單機(jī)部署。很可能帶來系統(tǒng)大而復(fù)雜、難于維護(hù)、發(fā)生單點(diǎn)故障(單個點(diǎn)發(fā)生故障的時候會波及到整個系統(tǒng)或者網(wǎng)絡(luò),從而導(dǎo)致整個系統(tǒng)或者網(wǎng)絡(luò)的癱瘓)、擴(kuò)展性差等問題。
在《分布式系統(tǒng)概念與設(shè)計》一書中,對分布式系統(tǒng)做了如下定義:分布式系統(tǒng)是一個硬件或軟件組件分布在不同的網(wǎng)絡(luò)計算機(jī)上,彼此之間僅僅通過消息傳遞進(jìn)行通信和協(xié)調(diào)的系統(tǒng)。簡單來說就是一群獨(dú)立計算機(jī)集合共同對外提供服務(wù),但是對于系統(tǒng)的用戶來說,就像是一臺計算機(jī)在提供服務(wù)一樣。
分布式意味著可以采用更多的普通計算機(jī)(相對于昂貴的大型機(jī))組成分布式集群對外提供服務(wù)。計算機(jī)越多,CPU、內(nèi)存、存儲資源等也就越多,能夠處理的并發(fā)訪問量也就越大。一個由分布式系統(tǒng)實現(xiàn)的電子商城,在功能上可能被拆分成多個應(yīng)用,分別提供不同的功能,組成一個分布式系統(tǒng)對外提供服務(wù)。而系統(tǒng)內(nèi)的各個子系統(tǒng)之間通過網(wǎng)絡(luò)進(jìn)行通信和協(xié)調(diào),如異步消息或者RPC/HTTP請求調(diào)用等。
所以,分布式系統(tǒng)中的計算機(jī)在空間上幾乎沒有任何限制,這些計算機(jī)可能被放在不同的機(jī)柜上,也可能被部署在不同的機(jī)房中,還可能在不同的城市中,對于大型的網(wǎng)站甚至可能分布在不同的國家和地區(qū)。
但是,無論空間上如何分布,一個標(biāo)準(zhǔn)的分布式系統(tǒng)應(yīng)該具有以下幾個主要特征:
分布性
分布式系統(tǒng)中的多臺計算機(jī)之間在空間位置上可以隨意分布,系統(tǒng)中的多臺計算機(jī)之間沒有主、從之分,即沒有控制整個系統(tǒng)的主機(jī),也沒有受控的從機(jī)。
透明性
系統(tǒng)資源被所有計算機(jī)共享。每臺計算機(jī)的用戶不僅可以使用本機(jī)的資源,還可以使用本分布式系統(tǒng)中其他計算機(jī)的資源(包括CPU、文件、打印機(jī)等)。
同一性
系統(tǒng)中的若干臺計算機(jī)可以互相協(xié)作來完成一個共同的任務(wù),或者說一個程序可以分布在幾臺計算機(jī)上并行地運(yùn)行。
通信性
系統(tǒng)中任意兩臺計算機(jī)都可以通過通信來交換信息。
和集中式系統(tǒng)相比,分布式系統(tǒng)的性價比更高、處理能力更強(qiáng)、可靠性更高、也有很好的擴(kuò)展性。但