服務器最開始的時候是單CPU,而後才進化到了雙CPU甚至多CPU的SMP架構。所謂SMP架構
指的是多路CPU無主次,共享內存、總線、操做系統等。此時每一個CPU訪問內存任何地址所耗費的時間是相等的。因此也稱爲一致存儲器訪問結構
數據庫
你們共享一樣的內存,因此擴展能力有限,由於CPU數量增長了,內存訪問衝突也會增長。爲了進一步提升CPU數量的同時還能保證效率,NUMA架構出現了,將多個SMP進行鬆耦合。後端
還有一種AMP架構,不一樣的CPU是作不一樣的事的,互不干擾。api
NUMA架構中,多個SMP經過Crossbar switch交換矩陣進行互聯。
每一個SMP有本身的內存,同時還能夠訪問其餘SMP
的內存,可是須要通過高速交換矩陣,很顯然SMP訪問本身的內存速度很是高,可是訪問遠端的SMP的內存還須要通過交換矩陣,延遲增長,能夠看出NUMA經過犧牲內存的訪問時延來達到更高的擴展性。服務器
總之,SMP與NUMA架構對軟件程序方面影響擴展性不大,一臺主機內都使用單一的操做系統。
缺點是CPU數量增長,訪問遠端內存的時延也會增長,性能不能線性增長。此時MPP架構就出現了。架構
MPP說白了就是將多臺獨立的主機組成集羣。顯然在此架構下,每一個節點都有各自的CPU、內存、IO總線、操做系統,徹底鬆耦合。最關鍵的是MPP集羣中的軟件架構也相應的改變了,這樣MPP的效率隨節點數量增長就能夠線性增長了。分佈式
其實若是NUMA架構下,若是經過上層軟件來使得程序儘可能少的讀取遠端的內存,NUMA效率也會線性增長。可是實際上NUMA操做系統仍然是同一個,內存仍然是全局均勻的,因此訪問遠端內存是不可避免的。性能
那麼MPP至關於把內存強制分開,同時又改變了程序架構,這樣就能夠保證海量計算下的效率線性增長。操作系統
存儲系統與服務器CPU架構演進相同,控制器就比如CPU,後端磁盤櫃就相似於內存。code
高速交換矩陣
來共享訪問每一個SMP上的內存,其中SMP就是一對控制器組成的Director,高速交換矩陣就是RapidIOSMP/NUMA/MPP其實都算Scale-out,只不過程度和形態不一樣。
MPP架構的存儲,好比XIV,在多路大塊連續的IO
下,效率反而不好。這是由於單路IO可能致使整個MPP集羣中的磁盤資源所有牽動orm
可是若是是小塊隨機的IO
,多路IO關聯不多,則性能隨節點數增長線性增長,這就比如將一個程序並行分解爲多個子任務(相似於隨機小IO),由於子任務之間的關聯不多,節點之間的通訊量很小,則並行執行的效率高。也就是MPP自身是share-Nothing架構,運行在上面的程序也儘量的是Share-Nothing
SMP、NUMA、MPP各有各的好處,好比
大話存儲II