閱讀936 返回首頁    go iPhone_iPad_Mac_apple


根據您的需要選擇最佳 PaaS 雲

平台即服務 (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” 應用程序。

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class 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 服務允許用戶調度按固定時間間隔運行的任務,例如,每天或每小時運行一次。應用程序甚至可以執行添加到隊列本身的任務。例如,它可以在處理請求時提交後台任務。

Windows Azure

Windows Azure 是 Microsoft 的 PaaS 產品。它在概念上類似於 Google App Engine,允許在 Microsoft 數據中心內托管並運行基於 Microsoft 技術的應用程序。它的 Fabric Controller 會自動管理資源、平衡負載和複製,以獲得靈活性,並管理應用程序生命周期。

Windows Azure 平台在專用操作係統上被構建為托管在 Microsoft 數據中心內的分布式服務。它是分為三個部分來實現的:計算、存儲和一個用於管理 fabric 的平台。計算實例是作為一種角色類型向用戶公開的,指定了針對典型應用調整的配置。Web 角色實例通常與用戶交互並托管主機 Web 站點和其他前端代碼。而 worker 角色實例執行與 Google App Engine cron 類似的後台任務。

盡管 Web 和 worker 是最常見的角色類型,但 Windows Azure 仍然針對特定需求提供了額外的模板。例如,CGI Web 角色支持 FastCGI 協議,因此能夠支持其他編程語言,包括 PHP、Ruby、Python 和 Java。Windows Communications Foundation (WCF) 是一個簡化 WCF 服務支持的 Web 角色。Windows Azure 現在還提供了一個基礎架構服務(通過 VM 形式),可以接受 Windows Server® 2008 R2 VM 映像的上傳。

Windows Azure 存儲提供了可托管三種數據的服務:

  • Blobs。 Blobs 是非結構化數據流(或至少是模煳數據);數據可以是一張圖片、一個文件或任何應用程序需要的東西。
  • 表。表用於存儲結構化數據。它們通常保存一些相同類型的行(稱為實體),這些行是根據一些列(稱為屬 性)來定義的。盡管在概念上有一些相似,但 Windows Azure 存儲表和關係表仍然存在一些顯著的差異。Windows Azure 不會強製要求使用模式,也不會支持使用 SQL 作為查詢語言。
  • 隊列。隊列為應用程序執行異步通信和協調提供了一種機製。

Windows Azure 術語中的 “fabric” 一詞指的是運行 Windows Azure 操作係統的一組機器,它們被共同管理,通常位於同一個區域。Fabric Controller 是一個代碼層,指配了所有用戶實例(Web 和 worker 角色)並執行任何必要的更新。它還監視應用程序,根據需要重新指配和分配資源,確保所有服務都能正常運行。

Force.com

Salesforce.com 也交付一種稱為 Force.com 的 PaaS。它與 Google 和 Microsoft 的產品不同。它也基於自身技術提供了托管服務,並提供了冗餘、安全和可擴展等常見特性。但是 Force.com 更加側重於數據處理而不是代碼處理。

外部編程訪問

Force.com 將所有特定於用戶的配置(表、報告、工作流、用戶特權、定製和業務邏輯)公開為元數據,通過編程方式訪問它們。它提供了一個 Web 服務 API (SOAP),允許從任何環境訪問所有 Force.com 應用程序數據。該平台還提供了開發人員工具箱,適用於 Microsoft .NET、Java、Facebook、Google、AWS 以及 ERP 的預打包連接器(SAP R/3 和 Oracle Financials)、桌麵軟件(Microsoft Office、IBM® Lotus Notes®)和中間件(Tibco、Pervasive、IBM Cast Iron®)。除了常規數據訪問外,Force.com 還使用了一個外部搜索引擎,提供完整的索引並允許搜索非結構化數據。

Apex

Force.com 應用程序是使用 Visualforce 和 Apex 構建的,Visualforce 框架用於創建圖形用戶界麵,而 Apex 是一種專門的編程語言,使用的語法類似於 Java,但是行為更加類似於數據庫存儲流程(參見清單 2)。

清單 2. Apex 帳戶更新

				
// This class updates the Hello field on account records that are
// passed to it.
public class MyHelloWorld {
   public static void addHelloWorld(Account[] accs){
      for (Account a:accs){
        if (a.Hello__c != 'World') {
           a.Hello__c = 'World';
        }
      }
   }
}

Force.com 有三種程序邏輯:

  • 聲明式邏輯(審計日誌、工作流和批準)
  • 基於公式的邏輯(數據驗證和工作流規則)
  • 過程式(procedural)邏輯(Apex 觸發器和類;清單 3)
trigger helloWorldAccountTrigger on Account (before insert) {
   Account[] accs = Trigger.new;
   MyHelloWorld.addHelloWorld(accs);
}

Apex 可以作為獨立腳本根據需要運行,也可以作為觸發器在出現數據事件時運行,如清單 3 所示。該語言允許開發人員向事件添加業務邏輯,如單擊按鈕或者更新記錄和 Visualforce 頁麵。工作流邏輯可以觸發任務,發送電子消息,更新數據庫,通過將出局 SOAP 消息發送到任何 Internet 目的地與外部應用程序進行交互。

Amazon Web Services

Amazon 是基礎架構服務的市場領導者和事實標準。AWS 與更典型的平台服務之間的主要區別在於 Amazon 沒有建立特定的運行時環境。您可以使用其中一種 Amazon 預構建機器映像,但是並不局限於這些機器,您可以在 Amazon 環境中運行幾乎任何平台。

這樣做的必然結果是:盡管 Amazon 提供了一種管理和分布 VM 的方法,它並沒有直接提供特定的功能來管理應用程序。

圖 1 提供了一個 Amazon Elastic Compute Cluster (Amazon EC2™) 界麵的示例。

圖 1. Amazon EC2
顯示 Amazon EC2 界麵

AWS 的核心組件是 Amazon EC2 及其附加的存儲服務。Amazon EC2 為用戶提供了一個模板選擇,可以在共享的虛擬化環境中實例化該模板(如圖 1 所示)。每個 VM 都是在 Amazon Machine Image (AMI) 中調用的。Amazon AMI 沒有任何持久性存儲,但是可以在實例保持活躍的情況下將它們用於日誌、結果和中間數據。由於本地安裝的 AMI 磁盤在實例化期間丟失,Amazon 還提供了兩個永久性存儲功能:Amazon Simple Storage Service (Amazon S3) 實現了關鍵值存儲,而 Amazon Elastic Block Store (Amazon EBS) 提供了文件係統的基礎。

還可以將更多結構化數據存儲到 Amazon SimpleDB 中。將它們用於通用查詢或 Amazon Relational Database Service (Amazon RDS),這是一個 Web 服務,可以在雲中設置、運行和擴展關係數據庫。

除了計算和存儲外,Amazon 還提供了一套增值服務,包括內容交付、隊列通知、負載平衡、自動擴展、指配和監視。

Amazon 在提供完整 PaaS 支持方麵最大的一個舉措就是發布了 AWS Elastic Beanstalk,該服務麵向 Java 開發人員並基於 Apache Tomcat 軟件棧構建。用戶可以使用 AWS Management Console、AWS Toolkit for Eclipse、Web 服務 API 或命令行工具將任何標準的 Java Web 應用程序歸檔文件上傳到 AWS Elastic Beanstalk。

VMware

在私有數據中心托管應用程序為您提供了最大程度的控製能力和靈活性。在選擇的硬件上使用所需的任何 Web 框架安裝好 Apache 或 Microsoft Internet Information Services (IIS) 之後,您就可以上傳已經在自己的環境中開發出來的應用程序。您可以選擇自己的編程語言,而且可以自由地實現任何必要接口,以便連接到遺留或合作夥伴係統。 您隻需要安裝 PHP、Python/Django、Ruby/Rails 或一組完整的 Java 工具接口。最大的缺陷是您不能自動獲得任何雲計算有關的。您可以在內部重現這些優勢,但是這樣做要求投入大量工作並進行一定程度的投資,而這可能隻適合大 型企業。

對於那些決定實施私有雲的人們,要獲得性能、利用率和自動化方麵的優勢,可能需要用到一些工具、產品和服務。VMware 的強大的虛擬化技術組合可以幫助滿足這些需求。

VMware 的麵向雲的活動大部分是在其 VMware vCloud 計劃中開展的。vCloud 代表一些支持技術,包括 VMware vSphere、vCloud API 和 vCloud 服務供應商生態係統。vSphere 平台是 VMware 的旗艦產品,它是一個虛擬化框架,能夠管理大型基礎架構池,包括來自內部和外部網絡的軟件和硬件。vCloud API 是一個具態傳輸接口(Representational State Transfer interface 和 RESTful),用於在雲中提供和消費虛擬資源。它支持在私有、公共和混合雲中部署和管理虛擬化工作負載。此 API 支持虛擬設備 (vApps)、網絡和 “虛擬數據中心” 的上傳、下載、實例化、部署和操作。vCloud API 的兩個主要組件是 User API(側重於 vApp 指配)和 Admin API(用於平台/租戶管理)。

vCloud 服務供應商生態係統是一個常見的雲計算服務集合,麵向企業和服務供應商,支持任意應用程序或操作係統,能夠選擇應用程序所在的位置(本地或異地)。它由 Terremark 和 Hosting.com 之類的服務供應商交付,包括一些可用作虛擬設備的應用程序。

除了麵向基礎架構的產品之外,VMware vFabric 還提供一個私有平台服務,它將 Spring Java 開發框架與一些集成服務結合在一起,這些服務包括應用服務器、數據管理、雲就緒的消息傳遞、負載平衡和性能管理。

IBM SmartCloud Application Services

對於那些希望利用公共雲的優點,同時要求在安全性、定製和內部應用程序集成方麵滿足企業級標準的用戶,IBM 還提供了 IaaS(IBM SmartCloud Enterprise)和 PaaS(IBM SmartCloud Application Services)。這兩者關係密切,因為 IBM SmartCloud Application Services 自動將虛擬資源部署到 IBM SmartCloud Enterprise。它們共同交付安全的、協作式的、基於雲的環境,支持並加快完整的應用程序生命周期 —— 開發、部署和交付。圖 2 提供了 IBM SmartCloud Application Services 界麵的一個示例。.

Figure 2. IBM SmartCloud Application Services
圖片顯示了 Amazon EC2 界麵

IBM SmartCloud Application Workload Services 包含最初在 IBM Workload Deployer 中引入的高級模式技術。這種高級模式技術提供了可輕鬆創建、部署和管理專業技術模式的能力。專業技術模式根據多年的經驗嵌入了最佳的實現、配置、管理和監 視實踐,可以實現特定的軟件解決方案。這些模式由 IBM 和獨立軟件供應商通過一個在線目錄提供。專業技術模式已進行了簡化,可以快速創造價值,同時確保獲得一致、可預測的結果。用戶還可以使用 IBM SmartCloud Application Workload Services 附帶的集成工具創建定製的專業技術模式,並在整個組織中共享這些模式。

這種高級的模式技術也包含在 IBM 的新的 PureSystems 係列中:

  • IBM PureApplication™ System:專門針對事務 Web 和數據庫應用程序及其工作負載感知特性而設計並優化的平台係統。
  • IBM PureFlex™ System:包含用於管理存儲、網絡、RAS、安裝和安全任務的模式的平台。

標準化和可移植性

上述的每一個平台都各有優缺點。開發人員麵對的最大挑戰是這些平台都各不相同。在一個平台上開發的應用程序很難在另一個平台上正常運行。

為了保障用戶投資並降低供應商綁定風險,要求對平台進行整合的唿聲日益強烈,許多標準組織都從各自的角度實現雲計算。最著名的計劃集中在 IaaS 上,但也逐漸增加了 PaaS 功能。從較高的層麵上看,它們采用了兩種不同的方法:

  • Eucalyptus 和 CloudStack 提供了與 AWS 的兼容,因此使用 Amazon 為混合雲提供了便利。選擇 Amazon 的好處是它的接口比較受認可,而 AWS 提供了巨大的容量,能夠滿足突然增加的資源需求。然而,Amazon 擁有 API,並且可以選擇采用任何方向開發它們,這意味著它們並不是完全開放的。
  • OpenStack 是一些開源技術項目的集合,它們由廣泛的行業領先者聯盟(包括 IBM)共同讚助。它提供了一個操作平台,可以以較大的規模對雲進行組織。它與管理程序是中立的,並且包含了在標準硬件上指配 VM 的軟件。除了計算池外,它提供了一個分布式對象存儲、一個調度程序、網絡控製器和身份驗證管理器。

結束語

隨著這些標準計劃的不斷成熟,您可以預見的是:某個行業標準平台將會日漸具體化並超越本文所述的眾多特性。在此過程中,您需要嚐試使用各種不同的平台和軟件棧。

由於每個平台都有各自的優缺點,用戶需要進一步查看自己在編程語言和開發工具方麵的需求,以及在連接、可擴展性和安全方麵對基礎架構的依賴性。好消息是您有許多選擇,這增加了找到適合自己的平台的幾率。但壞消息是用戶必須做出選擇,這並不是一件容易的事。

最後更新:2017-04-02 00:06:55

  上一篇:go 國外牛人使用160台Mac mini打造數據中心機架
  下一篇:go Windows將有重大調整 或進軍移動終端