集羣的可擴展性及其分佈式體系結構(3)

這篇文章是《集羣的可擴展性及其分佈式體系結構》的第三篇。主要介紹集羣的軟硬件結構的層次結構模型、主要的分類方法和決定集羣設計的四大要素:HA、SSI、作業管理和通信。筆者旨在通過幾個不同切入點的分析,構築集羣的抽象模型,使讀者在現實中分析、設計集羣時有所參考。

分層模型

首先,我們先來看一下組成集羣計算機系統主要部件有哪些:

    * 多個高性能的計算機(PC、工作站或者SMP服務器)
    * 優秀的操作系統(分層結構或者基於微內核)
    * 高性能網絡開關(千兆位以太網或者類似Myrinet的專有開關網絡)
    * 網絡接口卡NIC
    * 快速通訊協議和服務(如活動消息和快速消息)
    * 集羣中間件(單一系統映象和可用性支持)
          o 硬件,如DEC的內存通道、硬件DSM和SMP技術
          o 操作系統內核或者粘合層,如MC和GLUnix
          o 應用程序和子系統
                + 應用程序,系統管理工具和電子表格
                + 實時系統,軟件DSM和並行文件系統
                + 資源管理器和調度軟件,如LSF負載均衡和CODINE分佈式網絡環境的計算
    * 並行編程環境和工具,編譯器、PVM、MPI
    * 應用程序:串行和並行

這些組成部件並非在每一類集羣系統中都是必須的,多數系統往往只實現其中的幾種,主要是根據具體的需求來定。但如果以參考模型的角度來看,對於理解各個部件所處的位置及其作用來說,建立層次結構描述有助於從整體瞭解集羣。
1.gif
2008-10-24 11:00 上傳
下載附件 (3.11 KB)


這裏我們發現,集羣的組成涵蓋了軟件到硬件的幾乎每一個方面。如果把集羣想象成類似OSI互聯參考模型一樣具有層次結構的話,那麼從底層到頂層,覆蓋了現有的硬件構造、網絡設計、操作系統、中間件以及應用環境等所有層次的技術面。那麼,在每一層選擇什麼樣的技術就異顯重要。採用現有的成熟的產品技術,可以大大降低構造集羣的技術和資金風險,而選擇適當的層次和技術點作爲突破,又往往是解決性能、安全或者其他特殊需求的關鍵。

關於集羣的設計目的,好處我們在前面已經詳盡敘述過,這裏不再討論。簡單的說,相對於較低的費用,集羣要具備以下的特點:

    * 高性能
    * 可擴展性
    * 高吞吐量
    * 易用性
    * 高可用性

集羣的分類方式

其實,往往現實中的產品會是某幾個特性的綜合。對於這些特性,從不同的參考因素來考慮,集羣可以有以下的集中分類方式:

2.gif
2008-10-24 11:00 上傳
下載附件 (3.52 KB)

集羣的分類

應用目的

我在集羣的研究分類時,根據集羣的用途通常把集羣分爲三種:

    * 強調計算能力的高性能計算(HP)集羣,大名鼎鼎的Beawulf集羣就是極好的例子。
    * 強調可用性的HA商用集羣,開放源碼社區中的Mon項目和REDHAT的PIRANAHA都是價廉物美的HA集羣方案。當然,也別忘了SP2、Trucluster、Solaris MC這些老字號。
    * 既有HA的能力,又可以實現HP的集羣,強調高吞吐量的綜合型集羣,比如MOSIX,LVS。

應用總是在變化的。最早集羣只爲解決計算問題而誕生,隨着需求的發展纔出現HA商用機羣,以及後來的綜合性質較強的高吞吐系統,而將來也一定會有更新種類的集羣出現。

節點歸屬

如果從節點的歸屬情況看,可以分爲:專用集羣和"兼職"集羣(也有叫做獨用型和企業型)。

專用型集羣往往用於超級計算任務或者用廉價PC組合成大型工作站,具有以下特點:

    * 一般安裝在機房的機架上
    * 多數由同類型結點同構地組合而成
    * 一般通過一個前端進行訪問

該集羣主要是爲了取代傳統的主機或者超級計算機。可以把專用型集羣當作單個計算機那樣來安裝、使用和管理。允許多用戶登錄到集羣上進行交互式作業或批作業。可以大大提高吞吐量,以及縮短響應時間。

構造"兼職"集羣主要是爲了節省成本並充分利用結點的空閒資源,特點如下:

    * 結點必須是完整的SMP、工作站或者PC,連接着所有必須的外圍設備
    * 地理上結點是分佈的,不必處在同一個空間內
    * 結點可以有多個"屬主"(也就是擁有者)。集羣管理者對結點的管理權限是有限的。而且,所有者的本地任務優先級往往高於集羣的任務
    * 集羣大多是異構的,互聯方式以標準通信網絡爲基礎。

