1. 程式人生 > >雲計算底層技術之高性能集群

雲計算底層技術之高性能集群

shu 自己的 互聯 question developer 風起雲湧 處理器 極致 前端工程師

本文首發於我的公眾號 CloudDeveloper(ID: cloud_dev),專註於幹貨分享,號內有大量書籍和視頻資源,後臺回復「1024」即可領取,歡迎大家關註,二維碼文末可以掃。

在孫悟空的七十二變中,我覺得最厲害的是分身能力,這也是他百試不得其爽的終極大招,每每都能打得妖怪摸不著北。

技術分享圖片

集群,學名叫 Cluster,可以翻譯為簇、聚類、集群等多種意思,不同的翻譯,在技術世界裏所表示的意思都不盡相同,但都有一個共同的指向,即群體。集群就是由一組計算機所組成的實體,通常作為一個整體向用戶提供資源和服務。

集群的研究和發展離不開人們對高性能計算的追求,像我們熟悉的向量機、對稱多處理機、工作站、超級計算機等等都是對高性能計算追求下的產物。

這些系統要麽是提高 CPU 的主頻和總線帶寬來提高系統性能,要麽是增加 CPU 個數和內存容量來提高性能,但這些手段對性能的提高都是有限的。有人做過實驗,當 CPU 個數超過某一閾值時,系統的性能反而會變差。其主要的瓶頸就在於 CPU 訪問內存的帶寬並不能隨著 CPU 個數的增加而有效增加。

技術分享圖片

相反,集群系統的性能可擴展能力是線性增長的。我們可以簡單通過增加機器數來增加集群的運算能力,相比購買高性能的大型計算機,同等運算能力下,我們可以獲得更高的性價比。同時,系統的可靠性也得到了增強。

歷史

早在七十年代計算機廠商和研究機構就開始了對集群系統的研究和開發,首先創造性發明集群的是 Seymour Cray(西摩·克雷)—— 超級計算機之父。

技術分享圖片

Seymour 是一位美國工程師,在 1960 年代,CDC 公司開始涉足高性能計算領域,彼時還是大型機的天下,這些大型機設計非常復雜,生產周期漫長,價格還非常昂貴。於是,當時在 CDC 公司擔任總設計師的 Seymour 就決心建造出一臺他心目中的高性能計算機。

Seymour 出於工程師的直覺,很快想到並行是提高計算機性能的有效方式。他使用廉價的方式來獲得跟大型機一樣的運算能力。他將多個普通的處理器連接起來,使它們能夠協同工作,這就是高性能計算機的原型。

後來,IBM、HP 等公司學習了 Seymour 的這套架構,高性能計算機開始迅速推廣,逐步取代原有的大型機。高性能計算機為當時的登月計劃等大型科研項目作出了非常重要的貢獻。

然後進入八十年代,在摩爾定律的指導下,CPU 頻率不斷提高,芯片不斷降價,個人計算機強勢崛起。蘋果、微軟等公司借助這股東風成為個人計算機時代的王者。隨之而來的就是高性能計算機市場遭到了吞噬,被迫只能退守公司服務器市場。

但很快,隨著互聯網的普及,高性能計算機又迎來新的一波熱潮。互聯網上用戶量龐大,普通 PC 難以應付如此眾多的網絡請求,必須要依賴由高性能計算機組成的服務器集群。在 2000 年左右的網絡泡沫時期,成就了很多像 Sun 這樣的服務器生產商。

如今,IT 行業向雲計算沖擊,諸如 Google、Apple、Amazon 等很巨頭紛紛建立起了自己的數據中心。集群的規模在不斷擴大,為海量的數據提高基礎設施提供了支撐。根據不同的應用場景,集群也演變出多種形態,比如高性能集群、高可用集群、負載均衡集群等等。

集群元素

集群不是簡單的硬件堆疊,而是硬件和軟件的結合。從軟件上說,集群至少需要:

  • 構建於 TCP/IP 協議上的通信軟件,用於集群中節點之間的通信。
  • 一套中心管理軟件,用於統一管理集群中節點的資源、任務和容錯等等。

