天天看點

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

繼續閱讀