概述
分布式系統(tǒng)主要用于解決單機(jī)在處理高并發(fā)請(qǐng)求,海量數(shù)據(jù)存儲(chǔ)和海量數(shù)據(jù)計(jì)算分析時(shí)的瓶頸,通過將系統(tǒng)拆分為各個(gè)子系統(tǒng),各個(gè)子系統(tǒng)可以在各自的機(jī)器上部署從而來實(shí)現(xiàn)整個(gè)系統(tǒng)的橫向拓展。其中針對(duì)系統(tǒng)業(yè)務(wù)的差異,分布式系統(tǒng)設(shè)計(jì)的思路也會(huì)存在差異,以下主要是針對(duì)企業(yè)級(jí)應(yīng)用服務(wù),數(shù)據(jù)存儲(chǔ)訪問,數(shù)據(jù)計(jì)算分析服務(wù)來做個(gè)分析。
1. 企業(yè)應(yīng)用服務(wù)
(1)集群部署
應(yīng)對(duì)高并發(fā)請(qǐng)求的處理,同一個(gè)服務(wù)部署多個(gè)節(jié)點(diǎn)來解決單機(jī)處理能力有限和單點(diǎn)問題,而實(shí)現(xiàn)這個(gè)的前提是服務(wù)節(jié)點(diǎn)的無狀態(tài),即不在服務(wù)進(jìn)程進(jìn)程的內(nèi)存維護(hù)數(shù)據(jù),這樣每個(gè)服務(wù)節(jié)點(diǎn)都可以隨時(shí)停止運(yùn)行和重啟。通過負(fù)載均衡機(jī)制來將請(qǐng)求分散到這多個(gè)服務(wù)節(jié)點(diǎn),從而實(shí)現(xiàn)動(dòng)態(tài)的橫向拓展;
(2)分布式應(yīng)用
分布式應(yīng)用是指一個(gè)系統(tǒng)由多個(gè)子服務(wù)組成,每個(gè)子服務(wù)對(duì)應(yīng)一個(gè)獨(dú)立的進(jìn)程,部署在不同的節(jié)點(diǎn),各子系統(tǒng)通過網(wǎng)絡(luò)來進(jìn)行交互協(xié)作,所以服務(wù)請(qǐng)求的處理開銷主要是在網(wǎng)絡(luò)通信方面。分布式應(yīng)用相對(duì)于單體應(yīng)用雖然由于各子服務(wù)需要通過網(wǎng)絡(luò)來進(jìn)行協(xié)作而增加了網(wǎng)絡(luò)開銷,但是提高了應(yīng)用的拓展性,可維護(hù)性,并發(fā)性,可靠性和整體的性能,不過也存在缺點(diǎn)就是服務(wù)調(diào)用追蹤更加復(fù)雜,網(wǎng)絡(luò)的不穩(wěn)定性增加了服務(wù)調(diào)用的時(shí)間延遲和出錯(cuò)的概率。
2. 數(shù)據(jù)存儲(chǔ)服務(wù)
應(yīng)對(duì)海量數(shù)據(jù)的存儲(chǔ),分散數(shù)據(jù)到多個(gè)節(jié)點(diǎn)存儲(chǔ)來解決單機(jī)存儲(chǔ)空間問題,同時(shí)每個(gè)數(shù)據(jù)節(jié)點(diǎn)包含多個(gè)備份節(jié)點(diǎn)來實(shí)現(xiàn)數(shù)據(jù)冗余存儲(chǔ)來避免節(jié)點(diǎn)宕機(jī)導(dǎo)致數(shù)據(jù)丟失,但是需要在多個(gè)主從數(shù)據(jù)節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步來保持?jǐn)?shù)據(jù)一致性。所以數(shù)據(jù)存儲(chǔ)訪問的分布式系統(tǒng)設(shè)計(jì)一般需要考慮數(shù)據(jù)的復(fù)制同步和數(shù)據(jù)一致性要求,即通常需要在數(shù)據(jù)可用性和數(shù)據(jù)一致性之間做個(gè)折中,如果要強(qiáng)一致性,則每次數(shù)據(jù)寫入都需要在主從節(jié)點(diǎn)之間寫入成功才返回,在這個(gè)過程中客戶端無法讀取這個(gè)數(shù)據(jù);如果要求可用性,則可以在主節(jié)點(diǎn)寫入成功,或者部分從節(jié)點(diǎn)寫入成功,如Quorum機(jī)制,則成功響應(yīng)客戶端。
3. 數(shù)據(jù)計(jì)算服務(wù)
應(yīng)對(duì)海量數(shù)據(jù)的離線和實(shí)時(shí)計(jì)算分析,首先數(shù)據(jù)計(jì)算通常涉及海量數(shù)據(jù),而數(shù)據(jù)通常被分散存儲(chǔ)在多個(gè)節(jié)點(diǎn)來解決單機(jī)存儲(chǔ)空間的問題。為了提高計(jì)算速度,需要在每個(gè)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行計(jì)算,然后在主節(jié)點(diǎn)進(jìn)行結(jié)果匯總。而數(shù)據(jù)計(jì)算方面為了避免數(shù)據(jù)通過網(wǎng)絡(luò)傳輸,通常計(jì)算任務(wù)調(diào)度服務(wù)會(huì)將計(jì)算任務(wù)分配到數(shù)據(jù)節(jié)點(diǎn)上來進(jìn)行計(jì)算,在計(jì)算完成時(shí)只需要同步計(jì)算結(jié)果給主節(jié)點(diǎn)匯總即可。
CAP理論與BASE理論
以上系統(tǒng)都設(shè)計(jì)到多個(gè)子節(jié)點(diǎn)和不同節(jié)點(diǎn)之間數(shù)據(jù)存在相關(guān)性,如企業(yè)的分布式應(yīng)用就是一次請(qǐng)求調(diào)用涉及的多個(gè)子服務(wù)的各自數(shù)據(jù),數(shù)據(jù)存儲(chǔ)訪問就是一個(gè)數(shù)據(jù)的多個(gè)備份數(shù)據(jù)。而由于是存在于不同機(jī)器節(jié)點(diǎn)的服務(wù),需要通過網(wǎng)絡(luò)來通信協(xié)作,而網(wǎng)絡(luò)的不穩(wěn)定是固然存在的。所以也就產(chǎn)生了分布式系統(tǒng)設(shè)計(jì)的CAP理論來闡述分布式系統(tǒng)只能存在數(shù)據(jù)強(qiáng)一致性和服務(wù)高可用的其中一種,二者無法同時(shí)滿足。而在實(shí)際進(jìn)行分布式系統(tǒng)設(shè)計(jì)時(shí),則一般基于BASE理論,即基本可用,軟狀態(tài)和最終一致性。