1. 程式人生 > >Google的雲端計算平臺解析 分散式並行叢集

Google的雲端計算平臺解析 分散式並行叢集

Google的雲端計算技術實際上是針對Google特定的網路應用程式而定製的。針對內部網路資料規模超大的特點,Google提出了一整套基於分散式並行叢集方式的基礎架構,利用軟體的能力來處理叢集中經常發生的節點失效問題。

  從2003年開始,Google連續幾年在計算機系統研究領域的最頂級會議與雜誌上發表論文,揭示其內部的分散式資料處理方法,向外界展示其使用的雲端計算核心技術。從其近幾年發表的論文來看,Google使用的雲端計算基礎架構模式包括四個相互獨立又緊密結合在一起的系統。包括Google建立在叢集之上的檔案系統Google File System,針對Google應用程式的特點提出的Map/Reduce程式設計模式,分散式的鎖機制Chubby以及Google開發的模型簡化的大規模分散式資料庫BigTable。

  Google File System 檔案系統

  為了滿足Google迅速增長的資料處理需求,Google設計並實現了Google檔案系統(GFS,Google File System)。GFS與過去的分散式檔案系統擁有許多相同的目標,例如效能、可伸縮性、可靠性以及可用性。然而,它的設計還受到Google應用負載和技術環境的影響。主要體現在以下四個方面:

  1. 叢集中的節點失效是一種常態,而不是一種異常。由於參與運算與處理的節點數目非常龐大,通常會使用上千個節點進行共同計算,因此,每時每刻總會有節點處在失效狀態。需要通過軟體程式模組,監視系統的動態執行狀況,偵測錯誤,並且將容錯以及自動恢復系統整合在系統中。

  2. Google系統中的檔案大小與通常檔案系統中的檔案大小概念不一樣,檔案大小通常以G位元組計。另外檔案系統中的檔案含義與通常檔案不同,一個大檔案可能包含大量數目的通常意義上的小檔案。所以,設計預期和引數,例如I/O操作和塊尺寸都要重新考慮。

  3. Google檔案系統中的檔案讀寫模式和傳統的檔案系統不同。在Google應用(如搜尋)中對大部分檔案的修改,不是覆蓋原有資料,而是在檔案尾追加新資料。對檔案的隨機寫是幾乎不存在的。對於這類巨大檔案的訪問模式,客戶端對資料塊快取失去了意義,追加操作成為效能優化和原子性(把一個事務看做是一個程式。它要麼被完整地執行,要麼完全不執行)保證的焦點。

  4. 檔案系統的某些具體操作不再透明,而且需要應用程式的協助完成,應用程式和檔案系統API的協同設計提高了整個系統的靈活性。例如,放鬆了對GFS一致性模型的要求,這樣不用加重應用程式的負擔,就大大簡化了檔案系統的設計。還引入了原子性的追加操作,這樣多個客戶端同時進行追加的時候,就不需要額外的同步操作了。

  總之,GFS是為Google應用程式本身而設計的。據稱,Google已經部署了許多GFS叢集。有的叢集擁有超過1000個儲存節點,超過300T的硬碟空間,被不同機器上的數百個客戶端連續不斷地頻繁訪問著。

  圖1給出了Google File System的系統架構,一個GFS叢集包含一個主伺服器和多個塊伺服器,被多個客戶端訪問。檔案被分割成固定尺寸的塊。在每個塊建立的時候,伺服器分配給它一個不變的、全球惟一的64位塊控制代碼對它進行標識。塊伺服器把塊作為linux檔案儲存在本地硬碟上,並根據指定的塊控制代碼和位元組範圍來讀寫塊資料。為了保證可靠性,每個塊都會複製到多個塊伺服器上,預設儲存三個備份。主伺服器管理檔案系統所有的元資料,包括名字空間、訪問控制資訊和檔案到塊的對映資訊,以及塊當前所在的位置。GFS客戶端程式碼被嵌入到每個程式裡,它實現了Google檔案系統 API,幫助應用程式與主伺服器和塊伺服器通訊,對資料進行讀寫。客戶端跟主伺服器互動進行元資料操作,但是所有的資料操作的通訊都是直接和塊伺服器進行的。客戶端提供的訪問介面類似於POSIX介面,但有一定的修改,並不完全相容POSIX標準。通過伺服器端和客戶端的聯合設計,Google File System能夠針對它本身的應用獲得最大的效能以及可用性效果。

  MapReduce分散式程式設計環境

  為了讓內部非分散式系統方向背景的員工能夠有機會將應用程式建立在大規模的叢集基礎之上,Google還設計並實現了一套大規模資料處理的程式設計規範Map/Reduce系統。這樣,非分散式專業的程式編寫人員也能夠為大規模的叢集編寫應用程式而不用去顧慮叢集的可靠性、可擴充套件性等問題。應用程式編寫人員只需要將精力放在應用程式本身,而關於叢集的處理問題則交由平臺來處理。

  Map/Reduce通過“Map(對映)”和“Reduce(化簡)”這樣兩個簡單的概念來參加運算,使用者只需要提供自己的Map函式以及Reduce函式就可以在叢集上進行大規模的分散式資料處理。

  據稱,Google的文字索引方法,即搜尋引擎的核心部分,已經通過Map Reduce的方法進行了改寫,獲得了更加清晰的程式架構。在Google內部,每天有上千個Map Reduce的應用程式在執行。

  分散式大規模資料庫管理系統BigTable

  構建於上述兩項基礎之上的第三個雲端計算平臺就是Google關於將資料庫系統擴充套件到分散式平臺上的BigTable系統。很多應用程式對於資料的組織還是非常有規則的。一般來說,資料庫對於處理格式化的資料還是非常方便的,但是由於關係資料庫很強的一致性要求,很難將其擴充套件到很大的規模。為了處理Google內部大量的格式化以及半格式化資料,Google構建了弱一致性要求的大規模資料庫系統BigTable。據稱,現在有很多Google的應用程式建立在BigTable之上,例如Search History、Maps、Orkut和RSS閱讀器等。

  圖2給出了在BigTable模型中的資料模型。資料模型包括行列以及相應的時間戳,所有的資料都存放在表格中的單元裡。

  BigTable的內容按照行來劃分,將多個行組成一個小表,儲存到某一個伺服器節點中。這一個小表就被稱為Tablet。

  以上是Google內部雲端計算基礎平臺的三個主要部分,除了這三個部分之外,Google還建立了分散式程式的排程器,分散式的鎖服務等一系列相關的雲端計算服務平臺。

  Google的雲應用

  除了上述的雲端計算基礎設施之外,Google還在其雲端計算基礎設施之上建立了一系列新型網路應用程式。由於借鑑了非同步網路資料傳輸的Web 2.0技術,這些應用程式給予使用者全新的介面感受以及更加強大的多使用者互動能力。其中典型的Google雲端計算應用程式就是Google推出的與 Microsoft Office軟體進行競爭的Docs網路服務程式。Google Docs是一個基於Web的工具,它有跟Microsoft Office相近的編輯介面,有一套簡單易用的文件許可權管理,而且它還記錄下所有使用者對文件所做的修改。Google Docs的這些功能令它非常適用於網上共享與協作編輯文件。Google Docs甚至可以用於監控責任清晰、目標明確的專案進度。當前,Google Docs已經推出了文件編輯、電子表格、幻燈片演示、日程管理等多個功能的編輯模組,能夠替代Microsoft Office相應的一部分功能。值得注意的是,通過這種雲端計算方式形成的應用程式非常適合於多個使用者進行共享以及協同編輯,為一個小組的人員進行共同創作帶來很大的方便性。

  Google Docs是雲端計算的一種重要應用,即可以通過瀏覽器的方式訪問遠端大規模的儲存與計算服務。雲端計算能夠為大規模的新一代網路應用打下良好的基礎。

  雖然Google可以說是雲端計算的最大實踐者,但是,Google的雲端計算平臺是私有的環境,特別是Google的雲端計算基礎設施還沒有開放出來。除了開放有限的應用程式介面,例如GWT(Google Web Toolkit)以及Google Map API等,Google並沒有將雲端計算的內部基礎設施共享給外部的使用者使用,上述的所有基礎設施都是私有的。

  幸運的是,Google公開了其內部叢集計算環境的一部分技術,使得全球的技術開發人員能夠根據這一部分文件構建開源的大規模資料處理雲端計算基礎設施,其中最有名的專案即Apache旗下的Hadoop專案。而下面的兩個雲端計算的實現則為外部的開發人員以及中小公司提供了雲端計算的平臺環境,使得開發者能夠在雲端計算的基礎設施之上構建自己的新型網路應用。其中IBM的藍雲端計算平臺是可供銷售的計算平臺,使用者可以基於這些軟硬體產品自己構建雲端計算平臺。亞馬遜的彈性計算雲則是託管式的雲端計算平臺,使用者可以通過遠端的操作介面直接使用。