當(dāng)前物理CPU正遵循摩爾定律在穩(wěn)定的高速發(fā)展,然而人類對(duì)計(jì)算能力的要求更高,一方面應(yīng)用對(duì)計(jì)算能力要求超過摩爾定律的速度,另外一方面要求提高計(jì)算能力的使用效率,這都離不開軟件的協(xié)助。虛擬化和分布式都是現(xiàn)在流行的架構(gòu),他們代表著兩個(gè)不同的發(fā)展方向:虛擬化--一臺(tái)機(jī)器分成多臺(tái)機(jī)器用;分布式--多臺(tái)機(jī)器合成一臺(tái)機(jī)器用。正可謂"天下大勢(shì),分久必合,合久必分"。
一、分布式架構(gòu)發(fā)展和現(xiàn)狀
1. 從SMP到MPP
從系統(tǒng)架構(gòu)來看,目前的商用服務(wù)器主要分為三類,對(duì)稱多處理器結(jié)構(gòu)SMP,非一致存儲(chǔ)訪問結(jié)構(gòu)NUMA以及海量并行處理結(jié)構(gòu)MPP。
● SMP(Symmetric Multi-Processor)
所謂對(duì)稱多處理器結(jié)構(gòu),是指服務(wù)器中多個(gè)CPU對(duì)稱工作,無(wú)主次或從屬關(guān)系。各CPU共享相同的物理內(nèi)存,每個(gè)CPU訪問內(nèi)存中的任何地址所需時(shí)間是相同的,因此SMP也被稱為一致存儲(chǔ)器訪問結(jié)構(gòu)(UMA:Uniform Memory Access)。
SMP服務(wù)器的主要特征是共享,系統(tǒng)中所有資源(CPU、內(nèi)存、I/O等)都是共享的。也正是由于這種特征,導(dǎo)致了SMP服務(wù)器的主要問題,那就是它的擴(kuò)展能力非常有限。
● NUMA(Non-Uniform Memory Access)
由于SMP在擴(kuò)展能力上的限制,人們開始探究如何進(jìn)行有效地?cái)U(kuò)展從而構(gòu)建大型系統(tǒng)的技術(shù),NUMA就是這種努力下的結(jié)果之一。利用NUMA技術(shù),可以把幾十個(gè)CPU(甚至上百個(gè)CPU)組合在一個(gè)服務(wù)器內(nèi)。
NUMA服務(wù)器的基本特征是具有多個(gè)CPU模塊,每個(gè)CPU模塊由多個(gè)CPU(如4個(gè))組成,并且具有獨(dú)立的本地內(nèi)存、I/O槽口等。由于其節(jié)點(diǎn)之間可以通過互聯(lián)模塊(如稱為Crossbar Switch)進(jìn)行連接和信息交互,因此每個(gè)CPU可以訪問整個(gè)系統(tǒng)的內(nèi)存。顯然,訪問本地內(nèi)存的速度將遠(yuǎn)遠(yuǎn)高于訪問遠(yuǎn)地內(nèi)存(系統(tǒng)內(nèi)其它節(jié)點(diǎn)的內(nèi)存)的速度,這也是非一致存儲(chǔ)訪問NUMA的由來。由于這個(gè)特點(diǎn),為了更好地發(fā)揮系統(tǒng)性能,開發(fā)應(yīng)用程序時(shí)需要盡量減少不同CPU模塊之間的信息交互。利用NUMA技術(shù),可以較好地解決原來SMP系統(tǒng)的擴(kuò)展問題,在一個(gè)物理服務(wù)器內(nèi)可以支持上百個(gè)CPU。比較典型的NUMA服務(wù)器的例子即我們常說的小機(jī)例如HP的Supterdome和IBM的Power服務(wù)器。
但NUMA的節(jié)點(diǎn)互聯(lián)機(jī)制是在同一個(gè)物理服務(wù)器內(nèi)部實(shí)現(xiàn)的,當(dāng)某個(gè)CPU需要進(jìn)行遠(yuǎn)地內(nèi)存訪問時(shí),它必須等待,這也是NUMA服務(wù)器無(wú)法實(shí)現(xiàn)CPU增加時(shí)性能線性擴(kuò)展的主要原因。2013年年度備受矚目的"淘寶去IOE"的原因也在此。在IBM的小機(jī)和Oracle數(shù)據(jù)庫(kù)的組合下,淘寶通過硬件升級(jí)獲得的性能增長(zhǎng)達(dá)到了瓶頸,無(wú)法滿足客戶的爆發(fā)性增長(zhǎng)。
● MPP(Massive Parallel Processing)
和NUMA不同,MPP提供了另外一種進(jìn)行系統(tǒng)擴(kuò)展的方式,它由多個(gè)SMP服務(wù)器通過一定的節(jié)點(diǎn)互聯(lián)網(wǎng)絡(luò)進(jìn)行連接,協(xié)同工作,完成相同的任務(wù),從用戶的角度來看是一個(gè)服務(wù)器系統(tǒng)。其基本特征是由多個(gè)SMP服務(wù)器(每個(gè)SMP服務(wù)器稱節(jié)點(diǎn))通過節(jié)點(diǎn)互聯(lián)網(wǎng)絡(luò)連接而成,每個(gè)節(jié)點(diǎn)只訪問自己的本地資源(內(nèi)存、存儲(chǔ)等),是一種完全無(wú)共享(Share Nothing)結(jié)構(gòu),因而擴(kuò)展能力最好,理論上其擴(kuò)展無(wú)限制(如圖1所示)。目前的技術(shù)可實(shí)現(xiàn)512個(gè)節(jié)點(diǎn)互聯(lián),數(shù)千個(gè)CPU。目前業(yè)界對(duì)節(jié)點(diǎn)互聯(lián)網(wǎng)絡(luò)暫無(wú)標(biāo)準(zhǔn),如 NCR的Bynet,IBM的SPSwitch,它們都采用了不同的內(nèi)部實(shí)現(xiàn)機(jī)制。但節(jié)點(diǎn)互聯(lián)網(wǎng)僅供MPP服務(wù)器內(nèi)部使用,對(duì)用戶而言是透明的。
在MPP系統(tǒng)中,每個(gè)SMP節(jié)點(diǎn)也可以運(yùn)行自己的操作系統(tǒng)、數(shù)據(jù)庫(kù)等。但和NUMA不同的是,它不存在異地內(nèi)存訪問的問題。換言之,每個(gè)節(jié)點(diǎn)內(nèi)的CPU不能訪問另一個(gè)節(jié)點(diǎn)的內(nèi)存。節(jié)點(diǎn)之間的信息交互是通過節(jié)點(diǎn)互聯(lián)網(wǎng)絡(luò)實(shí)現(xiàn)的,這個(gè)過程一般稱為數(shù)據(jù)重分配(Data Redistribution)。
但是MPP服務(wù)器需要一種復(fù)雜的機(jī)制來調(diào)度和平衡各個(gè)節(jié)點(diǎn)的負(fù)載和并行處理過程。目前一些基于MPP技術(shù)的服務(wù)器往往通過系統(tǒng)級(jí)軟件(如數(shù)據(jù)庫(kù))來屏蔽這種復(fù)雜性。例如NCR的Teradata就是基于MPP技術(shù)的一個(gè)關(guān)系數(shù)據(jù)庫(kù)軟件,基于此數(shù)據(jù)庫(kù)來開發(fā)應(yīng)用時(shí),不管后臺(tái)服務(wù)器由多少個(gè)節(jié)點(diǎn)組成,開發(fā)人員所面對(duì)的都是同一個(gè)數(shù)據(jù)庫(kù)系統(tǒng),而不需要考慮如何調(diào)度其中某幾個(gè)節(jié)點(diǎn)的負(fù)載。
MPP以其優(yōu)良的擴(kuò)展架構(gòu)成為了分布式架構(gòu)的基礎(chǔ)。
圖1.MPP服務(wù)器架構(gòu)圖