集羣的可擴展性及其分佈式體系結構(2) 體系結構比較與可擴展性研究(上)

這篇文章是《集羣的可擴展性及其分佈式體系結構》的第二篇,主要介紹集羣計算中可擴展性的主要意義。本文描述了集羣常見的幾類體系結構和考量集羣時的出發點。通過圖表的形式,討論集羣系統中幾大重要因素之間的相互關係。同時,作爲對比,列出一些和集羣在體系結構上具有可比性的一些系統如Mpp,SMP等,通過比較,使讀者能夠掌握集羣在體系結構發展中的地位和意義。

體系結構的發展

過去的幾十年裏,計算機的發展經歷了幾代變更。從第一代的真空電子管和繼電器存儲器計算機到近年以ULSI(超大規模集成電路)爲代表的第五代計算機。計算機系統的速度在不斷提高,造價和體積卻不斷減小。系統軟件的發展雖然沒有硬件系統那麼令人矚目,卻也從彙編、機器語言的荒莽時代逐漸步入以跨平臺、可擴展、適合分佈式計算的第五代編程語言體系。其最主要的代表就是Java,而最有前景的操作系統就是Linux和開放源碼運動。今後的計算機系統將是具有更強的能力,更友好的操作界面並藉助互聯網的分佈式超級計算平臺。

過去,人們普遍認爲計算機性能的提高主要是因爲生產出了更快更有效的處理器。這種觀念受到了並行處理概念的挑戰。分而治之的方法使得聚集(Cluster 的由來)的計算系統能夠實現令人咂舌的計算能力。近年來昂貴而特製的並行超級計算機向集羣的轉換趨勢越來越強,而高性能工作站標準化組件和網絡部件的快速發展成爲促成這種轉換的驅動因素。

並行與可擴展

現代計算機的一個公共特點是並行性。不論是計算機的體系結構還是微處理器的發展方向來看,並行性逐漸體現在每一個可能見到的每一個角落。

x86體系微處理器的發展就是並行技術發展的一個很好的體現:多流水線、超標量設計都是提高CPU的並行能力的關鍵。而在集羣的體系結構中,更是充分利用了並行性這一特點。我們創建和使用並行計算機主要是爲了解決單處理器的速度瓶頸,利用並行技術來提高應用性能(通過優化串行程序)。

另一個角度來看,因爲並行技術的發展,也大大促進了計算機系統的可擴展性,同時在單位成本控制上也有了可喜的進步,使得基於集羣的並行計算系統的性能價格比明顯優於獨立的計算機系統,比如小型機、和一般的大型主機

何謂可擴展性

如果能夠通過增加資源以滿足不斷增長的對性能和功能的要求,或者是通過縮減資源,以降低成本,從涵蓋硬件和軟件的角度上講,我們可以把符合這種特性的計算機系統稱作是可擴展的。

可擴展並不是僅僅意味着體積的擴大、數量的增加,它也涵蓋了縮減能力。目前日益多見的嵌入式系統就是很好的一個例子,它既是硬件體積、計算能力的縮減,又是軟件的縮減(許多嵌入式操作系統往往通過剪裁而來)。因此,看待擴展問題需要從下面的幾個觀點入手:

    * 功能性和性能:一個可擴展的系統應該能夠提供更好的性能、更多的功能。系統的總體計算能力應該隨着資源的增加而按照比例增展。理想的情況是,增長的速度是線性的。
    * 成本伸縮:另一方面講,系統擴展的代價必須是合理的。粗略的標準是,成本的增加應該小於n或者nlogn的一個線性係數。但是結果往往不盡人意。因爲在擴展計算系統的時候,不僅僅要做性能的考慮,而且還要考慮系統的可用性、穩定性等等,這些因素都會導致系統的總成本上升。
    * 可兼容性:包括硬件、系統軟件和應用軟件在內的組成部分。我們希望用戶原有的程序在不作變動或只作少量的變動後仍可以使用,要求用戶購買一套全新的操作系統和重新開發他們的應用代碼是不合適的。從部件上看,伸縮通常只涉及到系統的一部分,如果添加更多的處理器或者是將現有的處理器升級到新的一代。新增加的部分應能夠與系統的其餘部分相兼容。這就是說,原有的存儲器、磁盤、互聯設備以及外設仍然可以使用。

可擴展系統的意義