這兩點比較好理解,集群的規模往往是比較龐大的,對於管理員來說,需要隨時能夠知曉集群中各節點的業務正常與否,出問題了應該怎麽保證業務能夠不中斷,遇到流量高峰和低谷的時候,又該怎麽響應,這些操作如果純靠人工來完成那必將很慘烈。依靠軟件和網絡來完成自動化的管理方式,可以將管理員解放出來。當然,以上說的兩點是比較寬泛的,用戶可以根據自身需求來部署不同的集群元素。

一個比較經典的集群模型當屬 Beowulf 集群,它通過一個節點統一將來自網絡的請求分配給各個節點進行計算處理。

技術分享圖片

集群與分布式

集群與分布式像一對孿生兄弟,傻傻分不清楚。在我看來,它們之間沒有特別明確的分界線,集群離不開分布式,分布式也需要集群。如果一定要做個區分,可以套用一個比喻來描述兩者的區別:

一家餐廳剛開業,由於成本限制招了一個廚師,慢慢地,餐廳生意越做越好,一個廚師已經很難應付過來,於是又招了一個,這兩個廚師水平相當,都能做同樣的事,兩個廚師之間的關系就是集群。兩廚師除了炒菜,還要負責洗菜、配菜等等的活,工作負荷已經嚴重超標,為了讓廚師能專心炒菜,把菜做到極致,餐廳又招了配菜師來輔助廚師,廚師和配菜師之間的關系就是分布式。

這個例子比較形象,在網站開發中也有類似的關系,兩個全棧工程師之間就是集群的關系,前端工程師和後端工程師之間就屬於分布式的關系。

技術分享圖片

所以,一定要有區分的話就是:集群是一個業務部署在多個服務器上,而分布式是一個業務拆分成多個子業務部署在不同的服務器上。但在實際部署中,為了高性能,需要分布式部署,為了高可用,需要集群部署,這兩者都是業務所必須的指標。所以,集群和分布式之間的關系是相互補充的。

虛擬化

隨著虛擬化技術的發展,一臺服務器可以虛擬出多個虛擬機,對外提供業務,這種方式大大提高了資源的利用率,集群的部署也逐步從物理機過渡到虛擬機,靈活性大大提高。但同時也帶來了更多新的研究課題。虛擬化計算、虛擬化存儲、虛擬化網絡、虛擬化安全等等這些課題共同推動著雲計算產業邁出一個又一個的臺階。

數據中心

數據中心是集中存放和運行服務器的地方,是規模最大的集群。隨著雲計算和大數據概念的風起雲湧,Google、Amazon 等這些明星公司幕後的數據中心也開始走入大眾的視野。數據中心要求有優秀的架構設計、電路設計、空間設計等等,還要有機制能夠應對各種各樣的意外,否則一點小小的失誤,公司的股價恐怕就要跳水。

技術分享圖片

地理位置的選擇也是數據中心考慮的一個指標,隨著綠色數據中心概念的興起,越來越多人關註數據中心所帶來的能源問題和環境問題,選擇一個遠離市區,並且能利用天然水源和氣溫的地方,將會為數據中心的建設節約大量的成本。Google 等大公司的數據中心就有意放在高緯度、高海拔的地區,以及有湖泊、河流流經地區,以享受天然的空調和冷卻水。

參考

[1] 分布式與集群的區別是什麽?

[2] 數據中心網絡架構演講

[3] Linux 高性能計算集群

[4] 高性能計算機傳奇


我的公眾號 CloudDeveloper(ID: cloud_dev),號內有大量書籍和視頻資源,後臺回復「1024」即可領取,分享的內容包括但不限於雲計算虛擬化、容器、OpenStack、K8S、霧計算、網絡、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術等內容,歡迎大家關註。

技術分享圖片

雲計算底層技術之高性能集群