淺析 Google 的雲計算平臺

清華大學 陳康 鄭緯民



 

Google的雲計算技術實際上是針對Google特定的網絡應用程序而定製的。針對內部網絡數據規模超大的特點,Google提出了一整套基於分佈式並行集羣方式的基礎架構,利用軟件的能力來處理集羣中經常

<script src="http://ad.ccw.com.cn/adshow.asp?positionID=35&js=1&innerJs=1"></script>

發生的節點失效問題。

從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的藍雲計算平臺是可供銷售的計算平臺,用戶可以基於這些軟硬件產品自己構建雲計算平臺。亞馬遜的彈性計算雲則是託管式的雲計算平臺,用戶可以通過遠端的操作界面直接使用。

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