雲計算和存儲將物理資源(例如處理器和存儲)轉換成 Internet 上可伸縮、可共享的資源(「作為服務」 的計算和存儲)。雖然虛擬化不是一個新概念,但是通過伺服器虛擬化實現的物理系統共享,的確能使資源的可伸縮性大得多,效率也高得多。雲計算使用戶可以訪問大規模計算和存儲資源,而且他們不必知道那些資源的位置及其是如何配置的。正如您預期的一樣,Linuxreg; 在此扮演著極為重要的角色。探索雲計算,了解其中的奧秘。
最近,沒有哪家技術性網站不提到所謂的雲計算(cloud computing)的。雲計算其實就是以服務的形式提供計算資源(計算機和存儲)。這又涉及到以一種簡單、透明的方式動態地將服務延伸到更多的計算機和存儲的能力。所有這些都類似於效用計算(utility computing) 背後的思想。在效用計算中,計算資源被看作一種計量服務,就像更傳統的公共設施(例如水或電)一樣。它們的區別不在於這些思想背後的目標,而在於組合到一起、使這些思想成為現實的現有技術。
雲計算背後最重要的概念之一就是可伸縮性,而實現它的關鍵則是虛擬化(virtualization)。虛擬化在一臺共享計算機上聚集多個作業系統和應用程式,以便更好地利用伺服器。虛擬化還允許在線遷移,因此,當一個伺服器超載時,可以將一個作業系統的一個實例(以及它的應用程式)遷移到一個新的、不那麼繁忙的伺服器上。
從外部看,雲計算只是將計算和存儲資源從企業遷出,並遷入到雲中。用戶定義資源需求(例如計算和廣域網、帶寬需求),雲提供者在它的基礎設施中虛擬地裝配這些組件。
雲計算在 Internet 中遷移資源雲計算的目標是使這些資源比您自己所能提供和管理的資源更廉價。雲計算除了降低成本外,還有更大的靈活性和可伸縮性。雲計算提供者可以輕鬆地擴展虛擬環境,以通過提供者的虛擬基礎設施提供更大的帶寬或計算資源。
雲計算在環保方面的優勢是,它可以在不同的應用程式之間虛擬化和共享資源,以提高伺服器的利用率。下圖顯示了一個例子。在這個例子中,不同的應用程式使用了 3 個獨立的平臺,每個應用程式都在它自己的伺服器上運行。在雲中,可以在多個作業系統和應用程式之間共享(虛擬化)伺服器,從而減少伺服器的數量。更少的伺服器意味著需要更少的空間(減少數據中心佔用的空間)和更少用於製冷的電力(減少碳足跡)。
現在讓我們來探索一下,Linux 和開源社區如何為雲計算領域做出貢獻。您可能已經猜到,Linux 和開放原始碼扮演著極其重要的角色。
Software-as-a-Service
SaaS 就是以服務的形式訪問 Internet 上的軟體。一種早期的 SaaS 方法是 Application Service Provider(ASP)。ASP 提供對 Internet 上存放或交付的軟體的訂閱。ASP 交付軟體,並根據軟體的使用收費。這樣一來,您就不必購買軟體,只需隨需租用軟體。
SaaS 的另一個方面是在 Internet 上使用遠程執行的軟體。這種軟體可以是本地應用程式所使用的服務(並定義為 Web 服務),也可以是通過 Web 瀏覽器看到的遠程應用程式。遠程應用程式服務的一個例子是 Google Apps,它通過一個標準的 Web 瀏覽器提供一些企業應用。要遠程地執行應用程式,通常需要依賴於一個應用伺服器來公布所需的服務。應用伺服器 是一個軟體框架,它公布軟體服務的 API(例如事務管理或資料庫訪問)。具體的例子有 Red Hat JBoss Application Server、Apache Geronimo 和 IBMreg; WebSpherereg; Application Server 等。另外還有很多其他的應用伺服器,參考資料 小節給出了一份詳細的列表。
SaaS 的另一個最近的例子是 Google 的 Chrome 瀏覽器。這個瀏覽器是作為新桌面的理想環境,除了具有傳統的 Web 瀏覽體驗外,還可以通過它來(以本地或遠程方式)交付應用程式。(要了解更多信息,請參閱 參考資料)。
Platform-as-a-Service
PaaS 可描述為一個完整的虛擬平臺,它包括一個或多個伺服器(在一組物理伺服器上虛擬而成)、作業系統以及特定的應用程式(例如用於基於 Web 的應用程式的 Apache 和 MySQL)。在某些情況下,這些平臺可以預先定義和選擇。而在另一些情況下,可以提供一個 VM 鏡像,該鏡像包含所有的特定於用戶的應用程式。
PaaS 一個有趣的例子是 Google App Engine。App Engine 是一個服務,通過它可以在 Google 的可伸縮性極佳的架構上部署 Web 應用程式。App Engine 為可通過 Internet 引用的 Python 應用程式提供一個沙盒(將來還會支持更多的語言)。除了支持用戶認證、鏡像操作和電子郵件發送外,App Engine 還提供了 Python API,用於持久地存儲和管理數據(使用 Google Query Language 或 GQL)。Web 應用程式運行時所在的沙盒將限制對底層作業系統的訪問。雖然 App Engine 限制了應用程式可用的功能,但是它支持有用的 Web 服務的構造。請參閱 參考資料 小節,了解更多信息。
注意: 在一定的帶寬和存儲約束範圍內,在 App Engine 中部署應用程式是免費的。但是,如果要用 App Engine 構建生產 Web 站點,則需要評估使用費。
PaaS 的另一個例子是 10gen,它既是一個雲平臺,又是一個可下載的開放原始碼包,可用於創建您自己的私有雲。10gen 是類似於 App Engine 的一個軟體棧,它提供與 App Engine 類似的功能 — 但有一些不同之處。通過 10gen,可以使用 Python 以及 JavaScript 和 Ruby 程式語言開發應用程式。該平臺還使用沙盒概念隔離應用程式,並且使用它們自己的應用伺服器的許多計算機(當然,是在 Linux 上構建)提供一個可靠的環境。 Infrastructure-as-a-Service
IaaS 是以服務的形式交付計算機基礎設施。這一層與 PaaS 的不同之處在於,只提供虛擬硬體,而沒有軟體棧。客戶提供一個 VM 鏡像,該鏡像在一個或多個虛擬伺服器上被調用。IaaS 是作為服務的計算的最原始的形式(除了對物理基礎設施的訪問)。最著名的商業 IaaS 提供程序是 Amazon Elastic Compute Cloud(EC2)。在 EC2 中,可以指定一個特定的 VM(作業系統和應用程式集),然後將應用程式部署到它上面,或者提供要在伺服器上執行的 VM 鏡像。然後,只需根據計算時間、存儲和網絡帶寬付費。
Eucalyptus 項目(Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems)是 Amazon EC2 的一個開源實現,它與商業服務接口兼容。和 EC2 一樣,Eucalyptus 依賴於 Linux 和 Xen 進行作業系統虛擬化。Eucalyptus 是加利福尼亞大學(Santa Barbara)為進行雲計算研究而開發的。您可以從該大學的網站上下載它(見 參考資料),或者通過 Eucalyptus Public Cloud 體驗它,不過後者有一些限制。
另一個 EC2 風格的 IaaS 是 Enomalism 雲計算平臺。Enomalism 是一個開放原始碼項目,它提供了一個功能類似於 EC2 的雲計算框架。Enomalism 基於 Linux,同時支持 Xen 和 Kernel Virtual Machine(KVM)。與其他純 IaaS 解決方案不同的是,Enomalism 提供了一個基於 TurboGears Web 應用程式框架和 Python 的軟體棧。