從上面的比較我們不難發現,使用節點資源的方式導致了兩種不同歸屬集羣的出現。專有集羣中,特定個體並不擁有一個工作站,或者是一個節點,資源是集羣範圍內共享的,並行計算可以在整個集羣上執行。"兼職"集羣中個人擁有工作站,應用程序靠"竊取"CPU時間來進行運算。導致這種情況得主要原因是,大多數的工作站的CPU時間都是閒置,即使在高峯期也很少超過50%。我們也把在這種非專用的動態變化的集羣上運行的並行程序叫做自適應並行計算。有些文章中的高吞吐集羣也屬於這一類。

組裝方式

組裝方式主要取決於互聯技術和計算機空間技術。在鬆耦合的集羣中,節點一般是相對獨立的PC或者工作站,擁有完整的外圍設備:鍵盤、鼠標、顯示器。彼此通過LAN連接,距離上可以是在一個機房,也可以跨樓宇,甚至可以擴展到一個園區(比如校園網)的範圍。隨着帶寬技術的發展,現在的鬆耦合集羣已經可以跨地域範圍進行資源整合。例如在網絡負載均衡的集羣環境中,就有不少解決方案是跨越幾個城市進行集羣流量平衡的,像網易的站點服務器,263的郵件服務器,可以在不同的城市之間做負載均衡。而對外卻能表現出嚴格的"一致"性,形成統一的資源。

緊耦合集羣往往從空間利用率、有效帶寬等角度考慮集羣的互聯。大家都知道,某種程度上,網路的距離和帶寬是成反比的。越是短距離的技術越能實現更高的帶寬。因此,就有專用集羣往往採用了高帶寬、低延時的通信網絡,並將節點不必要的外圍設備去掉,僅僅保留必要的主機(CPU、內存、硬盤),安置在一個或者彼此靠近的機架中。這樣,不僅可以充分利用短距離通訊的有效帶寬,例如千兆位以太網,甚至是萬兆位以太網;還可以大大節省節點佔用的空間,同時也方便集中管理。在緊耦合技術發展中,甚至出現了在一個機箱內作集羣的產品――Blade Cluster Server 又稱 刀片服務器。

刀片服務器是一種HAHD(High Availability High Density,高可用高密度)的低成本服務器平臺,是專門爲特殊應用行業和高密度計算機環境設計的。其中每一塊"刀片"實際上就是一塊增強的系統主板。它們可以通過本地硬盤啓動自己的操作系統,如Windows NT/2000、Linux、Solaris等等,類似於一個個獨立的服務器節點。在這種模式下,每一個主板運行自己的系統,服務於指定的不同用戶羣,相互之間沒有關聯。不過可以用SSI軟件將這些主板集合成一個單一的集羣映像。

在集羣模式下,所有的主板可以連接起來提供高速的背板帶寬,可以共享資源,爲相同的用戶羣服務。在集羣中插入新的"刀片",可以提高整體性能。而由於每塊" 刀片"都是熱插拔的,就像拔插顯卡一樣方便,所以系統可以輕鬆地進行替換,並且將維護時間減少到最小。這種集羣在方便管理的同時,也節約了機房機架的寶貴空間,還能充分利用短距離的高性能通信技術,可謂一舉多得。

這是兩種典型的集羣組裝方式。左邊的鬆耦合集羣安裝在一個局域網範圍內,通常由一個GB級以太網覆蓋;右邊的屬於緊耦合集羣,安裝在一個機架中,能夠使用更高帶寬的通信技術,而且有很高的電氣結合度,至於刀片服務器恐怕就要更緊湊一些了。另外我們可以看出,這兩個集羣應該都是專用型集羣。
3.jpg
2008-10-24 11:00 上傳
下載附件 (18.59 KB)


控制方式

控制分爲集中控制和分散控制兩種。採用集中控制的集羣大多是緊耦合集羣,出於空間和管理便利的考慮,允許管理員集中控制所有的結點,其控制界面可以是字符終端也可以是圖形GUI。用於並行計算的Beowulf集羣採用的就是集中控制的方式,管理員通過shell工具或者X接口操縱主服務器,而具體的計算結點是不可直接訪問的。

對於鬆耦合的集羣,採用分散和集中控制混合的方法。由於在鬆耦合結構上集中控制需要特殊的系統中間層支持,因此實現的難度較大。而成熟的管理協議如 SNMP等就可用於改環境下的資源分配和調度。另外,在鬆耦合的非專用集羣("兼職"集羣)中,日常的控制仍由各自的"屬主"進行,而閒餘的計算時間則交給控制器。