研究可擴展的系統,其主要動機在於尋求一個靈活的、成本可伸縮的計算系統架構方案。如這裏的圖所展示的,計算機種類在由銷售量及性能和成本組成的座標系統中,形成一座金字塔。金字塔的頂部是那些能夠提供萬億次以上性能的超級系統,他們把許多資源集成在一個看上去"單一"的系統中,採用頂尖的技術構造並行系統,具有最高的性能。

計算機分類金字塔
fig1.gif
2008-10-24 10:34 上傳
下載附件 (3.18 KB)


可擴展性通過它所提倡的公共的開放系統結構,包括了所有的計算機類。研究集羣的可擴展體系結構,目的就是尋求一種可擴展的框架技術,使得上圖中大型系統的高端技術能夠不斷應用於中低端的產品中,從而不斷提高計算機的性能價格比水平。

像早期的Cray巨型機,當時在超級計算領域具有無可匹敵的地位,但是隨着可擴展並行技術和商品化組件的發展,當年巨型機的地位逐漸被並行計算集羣代替。由於大部分集羣都採用了標準化的商品組件,一方面可以充分享受部件性能的增長(CPU、網絡、磁盤容量等都以近似摩爾定律的速度增長);另一方面,在構架上也具有很強的靈活性。比起專有的並行平臺,以下的好處就顯而易見了:

    * 因爲單個工作站越來越強大,集羣節點的計算能力也日益增強。而個人用戶對於工作站的使用率往往很低,這樣就有大量的閒置計算資源可以利用。
    * 能夠滿足對不同性能和成本的要求。比如,用戶可以在起初購買一個低端系統。當他對性能地要求增加時,他可以擴展此係統,而原有的軟件和硬件部分仍然可以使用,充分保護了他原有的投資。
    * 高端機可以使用低端機的部件以降低成本。例如,由於批量大、PC機使用的是低價的、市場銷售的標準件。因爲採用的是可擴展系統結構,故超級計算機也能使用這些部件,從而可以降低系統成本。事實上,使用商品化部件:處理器、存儲芯片、磁盤、I/O控制器等,已經成爲高性能系統開發的趨勢。
    * 如果成本有效性能夠隨着生產技術的改進而增加的話,則爲高端系統而開發的頂尖技術可能最終向金字塔下方移動,從而改進低端系統的性能。

可擴展性的三個考量

可擴展性其本身是一個多方面的概念集合。包括了對計算資源可擴展的考量、對應用規模可擴展的考慮以及對技術換代可擴展三個方面的考慮。

一、資源的可擴展性

考慮資源可擴展性之前,首先要確定資源的真實含義是什麼。

我們一般的都會把計算機硬件設備當作資源,比如CPU的數量、存儲設備、IO設備等等。但從廣義的角度理解,資源還應該包括軟件,比如操作系統、應用軟件等等。甚至,在日益複雜的互聯網應用時代,資源的概念延伸到了用戶需求的層次上。

因此對於提供服務的計算機系統來說,其支持爲用戶提供服務的一切軟、硬件和其他配套的結構,都可以看作資源。因此如果我們從資源角度來考量可擴展性,就可以把目標定義爲:通過增加機器規模(既處理器數量)、投入更多的存儲部件、升級軟件甚至是改變系統的體系結構,從而使系統具有更好的性能或者功能。

擴展很容易讓人聯想到加強硬件設備,其中最明顯的方法就是增加機器的處理器的數量。但是不是所有的機器都具備相同的可擴展能力。一個x86的SMP系統最多就只能擴展到64個CPU,;而一臺IBM的SP2卻可以擴展到最多512個CPU。

因此,擴大規模並不是簡單的增加部件的數量就能解決問題的。通常,隨着CPU數量的增加,包括RAM、總線帶寬、網絡等子系統也需要隨之增加。所以,我們常常看到,由於資源擴展所帶來的技術上的障礙,僅僅是增加幾個CPU或者其他部件,所花費的代價卻遠遠高於增加的那些CPU本身的價值。那麼,謹慎考慮擴展規模所帶來的性能價格比的增加,如何有效的利用更大並行性就是非常必要的了。這時,通過RAM的數量,擴展I/O速度,升級網絡速度或者改造網絡拓撲結構反而能帶來意想不到的效果。

另一方面,把軟件也看作系統資源的話,就要涵蓋很廣的範圍:可以升級新版本的操作系統,使他具有更多功能,支持更多線程、更大的地址空間,有更高效的內核,能夠識別更多的新硬件;也可以安裝功能強大的中間件以擴展系統的特殊能力;還可以利用運行庫來支持諸如消息傳遞、分佈式事務處理等特性。擴展的方法不一而足,也是在研究集羣技術時主要考慮的問題。

