誰纔是真正的Scale-Out?

本段文字摘自即將於4月初出版的《大話存儲2》,轉載請註明出處與作者

IBM自從亮相了XIV之後,EMC接着出了V-Max,接着HDS也推出了VSP。這三者都宣稱自己是Scale-Out架構,在業界也引發了一些討論,有人認爲只有XIV纔是真正的Scale-Out,而V-Max與VSP則不算Scale-Out。對於這個問題,我是這麼看的。
       大家知道服務器多CPU架構變遷過程,一開始是單CPU,後來發展到雙CPU或者多CPU的SMP架構,也就是多CPU共享相同的內存、總線、操作系統等資源,每個CPU訪問全局內存任何地址耗費的時間都是相等的。還有一類AMP架構,即不同CPU做的事情是不同的。但是由於共享訪問衝突,SMP架構擴展性-效率曲線已經達到瓶頸。爲了消進一步提高CPU數量的同時保證效率,NUMA架構出現了,也就是將多個SMP進行鬆一點的耦合,多個SMP之間通過CrossBar Switch高速交換矩陣互聯,每個SMP都有各自自己的內存,一個SMP內部的CPU訪問自己的內存時與之前沒什麼兩樣,但是要訪問其他SMP處的內存,就需要走交換矩陣,導致延遲增加,所以,NUMA通過犧牲了內存訪問的時延來達到更高的擴展性,比如可以將數百個CPU組成NUMA架構。SMP和NUMA架構對於軟件程序方面的影響不大,同一臺主機內都使用單一操作系統。但是由於NUMA訪問遠端內存時的時延問題,導致NUMA架構下的效率也不能隨着CPU數量的增加而線性增長,只是比SMP要好罷了。此時,MPP架構就出現了。MPP可以說已經與CPU已經關係不大了,MPP說白了就是將多臺獨立的主機使用外部網絡來組成一個集羣,顯然MPP架構下,每個節點都有各自的CPU、內存、IO總線和操作系統,屬於最送的耦合,而且運行在MPP集羣中的軟件程序的架構也需要相應改變,變爲大範圍並行化,並儘量避免節點之間的消息傳遞。由於軟件程序發生了變化,那麼MPP的效率隨節點數量的增長就可以呈線性關係了。其實,如果在NUMA架構下,軟件也可以避免儘量少讀取遠端內存的話,那麼NUMA效率也會線性增長,但是NUMA架構下的操作系統仍然是同一個,內存仍然是全局均勻的,而程序架構又儘量保持不變,那麼就不可避免的時不時訪問遠端內存了。MPP相當於把內存強制分開,把操 作系統強制分開,把程序架構也強制改變從而保持海量計算下的效率線性增長。
         那麼再說回到存儲系統。與服務器CPU架構演進相同,可以把存儲系統的控制器類比爲CPU,而後端磁盤櫃類比爲一條條的內存。一開始的單控,後來的雙控互備份(傳統雙控存儲),一直到雙控並行處理(目前只有HDS的AMS2000存儲系統爲雙控並行架構),到這個階段就類似於AMP(雙控互備)和SMP(雙控並行)架構,後來則有多控並行對稱處理架構,Oracle的RAC集羣也可以視作一種多點SMP,各種共享底層存儲的集羣文件系統及基於這種文件系統所構建的存儲系統也屬於多點對稱SMP。同屬多點對稱SMP架構的還有華爲賽門鐵克的VIS以及S8100和N8000存儲系統。
        同樣,由SMP到NUMA的過度也出現在了存儲系統中,比如EMC的V-Max,相當於多個SMP(一對控制器組成一個Director等價於一個SMP矩陣)利用高速交換矩陣(RapidIO)來共享訪問每個SMP上掌管的內存。
         由NUMA到MPP的過度一樣也出現在存儲系統中,IBM的XIV就屬於鬆耦合MPP架構,多個節點之間徹底鬆耦合,各自都有各自的CPU/內存/總線/磁盤/IO接口,使用外部以太網交換機,使用TCPIP協議互相通信。而HDS的VSP則更像是一個緊耦合的MPP,MPP對軟件架構變化很大,所以傳統存儲廠商很難將之前的架構演變到MPP上來。另外一種屬於MPP架構的存儲系統就是各種分佈式文件系統(注意,並非共享存儲的集羣文件系統)。
        至於誰纔是真正的Scale-Out,這個是個無定論的問題了。SMP/NUMA/MPP其實都算Scale-Out,只不過程度和形態都不同罷了。有人說MPP纔是真正的Scale-Out,可能是基於MPP流行的原因。但是不能一概而論。MPP架構的存儲,例如XIV,由於特定場景下,節點之間通信量過多,反而效率很差(比如多流大塊連續地址IO);而某些特定場景下,節點間通信量很少,則表現出線性增長的性能(比如小塊高隨機IO)。這也可以類比爲將一個程序並行分解成多個執行顆粒(類比爲高隨機IO),顆粒間的關聯性越少,則節點間通信量就越少,則並行執行的效率越高,一個道理,所以MPP自身爲Share-Nothing架構,那麼運行在它上面的程序顆粒之間最好也Share-Nothing。
      SMP、NUMA和MPP各有各的好處,也各有各的應用場景。比如SMP適用於擴展性要求不太高而又不想對程序改變太大的場景,而MPP則使用海量數據下的高擴展性需求場景,需要對程序有較大改變才能獲得良好性能。同樣對於存儲也是這樣,比如一旦決定用MPP架構的存儲,那麼就需要面對多流大塊連續IO場景下性能不佳以及效率-擴展曲線的線性不佳這2個事實。或者你去修改上層應用,將大塊連續IO改爲高隨機IO,而這顯然荒唐。並且爲了適應存儲去修改應用,這一般是不可能被接受的。而MPP架構卻被廣泛用於互聯網運營商的底層Key-Value分佈式數據庫,其高隨機小塊讀訪問場景下能獲得巨量的性能以及線性的效率-擴展曲線。

本段文字摘自即將於4月初出版的《大話存儲2》,轉載請註明出處與作者


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章