什麼是集羣

計算機集羣(cluster)指一些鬆散的計算機系統,通過告訴網絡連接,協同工作。集羣對用戶來說就像單臺計算機系統,只不過是有更高的性能和更高的可靠性。集羣中的每臺計算機叫做節點。

常見集羣類型
高性能計算(HPC, high performance computing)
主要用於科學計算,多用於科研領域,一般的商業領域較少用到該類集羣。最開始出現的集羣就是爲了高性能計算設計的。集羣出現之前,科學計算都採用大型主機計算。這類主機一般都採用封閉設計,價格非常昂貴。集羣的目的就是使用多臺普通PC搭建系統,以低廉的價格提供可以匹敵大型機的計算能力。Beowulf cluster是該類系統的代表。這類系統的核心技術:1)並行算法。2)節點間通信。

並行算法
傳統的算法大多是順序執行(serial execution)。爲了發揮集羣的效能,需要讓計算任務在多個節點上同時運行,這就需要並行算法。並行算法和多進程(線程)不同:並行算法是一個算法,同時在多個處理器上運行,每個處理器上執行的任務是有關聯的,最終產生一個結果;多進程(線程)每個處理器上執行的任務是不想關的,每個任務都有自己的結果。Oracle中有個並行處理(parallel processing)功能,
普通SQL處理
普通的SQL處理只能使用一個CPU,但是可以運行多個進程(server process)同時處理多個SQL。每個SQL處理之間沒有關聯,都有自己的最終結果。

並行SQL處理
可以使用多個CPU,比如在執行查找時,可以將表中數據分成若干個集合,每個集合分給一個CPU執行,最後將每個CPU的結果彙總,形成最終結果。多個CPU之間是有關係的,最終只有一個結果。具體請參考oracle關於paralle processing的介紹。

節點間通信
確定了並行算法後,需要將任務分給不同的節點運行,這就涉及到了節點之間如何通信。Message Passing Interface (MPI)是一個標準的消息通信接口,廣泛用於並行計算領域。http://en.wikipedia.org/wiki/Message_Passing_Interface

大數據分析(big data)
該類型集羣應該是隨着互聯網的興起而出現。互聯網的出現導致了海量數據的出現,海量數據的出現要求有相應的方法來處理、分析這些數據。Google的MapReduce是處理大數據的事實標準,已被廣泛採用。

MapReduce
MapReduce的核心也是並行處理,這點和高性能計算是類似的。但和高性能計算也有顯著區別:前者的重點是數據,將數據拆分,然後分給每個幾點;後者則是計算,將計算任務分解後分給每個節點;前者是IO密集型,後者是計算密集型。因爲關注數據,所以MapReduce有個特點:Locality:
Locality的思路就是讓每個節點分到的數據,最好存放在本地(即使不在本地,也要在離本節點近的節點上,如接入同一交換機的節點),這樣可以避免通過網絡拿數據帶來的額外開銷和帶寬佔用。Google使用GFS作爲數據存儲平臺,將GFS和MapReduce部署在同一集羣上,來實現locality的特性。

MapReduce節點通信
MapReduce集羣中的節點也需要相互通信,論文中並沒有給出細節,只說明使用了Remote Procedure Call。MapReduce節點間的通信也可以採用MPI標準來實現,可以參考MapReduce-MPI (MR-MPI) library,開源的MapReduce實現,採用MPI作爲通信協議(http://mapreduce.sandia.gov/)。
MapReduce還提供了容錯處理(fault tolerance)等功能,具體請參考論文。

Hadoop
hadoop是使用最廣的基於MapReduce/GFS的實現。Hadoop在現在的互聯網公司中有廣泛應用。支X寶賬單中會有各種各樣的統計數據,個人覺得應該是採用MapReduce分析出來的(猜測)。X寶的Hadoop服務叫做《X寶雲梯》,網上有不少的資料,有興趣的朋友可以搜搜看。

存儲集羣
按照存儲模型看,存儲系統可以分爲3類:塊級存儲,文件存儲,key-value及關係數據庫。

塊級存儲
塊級存儲的代表是採用SAN的存儲設備。這種設備在大型企業中廣泛採用,歷史悠久,技術成熟。但也有缺點:一是價格昂貴,而是擴展性不強。

分佈式文件系統
代表產品是Google GFS。通過大量廉價PC + 軟件方案,以低廉的價格提供:1)海量存儲 2)高性能 3)高可用(HA) 4)可擴展(scalability)等特性。該系統在互聯網企業中大量使用。