同構性

同構是相對的,完全的同構只是理論模型的理想。上一章節我們提到,各類分佈式系統中,SMP的同構性最好,直接反映在單一系統映像這個重要的指標上。大多數情況是,集羣結點採用相同的操作系統或者兼容的硬件平臺,以儘可能保證二進制代碼的可移植性。比如Beowulf集羣中,集羣結點和服務器採用的都是 Linux核心操作系統,配合標準的PVM和MPI2接口,使得計算任務能夠跨越各結點的地址空間,代碼和數據表達的一致使之在結點之間能夠平滑遷移。

異構特性在集羣的發展中日益重要。通過增強的OS擴展API或者中間件層軟件,任務可以在異構的結點之間自由移動,實現某種層次上的SSI能力。在負載均衡環境和可用性支持中,一定程度的SSI是必須的。但是,由於無法對二進制的代碼和數據結構兼容,必然採用性能更低的中間代碼、解釋程序或者是擴展動態鏈接庫來實現異構上的"同構",JAVA語言,PVM並行庫都在這一領域有着很好的應用。隨着WebService和XML技術的發展,將來還有可能在多種不同的編程語言、運行環境中實現令人滿意的SSI能力。

安全性

安全性取決於集羣結點與外界的互聯程度。如果集羣的結點不論是物理連接還是IP地址,都是暴露在外的,集羣內部的通信完全沒有經過保護,我們認爲這樣的集羣系統不具備安全性。黑客或者惡意用戶的破壞都會造成集羣的不可用。不過這樣的集羣由於在規劃上不需考慮過多,比較容易實施。

如果將集羣結點通過防火牆等保護技術隱蔽起來,使集羣內部的結點無法從外部非法訪問,或者加強結點操作系統本身的安全能力,那麼集羣系統就具備一定的安全性。因爲要考慮安全環境的諸多因素,也必然要增加構造系統的難度。目前,大多數商業集羣產品要麼使用專有的內部通信協議來實現高效性和安全性,要麼與現有的安全產品進行集成,在系統或者網絡協議一層擴展安全功能。

集羣設計首要考慮的幾大問題

前面講的是對於集羣幾類主流的歸類方法。可是當你考慮將你的集羣作成什麼樣的系統,讓它具備什麼功能,能夠滿足什麼需求的時候,這些歸類方法卻不是那麼重要。在使用或者構造一個集羣之前,首先根據應用的需求,要重點分析以下的幾個主要問題,這些問題並非互相獨立,而是彼此互相影響的綜合因素。

可用性支持

即我們通常所說的HA(High Availability)。集羣通過冗餘的處理器、存儲器、磁盤、I/O設備、網絡及操作系統映像等等,提供一種保持成本有效的高可用性。爲了挖掘這些多餘資源的潛力,需要使用一些技術來平滑可用性。

從關鍵性事務/任務計算的角度看,例如商用服務器或者重要的數據服務器,集羣是一組可以作爲單一系統管理的獨立服務器配置,它能夠共享名字空間,並且設計成可以容忍結點失效以及支持用戶透明訪問的計算資源,其重點不是性能而是高可用性。

對於HA在不同的應用領域有不同的作法。在OLTP(聯機事務處理)中,通常使用聯機熱備份的方式來解決容錯問題。這是冗餘的一種體現,概念上也非常簡單:在主系統中的軟硬件失效時,重要的應用程序和正在處理的任務可以轉移到"從"服務器上,這樣可以避免故障並保證服務器整體可用性。該過程也叫做 failover(故障屏蔽),雖然會暫時降低服務器的性能,但充分保證了關鍵任務的正常。這種冗餘技術與完全覆蓋錯誤部件的組件級冗餘技術不同,它採用的是面向集羣的系統級冗餘,而組件級冗餘爲了保證連續服務,往往採用電氣手段進行硬件上的替換操作。

系統級容錯的難點在與進程與事務遷移,要保證在線事務也能夠實時容錯,在處理聯機事務的這一層次上,就有必要進行進程或者事務遷移的工作。在數據庫層、 OS層或者是中間件層,都有不同的廠商針對性的產品來實現。僅我所知的Oracle的數據庫產品,IBM的操作系統和中間件產品或者是其他第三方的組件,都有對HA不同程度的實現。