二、應用的可擴展性

要充分擴展集羣計算系統的能力,不僅資源是要可擴展的,應用程序也必須是可擴展的。這就是說,相同程序在一個可擴展系統上運行時,其性能隨規模的擴大成正比例的改進。兩個重要的考量是機器規模的可擴展性和問題規模的可擴展性。

首先從硬件的角度來考慮機器規模可擴展性這個問題。如果增加處理機的數量,我們系統的性能也會隨之成比例地提高嗎?假設有一個數據庫服務器,處理銀行每天幾十萬的交易和1000萬個用戶的存款數據庫,這樣的情況下每秒鐘該系統能夠處理1000個在線事務。如果系統的處理器增加爲原來的兩倍,其他前提條件不變,它能夠提升到每秒2000個在線事務的處理速度嗎?如果可以或者是接近的話,我們應當慶幸,該系統具有良好的可擴展性。當然,除了增加處理器的數量,還可以是存儲器或者I/O設備等等。

而考慮問題規模可擴展性這個角度則是以硬件環境的相對不變爲基礎的。如果僅僅是改變應用環境的工作負載,求解更大問題時,系統的性能表現又會如何。仍然以上述的情況爲例,如果數據庫裏的儲戶數據達到1億個,每日處理的交易再上升一個數量級,那系統還能夠保持每秒1000TPS的性能嗎?

在研究應用可擴展問題的時候,我們將會發現:應用的限制最終無法通過簡單的增加機器資源的方法加以突破。只有對應用程序本身和系統體系結構進行重大修改後,才能使用更多處理器和處理更多的問題。

我們應該將在一臺特定機器上求解一個問題作爲組合來加以考慮。有時將這種應用 / 機器對視爲一個系統。如果更換應用或者更換軟、硬件系統的體系結構,考慮可擴展的標準和角度就有很大的不同。

應用可擴展性不只依賴於處理器規模和問題規模。它也依賴於機器的存儲器容量、I/O能力、以及通信能力。所有這些因素一起影響着可擴展性。我們將在今後的篇章討論這些問題。

總的來說,考慮應用可擴展問題,需要從更加廣義的角度上看,而不僅僅是上述的兩個方面。那麼我們就來看一下可擴展的另一個重要的方面--技術換代的可擴展性。

三、技術換代的可擴展性

技術換代可擴展性是局部概念而非全局概念。這裏主要是指計算機系統能夠隨着技術的變更、換代,在保持原有的可用性基礎上,通過"升級"部件的手段提高系統的性能或者功能。這裏的升級可能是我們常見的更換更高主頻的CPU,也可能是增加系統的內存數量,還可能是升級操作系統到更新的版本。

其實這種事我們在WinTel時代常幹,時不時換一下CPU或者內存什麼的,但是不影響原來的系統應用,而且往往性能有很大的提升。

總的看來,計算機系統中CPU的發展速度最快,而內存的速度和單位容量的提升就慢一些,硬盤就會更慢(受到機械的限制),而最慢的就數程序設計語言了,到現在爲止,我們都還在用類C編寫關鍵的大型系統特別是集羣系統應用。

並行系統的空間也是在擴展集羣系統時的一個重要考量因素。新的設備是否能夠容入原有的機箱內,擴展的需求是否能通過現有的互聯技術得到滿足,跨地域分佈式技術的發展是否能給我們帶來更大更強的系統,這些問題都纏繞在技術換代的思考過程中。

並行技術發展初期,系統大都是同構的,像具有完全一致內核的MPP系統,而集羣也都是先在同構的框架下實現。而爲了更好利用給各類的異構計算資源,勢必需要充分支持異構的並行集羣。那麼,異構可擴展性這一性質就反映了一個系統通過集成由不同設計者和廠商所提供的硬件和軟件部分而進行擴展的能力。

異構擴展提倡使用具有標準、開放系統結構和接口的部件。在軟件領域,我們也將它稱爲可移植性。追求異構可擴展性的代價是巨大的。除了藉助標準協議和通訊平臺消除不同硬件系統之間的巨大差異,還要花費更多的資源處理現有應用的平滑移植。早期的COBOL應用在進行移植的時候就遇到很多問題,以至於現有的系統中還存留大量的這種老式語言,也許Java集羣出現會是解決這一問題的一個契機。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章