Fast DSF:基於GFS思路設計的開源分佈式文件系統,針對互聯網使用設計。具有負載均衡,冗餘備份,線性擴展等特性。本身代碼量較小,設計較爲簡單,適合感興趣的同學學習。

key-value
該類產品就是現在流行的NoSQL,存儲模型不限於key-value,還可以是其他。NoSQL產品適合那些訪問量大,但又不需要事物處理(Transaction)的場景。互聯網上的大量場景都符合這個特點,如門戶網站,論壇,博客等。這些場景都是讀多寫少,很少更新,沒有事物。NoSQL產品一般都有很好的擴展性。該系統在互聯網企業中大量使用。
key-value模型:MemcacheDB。MemcacheDB基於Memcached,但提供了持久化支持。Memcached本身是作爲緩存(cache)用的,數據會有失效期,重啓系統也會導致數據丟失。Amazon S3,openstack swift也都是採用了key-value模型的分佈式存儲系統。
還其他存儲模型的系統:如MongoDB,採用document模型;google的bigtable,採用表模型。

關係數據庫
基於關係模型構建,最大的特點是支持:SQL和事物(transaction)。SQL中的最重要的功能就是表連接(join)。NoSQL對SQL和連接的支持都不是很完整,有一定限制。關係數據庫的缺點是擴展性不強,很多互聯網場景不適合。關係數據庫在互聯網中的應用還是不可取代的,很多場景還需要事物處理,如電子商務的支付,下單等。

不同的存儲集羣有不同的特點,應用需要根據自身的特點來選擇合適的模型。目前amazon的雲服務中提供了塊級存儲(EBS)和key-value(S3)及關係數據庫(RDS)的服務。其中S3的容量不限,EBS和RDS都可以根據需要隨時調整。

Web集羣
提供web服務的集羣,互聯網中的大部分集羣都屬於這種。直接給用戶提供各種服務,如網頁,視頻,web service,遊戲等。


集羣中的可擴展性
集羣中的節點數量不固定,可以根據實際需求動態擴展,最簡單的集羣只需要兩個節點。集羣中增加節點的能力叫做可擴展性(scalability)。隨着節點的增加,節點之間的數據流量也會逐漸增加。當網絡的傳輸速度無法滿足集羣產生的數據流量時,該集羣就達到了節點上限。可以通過創建多個集羣系統滿足更高的需求。
集羣的可擴展性和集羣類型相關,如果各節點之間沒有關聯而且節點本身也沒有數據(狀態),則容易擴展,比如web集羣;其他集羣的擴展則比較複雜。

集羣中節點之間的關係
一般集羣的設計中會有一個主控節點(master)用來協調集羣的整體運行,其餘的屬於工作節點(從節點)。如web集羣中的負載均衡器(load balancer)。負載均衡器負責將請求調度到集羣中的工作節點上。存儲系統中主控節點負責定位給定數據保存在哪臺工作節點上。LVM是基於Linux的廣泛採用的負載均衡器。

也有對等集羣設計,所有節點都是工作節點,沒有主控。代表設計有amazon Dynamo。不過這種設計帶來了很多複雜性,實際效果並不是很理想。目前商用的產品設計都是有主控節點的。


節點之間的通信
集羣的節點之間需要互相通信。通信可以採用標準協議(如MPI),也可以採用自定義協議。很多集羣會根據自己的特點,設計專用協議,達到性能最大化。web集羣一般採用標準的HTTP(S)協議通信。有的集羣通信只限於主控節點和工作節點,如web集羣中;有些則是工作節點之間也需要通信,如分佈式文件系統中,工作節點之間需要同步數據副本。


集羣的管理
負載均衡
調整每個節點的工作複雜(CPU或存儲),配置不同的算法。

心跳包
用來檢查集羣中節點的狀態。如果幾點發生故障,可以通過心跳檢測出來。

容錯處理
系統中節點故障後的處理,處理方法和集羣類型相關。如web集羣中,負載均衡器採用主備模式,主設備失效後,備份設備自動接替主設備工作(failover)。工作節點失效後,只要從負載均衡器中移除該設備即可。存儲設計的處理會相對複雜,一個工作節點失效後,該節點上的數據備份全部丟失,集羣需要找出丟失的數據並在其他節點中從建這些備份。

擴容
web集羣中,擴容只要將新機器配置在負載均衡器上即可。存儲節點上加入新機器的策略就不相同,有的會將集羣中的部分數據遷移到新機器中,有的則是將之後產生的新數據調度到該機器上。

監控
用來監控集羣系統的整體運行狀態,集羣系統會提供各自的監控工具。


架構示意圖

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