在設計健壯、高可用性的系統時,以下3項要同時考慮:可靠性、可用性及可維護性(簡稱RAS)。其中可用性標準最令人感興趣,它結合了可靠性和可維護性兩個概念:

    * 可靠性:測量在沒有故障的情況一個系統能工作多長時間。
    * 可用性:一個系統可以爲用戶所使用時間的百分比,即正常運行時間的百分比。
    * 可維護性:指系統是否易於維護,包括硬件和軟件維護、維修和升級等。

系統的可靠性可表示爲發生故障的平均時間MTTF(Mean Time to Failure),即在系統(或系統的一個部件)發生故障前正常運行的平均時間。可維護性指標爲直到修復的平均時間MTTR(Mean Time to Repair),即用於修復系統和在修復後將它恢復到工作狀態所用的平均時間。系統的可用性定義爲:

可用性=MTTF / (MTTF+MTTR)

提高系統的可用性基本上有兩種方法:增加MTTF或減少MTTR。增加MTTF要求增加系統的可靠性。計算機工業界千方百計的製造可靠性系統,如今工作站的MTTF範圍從幾百小時到幾千小時。然而,再進一步提高MTTF非常難且花費很大。

集羣可以通過減少系統的MTTR以獲得可用性,多結點集羣的MTTF低於一個工作站,因此集羣可靠性低,比工作站發生故障的可能性要大。然而,如果能迅速處理這些故障就可提高更高的可用性。高可用就是能夠使集羣發生故障是能夠快速、平滑切換,保證系統連續運行的一種技術。

單一系統映像

SSI是集羣系統必備的能力。並不是指在一個SMP或者一個工作站中,僅有唯一的一份系統映像駐留在內存,而是指從使用者的感覺上看,是一個獨立的單一的計算機系統。那麼,這也就牽涉到使用者是誰,使用目的和需求是什麼,從哪一個層面上去使用該系統等問題。SSI的基本特徵大致有:

    * 單一的系統:理想的情況是,整個集羣看上去就是一個多處理機,好像一臺巨大的SMP工作站。這一點和分佈式系統有所不同。分佈式環境中,節點的利用基本屬於上述的"兼職"狀態,參與並行任務主要通過中心調度器進行,彼此之間更像是一種"協同",而非"統一";同時集羣作業又不能干擾本地作業的正常執行。因此,在"單一"能力的表象上相對較弱,甚至不能形成真正的SSI能力。
    * 單一的控制入口:邏輯上,對集羣系統的管理控制應該是在一個明確的位置進行。所有的管理操作行爲都從該控制入口(比如一臺專用的監控終端)進入,通過任務隊列的排隊,請求集羣範圍內的軟硬件資源並適時執行。單一控制入口在設計集羣的時候常常被認爲不是那麼重要。其實,缺乏單一控制能力的集羣系統只會使得管理員疲於奔命,忙碌於節點的維護和作業調度的手工操作上,使整個集羣成爲一個"半自動"的東西。
    * 對稱能力:類似上一點,如果集羣允許用戶從其中不同的結點登入的話,要求用戶獲得的服務能力也必須相同,沒有任何"岐視"。因此,除了和權限、管理、安全等敏感問題有關的功能之外,所有的功能和服務都是對等的。
    * 資源訪問透明:應該說,這一點是SSI能力的精華所在。在使用集羣的時候,用戶並不知道爲其服務的服務器具體位置,所有的操作都感覺是在本地進行的。儘管資源透明的背後或許是一定程度的性能降低,但是從方便用戶的角度看,無需處理繁雜的境像點、卷、域等定位的概念,僅有一個根,一個進程空間,一個ip地址,一個IO資源,那必要的性能損失還是划算的。

我們不難發現,上述的兩點關於HA和SSI的簡單敘述其實隱含着一些線索,將這兩個看似不相干的特性聯繫在一起。如果沒有一定的SSI能力,集羣也就不稱之爲集羣了。即使是最簡單的聯機熱備份系統,不管是在正常狀態還是進行故障接管的時候,所體現的系統"外形"(即從外部用戶看來),既是單一的系統(雖然有兩臺機器),又能提供透明的平滑的服務。沒有在OS或者更高層實現SSI的資源統一,是無法做到這種的高可用能力的。可以說,SSI是集羣技術的基石,不僅爲高可用的需要所服務,也爲進一步的性能提高工作,因此,在設計集羣的時候,首先要先進行的就是SSI的考慮。

作業管理

