多CPU架構(gòu)演進
對稱多處理器結(jié)構(gòu):(SMP安岂,Symmetric Multi-Processor)
服務(wù)器最開始的時候是單CPU,然后才進化到了雙CPU甚至多CPU的SMP架構(gòu)帆吻。所謂SMP架構(gòu)
指的是多路CPU無主次域那,共享內(nèi)存、總線猜煮、操作系統(tǒng)等次员。此時每個CPU訪問內(nèi)存任何地址所耗費的時間是相等的。所以也稱為一致存儲器訪問結(jié)構(gòu)
大家共享同樣的內(nèi)存王带,所以擴展能力有限淑蔚,因為CPU數(shù)量增加了,內(nèi)存訪問沖突也會增加愕撰。為了進一步提高CPU數(shù)量的同時還能保證效率刹衫,NUMA架構(gòu)出現(xiàn)了醋寝,將多個SMP進行松耦合。
還有一種AMP架構(gòu)带迟,不同的CPU是做不同的事的音羞,互不干擾。
非一致存儲訪問結(jié)構(gòu):(NUMA仓犬,Non-Uniform Memory Access)
NUMA架構(gòu)中嗅绰,多個SMP通過Crossbar switch交換矩陣進行互聯(lián)。
每個SMP有自己的內(nèi)存搀继,同時還可以訪問其他SMP
的內(nèi)存窘面,但是需要經(jīng)過高速交換矩陣,很顯然SMP訪問自己的內(nèi)存速度非常高叽躯,但是訪問遠端的SMP的內(nèi)存還需要經(jīng)過交換矩陣民镜,延遲增加,可以看出NUMA通過犧牲內(nèi)存的訪問時延來達到更高的擴展性险毁。
總之,SMP與NUMA架構(gòu)對軟件程序方面影響擴展性不大们童,一臺主機內(nèi)都使用單一的操作系統(tǒng)畔况。
缺點是CPU數(shù)量增加,訪問遠端內(nèi)存的時延也會增加慧库,性能不能線性增加跷跪。此時MPP架構(gòu)就出現(xiàn)了。
海量并行處理結(jié)構(gòu):(MPP齐板,Massive Parallel Processing)
MPP說白了就是將多臺獨立的主機組成集群吵瞻。顯然在此架構(gòu)下,每個節(jié)點都有各自的CPU甘磨、內(nèi)存橡羞、IO總線、操作系統(tǒng)济舆,完全松耦合卿泽。最關(guān)鍵的是MPP集群中的軟件架構(gòu)也相應(yīng)的改變了,這樣MPP的效率隨節(jié)點數(shù)量增加就可以線性增加了滋觉。
其實如果NUMA架構(gòu)下签夭,如果通過上層軟件來使得程序盡量少的讀取遠端的內(nèi)存,NUMA效率也會線性增加椎侠。但是實際上NUMA操作系統(tǒng)仍然是同一個第租,內(nèi)存仍然是全局均勻的,所以訪問遠端內(nèi)存是不可避免的我纪。
那么MPP相當(dāng)于把內(nèi)存強制分開慎宾,同時又改變了程序架構(gòu)丐吓,這樣就可以保證海量計算下的效率線性增加。
存儲系統(tǒng)的演進
存儲系統(tǒng)與服務(wù)器CPU架構(gòu)演進相同璧诵,控制器就好比CPU汰蜘,后端磁盤柜就類似于內(nèi)存。
- SMP
縱觀存儲系統(tǒng)的演進之宿,一開始是單控族操,后來演進到雙控互為備份,此時就類似于AMP比被,兩個控制器各自處理自己的任務(wù)色难。
然后進入到雙控并行處理的時代(HDS的AMS2000存儲系統(tǒng)),類似于SMP等缀,兩個控制器可以并行的處理枷莉。
再到后來則有多控并行對稱處理架構(gòu),Oracle的RAC集群就可以視為一種多點SMP尺迂,各種共享底層存儲的集群文件系統(tǒng)都屬于多點對稱SMP - NUMA
同樣NUMA也出現(xiàn)在了存儲系統(tǒng)中笤妙,比如EMC的V-Max相當(dāng)于多個SMP利用高速交換矩陣
來共享訪問每個SMP上的內(nèi)存,其中SMP就是一對控制器組成的Director噪裕,高速交換矩陣就是RapidIO - MPP
- 那么IBM的XIV就屬于松耦合MPP架構(gòu)蹲盘,每個節(jié)點都有自己的CPU、內(nèi)存膳音、IO接口召衔,使用外部的交換機互相通信。
- 而HDS的VSP更像是一個緊耦合的MPP祭陷。
-
另一種屬于MPP架構(gòu)的存儲系統(tǒng)就是分布式文件系統(tǒng)苍凛,比如HDFS等。
MPP對軟件架構(gòu)變化很大兵志,所以傳統(tǒng)存儲廠商很難將之前的架構(gòu)演進到MPP上來醇蝴。
image.png
誰才是真正的Scale-out
SMP/NUMA/MPP其實都算Scale-out,只不過程度和形態(tài)不同毒姨。
MPP架構(gòu)的存儲哑蔫,比如XIV,在多路大塊連續(xù)的IO
下弧呐,效率反而很差闸迷。這是因為單路IO可能導(dǎo)致整個MPP集群中的磁盤資源全部牽動
但是如果是小塊隨機的IO
,多路IO關(guān)聯(lián)很少俘枫,則性能隨節(jié)點數(shù)增加線性增加腥沽,這就好比將一個程序并行分解為多個子任務(wù)(類似于隨機小IO),因為子任務(wù)之間的關(guān)聯(lián)很少鸠蚪,節(jié)點之間的通信量很小今阳,則并行執(zhí)行的效率高师溅。也就是MPP自身是share-Nothing架構(gòu),運行在上面的程序也盡可能的是Share-Nothing
SMP盾舌、NUMA墓臭、MPP各有各的好處,比如
- SMP適用于擴展性要求不高妖谴,而又不想程序改變太大的場景窿锉。
- MPP則適用于海量數(shù)據(jù)下的高擴展性需求場景。它需要對程序進行大量的改變膝舅,而且多流大塊連續(xù)IO場景下性能不佳嗡载。所以MPP架構(gòu)廣泛的應(yīng)用于互聯(lián)網(wǎng)的底層Key-Value分布式數(shù)據(jù)庫,這種數(shù)據(jù)庫主要應(yīng)對高隨機小塊讀的場景仍稀,可以獲得非常高的性能洼滚。
參考
大話存儲II