從系統架構來看,目前的商用伺服器大體可以分為三類,即對稱多處理器結構 (SMP : Symmetric Multi-Processor) ,非一致儲存訪問結構 (NUMA : Non-Uniform Memory Access) ,以及海量並行處理結構 (MPP : Massive Parallel Processing) 。它們的特徵分別描述如下:
1. SMP(Symmetric Multi-Processor)
SMP (Symmetric Multi Processing),對稱多處理系統內有許多緊耦合多處理器,在這樣的系統中,所有的CPU共享全部資源,如匯流排,記憶體和I/O系統等,作業系統或管理資料庫的複本只有一個,這種系統有一個最大的特點就是共享所有資源。多個CPU之間沒有區別,平等地訪問記憶體、外設、一個作業系統。作業系統管理著一個佇列,每個處理器依次處理佇列中的程式。如果兩個處理器同時請求訪問一個資源(例如同一段記憶體地址),由硬體、軟體的鎖機制去解決資源爭用問題。Access to RAM is serialized; this and issues causes performance to lag slightly behind the number of additional processors in the system.
所謂對稱多處理器結構,是指伺服器中多個 CPU 對稱工作,無主次或從屬關係。各 CPU 共享相同的實體記憶體,每個 CPU 訪問記憶體中的任何地址所需時間是相同的,因此 SMP 也被稱為一致儲存器訪問結構 (UMA : Uniform Memory Access) 。對 SMP 伺服器進行擴充套件的方式包括增加記憶體、使用更快的 CPU 、增加 CPU 、擴充 I/O( 槽口數與匯流排數 ) 以及新增更多的外部裝置 ( 通常是磁碟儲存 ) 。
SMP 伺服器的主要特徵是共享,系統中所有資源 (CPU 、記憶體、 I/O 等 ) 都是共享的。也正是由於這種特徵,導致了 SMP 伺服器的主要問題,那就是它的擴充套件能力非常有限。對於 SMP 伺服器而言,每一個共享的環節都可能造成 SMP 伺服器擴充套件時的瓶頸,而最受限制的則是記憶體。由於每個 CPU 必須透過相同的記憶體匯流排訪問相同的記憶體資源,因此隨著 CPU 數量的增加,記憶體訪問衝突將迅速增加,最終會造成 CPU 資源的浪費,使 CPU 效能的有效性大大降低。實驗證明, SMP 伺服器 CPU 利用率最好的情況是 2 至 4 個 CPU 。
圖 1.SMP 伺服器 CPU 利用率狀態
2. NUMA(Non-Uniform Memory Access)
由於 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(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 技術的一個關聯式資料庫軟體,基於此資料庫來開發應用時,不管後臺伺服器由多少個節點組成,開發人員所面對的都是同一個資料庫系統,而不需要考慮如何排程其中某幾個節點的負載。
MPP (Massively Parallel Processing),大規模並行處理系統,這樣的系統是由許多松耦合的處理單元組成的,要注意的是這裡指的是處理單元而不是處理器。每個單元內的CPU都有自己私有的資源,如匯流排,記憶體,硬碟等。在每個單元內都有作業系統和管理資料庫的例項複本。這種結構最大的特點在於不共享資源。
4. 三種體系架構之間的差異
4.1 SMP系統與MPP系統比較
既然有兩種結構,那它們各有什麼特點呢?採用什麼結構比較合適呢?通常情況下,MPP系統因為要在不同處理單元之間傳送資訊(請注意上圖),所以它的效率要比SMP要差一點,但是這也不是絕對的,因為MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。這就是看通訊時間佔用計算時間的比例而定,如果通訊時間比較多,那MPP系統就不佔優勢了,相反,如果通訊時間比較少,那MPP系統可以充分發揮資源的優勢,達到高效率。當前使用的OTLP程式中,使用者訪問一箇中心資料庫,如果採用SMP系統結構,它的效率要比採用MPP結構要快得多。而MPP系統在決策支援和資料探勘方面顯示了優勢,可以這樣說,如果操作相互之間沒有什麼關係,處理單元之間需要進行的通訊比較少,那採用MPP系統就要好,相反就不合適了。
透過上面兩個圖我們可以看到,對於SMP來說,制約它速度的一個關鍵因素就是那個共享的匯流排,因此對於DSS程式來說,只能選擇MPP,而不能選擇SMP,當大型程式的處理要求大於共享匯流排時,匯流排就沒有能力進行處理了,這時SMP系統就不行了。當然了,兩個結構互有優缺點,如果能夠將兩種結合起來取長補短,當然最好了。
4.2 NUMA 與 MPP 的區別
從架構來看, NUMA 與 MPP 具有許多相似之處:它們都由多個節點組成,每個節點都具有自己的 CPU 、記憶體、 I/O ,節點之間都可以透過節點互聯機制進行資訊互動。那麼它們的區別在哪裡?透過分析下面 NUMA 和 MPP 伺服器的內部架構和工作原理不難發現其差異所在。
首先是節點互聯機制不同, NUMA 的節點互聯機制是在同一個物理伺服器內部實現的,當某個 CPU 需要進行遠地記憶體訪問時,它必須等待,這也是 NUMA 伺服器無法實現 CPU 增加時效能線性擴充套件的主要原因。而 MPP 的節點互聯機制是在不同的 SMP 伺服器外部透過 I/O 實現的,每個節點只訪問本地記憶體和儲存,節點之間的資訊互動與節點本身的處理是並行進行的。因此 MPP 在增加節點時效能基本上可以實現線性擴充套件。
其次是記憶體訪問機制不同。在 NUMA 伺服器內部,任何一個 CPU 可以訪問整個系統的記憶體,但遠地訪問的效能遠遠低於本地記憶體訪問,因此在開發應用程式時應該儘量避免遠地記憶體訪問。在 MPP 伺服器中,每個節點只訪問本地記憶體,不存在遠地記憶體訪問的問題。
圖 3.MPP 伺服器架構圖
資料倉儲的選擇
哪種伺服器更加適應資料倉儲環境?這需要從資料倉儲環境本身的負載特徵入手。眾所周知,典型的資料倉儲環境具有大量複雜的資料處理和綜合分析,要求系統具有很高的 I/O 處理能力,並且儲存系統需要提供足夠的 I/O 頻寬與之匹配。而一個典型的 OLTP 系統則以聯機事務處理為主,每個交易所涉及的資料不多,要求系統具有很高的事務處理能力,能夠在單位時間裡處理儘量多的交易。顯然這兩種應用環境的負載特徵完全不同。
從 NUMA 架構來看,它可以在一個物理伺服器內整合許多 CPU ,使系統具有較高的事務處理能力,由於遠地記憶體訪問時延遠長於本地記憶體訪問,因此需要儘量減少不同 CPU 模組之間的資料互動。顯然, NUMA 架構更適用於 OLTP 事務處理環境,當用於資料倉儲環境時,由於大量複雜的資料處理必然導致大量的資料互動,將使 CPU 的利用率大大降低。
相對而言, MPP 伺服器架構的並行處理能力更優越,更適合於複雜的資料綜合分析與處理環境。當然,它需要藉助於支援 MPP 技術的關聯式資料庫系統來遮蔽節點之間負載平衡與排程的複雜性。另外,這種並行處理能力也與節點網際網路絡有很大的關係。顯然,適應於資料倉儲環境的 MPP 伺服器,其節點網際網路絡的 I/O 效能應該非常突出,才能充分發揮整個系統的效能。
4.3 NUMA 、 MPP 、 SMP 之間效能的區別
NUMA的節點互聯機制是在同一個物理伺服器內部實現的,當某個CPU需要進行遠地記憶體訪問時,它必須等待,這也是NUMA伺服器無法實現CPU增加時效能線性擴充套件。
MPP的節點互聯機制是在不同的SMP伺服器外部透過I/O實現的,每個節點只訪問本地記憶體和儲存,節點之間的資訊互動與節點本身的處理是並行進行的。因此MPP在增加節點時效能基本上可以實現線性擴充套件。
SMP所有的CPU資源是共享的,因此完全實現線性擴充套件。
4.4 NUMA 、MPP、SMP之間擴充套件的區別
NUMA理論上可以無限擴充套件,目前技術比較成熟的能夠支援上百個CPU進行擴充套件。如HP的SUPERDOME。
MPP理論上也可以實現無限擴充套件,目前技術比較成熟的能夠支援512個節點,數千個CPU進行擴充套件。
SMP擴充套件能力很差,目前2個到4個CPU的利用率最好,但是IBM的BOOK技術,能夠將CPU擴充套件到8個。
MPP是由多個SMP構成,多個SMP伺服器透過一定的節點網際網路絡進行連線,協同工作,完成相同的任務。
4.5 MPP 和 SMP 、 NUMA 應用之間的區別
MPP 的優勢:
MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。由於MPP系統因為要在不同處理單元之間傳送資訊,在通訊時間少的時候,那MPP系統可以充分發揮資源的優勢,達到高效率。也就是說:操作相互之間沒有什麼關係,處理單元之間需要進行的通訊比較少,那採用MPP系統就要好。因此, MPP 系統在決策支援和資料探勘方面顯示了優勢。
SMP 的優勢:
MPP系統因為要在不同處理單元之間傳送資訊,所以它的效率要比SMP要差一點。在通訊時間多的時候,那MPP系統可以充分發揮資源的優勢。 因此當前使用的 OTLP 程式中,使用者訪問一箇中心資料庫,如果採用 SMP 系統結構,它的效率要比採用 MPP 結構要快得多。
NUMA 架構的優勢:
NUMA架構來看,它可以在一個物理伺服器內整合許多CPU,使系統具有較高的事務處理能力,由於遠地記憶體訪問時延遠長於本地記憶體訪問,因此需要儘量減少不同CPU模組之間的資料互動。顯然,NUMA架構更適用於OLTP事務處理環境,當用於資料倉儲環境時,由於大量複雜的資料處理必然導致大量的資料互動,將使CPU的利用率大大降低。