從系統架構來看,目前的商用服務器大致能夠分爲三類,即數據庫
對稱多處理器結構(SMP:Symmetric Multi-Processor),服務器
非一致存儲訪問結構(NUMA:Non-Uniform Memory Access),網絡
海量並行處理結構(MPP:Massive Parallel Processing)。架構
它們的特徵分別描述以下:dom
SMP(Symmetric Multi-Processor)性能
所謂對稱多處理器結構,是指服務器中多個CPU對稱工做,無主次或從屬關係。各CPU共享相同的物理內存,每一個 CPU訪問內存中的任何地址所需時間是相同的,所以SMP也被稱爲一致存儲器訪問結構(UMA:Uniform Memory Access)。對SMP服務器進行擴展的方式包括增長內存、使用更快的CPU、增長CPU、擴充I/O(槽口數與總線數)以及添加更多的外部設備(一般是磁盤存儲)。spa
SMP服務器的主要特徵是共享,系統中全部資源(CPU、內存、I/O等)都是共享的。也正是因爲這種特徵,致使了SMP服務器的主要問題,那就是它的擴展能力很是有限。對於SMP服務器而言,每個共享的環節均可能形成SMP服務器擴展時的瓶頸,而最受限制的則是內存。因爲每一個CPU必須經過相同的內存總線訪問相同的內存資源,所以隨着CPU數量的增長,內存訪問衝突將迅速增長,最終會形成CPU資源的浪費,使 CPU性能的有效性大大下降。實驗證實,SMP服務器CPU利用率最好的狀況是2至4個CPU。操作系統
圖1.SMP服務器CPU利用率狀態3d
NUMA(Non-Uniform Memory Access)orm
因爲SMP在擴展能力上的限制,人們開始探究如何進行有效地擴展從而構建大型系統的技術,NUMA就是這種努力下的結果之一。利用NUMA技術,能夠把幾十個CPU(甚至上百個CPU)組合在一個服務器內。其CPU模塊結構如圖2所示:
圖2.NUMA服務器CPU模塊結構
NUMA服務器的基本特徵是具備多個CPU模塊,每一個CPU模塊由多個CPU(如4個)組成,而且具備獨立的本地內存、I/O槽口等。因爲其節點之間能夠經過互聯模塊(如稱爲Crossbar Switch)進行鏈接和信息交互,所以每一個CPU能夠訪問整個系統的內存(這是NUMA系統與MPP系統的重要差異)。顯然,訪問本地內存的速度將遠遠高於訪問遠地內存(系統內其它節點的內存)的速度,這也是非一致存儲訪問NUMA的由來。因爲這個特色,爲了更好地發揮系統性能,開發應用程序時須要儘可能減小不一樣CPU模塊之間的信息交互。利用NUMA技術,能夠較好地解決原來SMP系統的擴展問題,在一個物理服務器內能夠支持上百個CPU。比較典型的NUMA服務器的例子包括HP的Superdome、SUN15K、IBMp690等。
但NUMA技術一樣有必定缺陷,因爲訪問遠地內存的延時遠遠超過本地內存,所以當CPU數量增長時,系統性能沒法線性增長。如HP公司發佈Superdome服務器時,曾公佈了它與HP其它UNIX服務器的相對性能值,結果發現,64路CPU的Superdome (NUMA結構)的相對性能值是20,而8路N4000(共享的SMP結構)的相對性能值是6.3。從這個結果能夠看到,8倍數量的CPU換來的只是3倍性能的提高。
圖3.MPP服務器架構圖
MPP(Massive Parallel Processing)
和NUMA不一樣,MPP提供了另一種進行系統擴展的方式,它由多個SMP服務器經過必定的節點互聯網絡進行鏈接,協同工做,完成相同的任務,從用戶的角度來看是一個服務器系統。其基本特徵是由多個SMP服務器(每一個SMP服務器稱節點)經過節點互聯網絡鏈接而成,每一個節點只訪問本身的本地資源(內存、存儲等),是一種徹底無共享(Share Nothing)結構,於是擴展能力最好,理論上其擴展無限制,目前的技術可實現512個節點互聯,數千個CPU。目前業界對節點互聯網絡暫無標準,如 NCR的Bynet,IBM的SPSwitch,它們都採用了不一樣的內部實現機制。但節點互聯網僅供MPP服務器內部使用,對用戶而言是透明的。
在MPP系統中,每一個SMP節點也能夠運行本身的操做系統、數據庫等。但和NUMA不一樣的是,它不存在異地內存訪問的問題。換言之,每一個節點內的CPU不能訪問另外一個節點的內存。節點之間的信息交互是經過節點互聯網絡實現的,這個過程通常稱爲數據重分配(Data Redistribution)。
可是MPP服務器須要一種複雜的機制來調度和平衡各個節點的負載和並行處理過程。目前一些基於MPP技術的服務器每每經過系統級軟件(如數據庫)來屏蔽這種複雜性。舉例來講,NCR的Teradata就是基於MPP技術的一個關係數據庫軟件,基於此數據庫來開發應用時,無論後臺服務器由多少個節點組成,開發人員所面對的都是同一個數據庫系統,而不須要考慮如何調度其中某幾個節點的負載。
NUMA與MPP的區別
從架構來看,NUMA與MPP具備許多類似之處:它們都由多個節點組成,每一個節點都具備本身的CPU、內存、I/O,節點之間均可以經過節點互聯機制進行信息交互。那麼它們的區別在哪裏?經過分析下面NUMA和MPP服務器的內部架構和工做原理不難發現其差別所在。
首先是節點互聯機制不一樣,NUMA的節點互聯機制是在同一個物理服務器內部實現的,當某個CPU須要進行遠地內存訪問時,它必須等待,這也是NUMA服務器沒法實現CPU增長時性能線性擴展的主要緣由。而MPP的節點互聯機制是在不一樣的SMP服務器外部經過I/O 實現的,每一個節點只訪問本地內存和存儲,節點之間的信息交互與節點自己的處理是並行進行的。所以MPP在增長節點時性能基本上能夠實現線性擴展。
其次是內存訪問機制不一樣。在NUMA服務器內部,任何一個CPU能夠訪問整個系統的內存,但遠地訪問的性能遠遠低於本地內存訪問,所以在開發應用程序時應該儘可能避免遠地內存訪問。在MPP服務器中,每一個節點只訪問本地內存,不存在遠地內存訪問的問題。
數據倉庫的選擇
哪一種服務器更加適應數據倉庫環境?這須要從數據倉庫環境自己的負載特徵入手。衆所周知,典型的數據倉庫環境具備大量複雜的數據處理和綜合分析,要求系統具備很高的I/O處理能力,而且存儲系統須要提供足夠的I/O帶寬與之匹配。而一個典型的OLTP系統則以聯機事務處理爲主,每一個交易所涉及的數據很少,要求系統具備很高的事務處理能力,可以在單位時間裏處理儘可能多的交易。顯然這兩種應用環境的負載特徵徹底不一樣。
從NUMA架構來看,它能夠在一個物理服務器內集成許多CPU,使系統具備較高的事務處理能力,因爲遠地內存訪問時延遠長於本地內存訪問,所以須要儘可能減小不一樣CPU模塊之間的數據交互。顯然,NUMA架構更適用於OLTP事務處理環境,當用於數據倉庫環境時,因爲大量複雜的數據處理必然致使大量的數據交互,將使CPU的利用率大大下降。
相對而言,MPP服務器架構的並行處理能力更優越,更適合於複雜的數據綜合分析與處理環境。固然,它須要藉助於支持MPP技術的關係數據庫系統來屏蔽節點之間負載平衡與調度的複雜性。另外,這種並行處理能力也與節點互聯網絡有很大的關係。顯然,適應於數據倉庫環境的MPP服務器,其節點互聯網絡的I/O性能應該很是突出,才能充分發揮整個系統的性能。