本文作者將介紹一些領先的雲計算平臺,並提供關於這些雲計算平臺可以處理的用例指導。
平臺即服務 (PaaS) 通常被認為是三種主要的雲計算服務交付模型之一,另外兩種是基礎架構即服務和軟體即服務。 它加速了雲應用程式開發,提供了託管基礎架構、簡單而又靈活的資源配置以及豐富的工具和服務,通過這些説明實現高效的代碼和運行時性能。
然而,這個術語卻掩飾了雲平臺的廣泛的多樣性。 粗看起來,Windows® Azure™ 和 Google App Engine 或 Force.com 之間似乎沒什麼共通性。 Amazon Web Services™ (AWS™) 採用一種完全不同的方法逐漸從 IaaS 遷移到 PaaS。 而私有平臺,比如 VMware® 提供的平臺,則滿足了另外一些需求。 本文將介紹一些領先的雲計算平臺,並提供關於這些雲計算平臺可以處理的用例的指導。
歷史
PaaS 是融合了兩種趨勢而形成的:
IaaS 並不是最理想的雲計算平臺。 web 應用程式的發展演變。
基礎架構服務為希望擴展或將其應用程式遷移到雲環境中的客戶提供了許多優勢;然而,基礎架構服務通常運行在為桌面或傳統的客戶機-伺服器環境而設計的平臺上。 它們目前可能已經實現了虛擬化,但並未針對雲而進行優化。
第二個值得注意的趨勢是 Web 託管網站的不斷演變。 GeoCities 等在 20 世紀 90 年代中期就提供了 HTML 託管服務;然而,Web 託管服務的數量曾以驚人的速度在增長,這些服務支援各種活躍的伺服器端元件,其中包括 Microsoft® ASP.NET 和 JAVA™ 技術,以及 PHP、Python 和 Ruby on Rails 腳本等。 與基礎架構服務相比,這些平臺減少了每個應用程式的存儲需求並簡化了部署。
考慮事項
在選擇 PaaS 雲時,雲應用程式開發人員、雲遷移專家或正在實現雲的管理員有哪些基本選擇?
開放雲、專有雲或混合雲(以及混合方式)...... 瞭解每種類別的一些概念即可。 託管結構和限制:支援哪些內容,不支援哪些內容,等等。 資源配置方式:自動化程度,易於開發 (ease to tap),解除資源配置是否和分配一樣簡單,等等。 資料存儲功能和方法:持久性自動存儲還是根據請求執行存儲,等等 支援的開發工具和管理工具 性能和事務類型及數量。 各種雲元件的安全性:如何實現安全性?
Google App Engine
Google App Engine 是目前已知的最好的平臺之一。 除了提供基本的運行時環境之外,它還消除了在構建可擴展至數百萬使用者的應用程式過程中可能遇到的系統管理和開發挑戰。 它提供了一些工具,可將代碼部署到集群,並提供了諸如監視、容錯移轉、自動擴展和負載平衡等功能。
Google App Engine 最初僅支援基於 Python 的運行時環境,之後又增加了對 JAVA Virtual Machines (JVM) 的支援,因此,它不僅能夠支援使用 JAVA 編寫的應用程式,而且還能夠支援使用其他 JVM 語言編寫的應用程式,比如 Groovy、JRuby、Jython、Scala 或 Clojure。 軟體發展工具箱包括了完整的本地開發環境,可以在開發人員的桌上型電腦上類比 Google App Engine。
Google App Engine 對程式設計語言有一些限制。 例如,Python 模組必須是純 Python 模組,因為 C 和 Pyrex 模組不受支援。 同樣,JAVA 應用程式只能使用 JAVA Runtime Environment (JRE) Standard Edition 類的一個子集;它們無法創建新的執行緒。
清單 1 展示了 Google App Engine 中的一個簡單的 「Hello World」 應用程式。
清單 1. Google App Engine 「Hello World」
from google.appengine.ext import webappfrom google.appengine.ext.webapp.util import run_wsgi_appclass MainPage(webapp . RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Hello, World!') application = webapp. WSGIApplication( [('/', MainPage)])def main(): run_wsgi_app(application)if __name__ == "__main__": main()
不同應用程式使用的實際代碼是明顯不同的。 如清單 1 中的 Python 例子所示,如果應用程式邏輯很少的話,那麼命令會非常簡單。 需要導入 SDK 中包含的一些模組並定義一個請求處理常式 MainPage,它處理所有到根 URL 的 HTTP GET 請求。 該方法可以使用 self.response 物件編寫 HTTP 回應。 run_wsgi_app() 函數獲取一個 WSGIApplication 實例並在 Google App Engine 的 Common Gateway Interface (CGI) 環境中運行它。 如果您的需求不多的話,那麼使用這些代碼內容就足夠用了。
Google App Engine 資料存儲使用樂觀併發控制 (optimistic concurrency control) 支援查詢、排序和事務。 這是一種高度一致的分佈樹資料庫,它基於低級的 BigTable 資料存儲系統並增加了一些額外的功能。 Google App Engine 的查詢語言(稱為 GQL)在 SELECT 語句中類似于結構化查詢語言 (SQL),但是有一些明確的限制。 例如,GQL 不支援 JOIN 語句,因此只能接受單一的表查詢。
儘管該環境存在一些限制,它還是提供了豐富的應用程式開發介面 (API)。 除了前面提到的資料存儲功能外,它還提供了一組庫函數:
身份驗證。 應用程式可以與 Google 帳戶交互,從而實現使用者身份驗證。 它可以指引使用者登錄 Google 帳戶並訪問電子郵件地址,並在使用者完成身份驗證後顯示使用者名。 OpenID 使用者還可以在任何 OpenID 供應商處創建一個身份,並使用該身份對 Google App Engine 應用程式進行身份驗證。 Memcached。 Memcached 服務為應用程式提供了一個記憶體鍵值對緩存,可供多個應用程式實例訪問。 不對臨時資料使用持久性和事務性特性將會很有用,比如在本機快取資料存儲,以實現高速訪問。 調度任務。 cron 服務允許使用者調度按固定時間間隔運行的任務,例如,每天或每小時運行一次。 應用程式甚至可以執行添加到佇列本身的任務。 例如,它可以在處理請求時提交背景工作。