作業管理主要涉及任務派發、負載均衡和並行處理等功能。與傳統工作站或PC結點不高的利用率相比,集羣要達到系統的高利用率,作業管理軟件必須提供這些功能功能。那麼,在作業管理具體實現中,下面這些概念就顯得非常重要了:什麼是資源,什麼是作業,作業有幾種,如何衡量負載(Load),作業的運行包含哪些狀態,每個狀態又包含那些元素,等等等等,這一切都需要在集羣系統中定義並加以體現。作業管理系統設計的好壞,直接關係到集羣性能的高低。設計優良的作業管理和調度系統,其可擴展性要好於設計一般的集羣,其影響性能的作用遠遠高於其他幾類因素。我們將在隨後的篇章裏詳細分析。

高效通訊

爲集羣,特別是鬆耦合的工作站集羣建立一個高效的通信子系統比爲MPP這樣的緊耦合系統建立高效通信子系統更有挑戰性。

    * 因爲集羣有更高的結點複雜性,集羣結點不能像MPP結點封裝得那樣緊密。而鬆耦合的集羣應用相對普遍一些。
    * 集羣內結點之間物理線路的長度要長於MPP結點間的線路長度。即使是集中式的集羣也是這樣。長線路導致長的互連網絡延時。但更重要的是,長線路有更多的可靠性、時鐘扭斜和串道(cross-talking)等問題。這些問題要求用可靠的和安全的通信協議來解決,而協議又會增加系統開銷。
    * 集羣一般使用有標準通信協議(如TCP/IP)的商品化網絡(如:以太網,ATM)。商品化部件一般遵循Moore定律,但TCP/IP協議的系統開銷很大。雖然低級通信協議比標準通信協議有效,但現在沒有用於低級通信協議的統一標準。

追求高效往往和集羣的可擴展性相牴觸。想要高可擴展的集羣系統,就要使用一些低效率的商品化網絡,更通用的硬件平臺,流行的操作系統。在保障了集羣的可擴充能力的同時,不可避免的降低了優化性能的可能,採用Open Source的操作系統或許可以解決一些問題。

理想的集羣模型

和OSI標準互聯參考模型一樣,理想的集羣只在概念中存在,因爲有太多的制約因素左右,實現起來就不太可能了。但不妨把這種理想結構作爲研究集羣的一種理論基礎,有助於對現有集羣的分析,和設計時的借鑑。

圖:一個理想的集羣系統,支持完全的SSI和HA能力
4.jpg
2008-10-24 11:00 上傳
下載附件 (38.45 KB)


從圖上我們可以看出,理想的集羣支持各類的結點,可用的有工作站、PC、SMP服務器、甚至超級計算機,結點的操作系統是多用戶、多任務和多線程的系統。結點彼此可以是同構甚至是異構的。

結點間由一個或多個高速商品化網絡互連。這些網絡使用標準的通信協議,傳輸速度應該比目前使用在以太網上的TCP/IP高兩個數量級。商品化網絡不但溝通了集羣節點,完成必要的通信功能。而且也爲實現SAN(存儲區域網絡)、一致的分佈式I/O、一致的內存訪問以及其他集羣硬件資源的統一訪問打下基礎。其實,網絡僅僅是物理的實現,關於資源的控制卻還需藉助操作系統來進行。

每個結點的網絡接口電路與結點的標準I/O總線(如PCI)相連,所有的驅動模塊都是可熱拔插,可動態加載的。當處理機或操作系統改變時,只需修改驅動軟件並重新加載,不必修改網絡或網絡接口,也不必重新啓動系統。

在結點工作平臺上有一組與工作平臺相獨立的軟件子系統,成爲集羣操作系統,提供操作系統的最基本的核心功能。操作系統之上是特殊的擴展或者中間件層,用於爲HA和SSI提供必要的支持。

中間件層之上便是提供高可用性服務的可用性子系統。還有一個單一系統映像層能提供單一的用戶入口點、單一的文件層次結構、單一的控制點以及高效的作業管理系統。可以通過編譯器或運行時間庫技術幫助實現單一存儲器,但集羣不一定需要支持單一進程空間。

最上層便是集羣的管理、控制和應用擴展實現層,用戶的入口,管理員的控制,作業的調度都在這一層具體實現。具體可以通過SSI提供的標準API或者動態運行庫實現。此外,其他一些擴展子系統也在該層實現,比如分佈式的OLTP(聯機事務處理)數據庫。

結束語

在瞭解了集羣的分佈式體系結構、概念、可擴展性以及分類方式和幾大要素後,相信大家對集羣的基本理念已經有了一個初步的認識。集羣的相關技術是一個非常複雜的體系,其中任何一點都可以足以討論出幾本書來。但我的初衷並非如此,這三篇文章僅作拋磚引玉,爲隨後的個案分析作一點鋪墊。以後的內容將重點集中在幾類主流的集羣上,希望通過今後的深入分析,使大家能夠更深入瞭解集羣在現實中如何實現和應用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章