現實中的開放源碼云計算,第2部分:針對云進行開發
概述:本文使用一個看似簡單的應用程序和為人熟知的開源技術來闡釋相關概念和探究云計算的實力。
您可能對這樣的說法 —— “一次編程,處處可用” —— 早有耳聞。但是如果想要為運行在某個云中的應用程序編程,恐怕真的需要知道其中的究竟。在 “現實中的開放源碼云計算” 系列的第 2 部分中,了解如何使用 PHP 編寫一個運行在 Aptana 云計算平臺上的應用程序。探索云應用程序和傳統的 N 層應用程序之間的關鍵設計差異。
關于本系列
在這個分三部分的 “現實中的開放源碼云計算” 系列中,學習如何判斷云計算是否對您有幫助以及如何制定云計算戰略。在第 1 部分中,了解云計算的益處、云的類型和可供選擇的云計算平臺。第 3 部分所涵蓋的是部署在云上的應用程序生命周期的其他部分。
本文中,我們將學習用 PHP 編寫一個簡單的、在 Aptana 云計算平臺上運行的應用程序。另外還將探討云應用程序與傳統 N-層應用程序的設計差異。
云計算架構
要想使軟件穩定運行、執行良好且能進行伸縮以滿足所有的功能需求,至關重要的一點是針對軟件的運行環境來量身打造軟件。這時要考慮您的軟件所運行的環境是您自己的還是別人的。正如您在 現實中的開放源碼云計算,第 1 部分:并不是所有云都相同 看到的,不是所有的云都相同。不同類型的云計算需要不同的設計。需要把基礎云計算平臺與專用云計算平臺區分開來。
針對專用平臺的架構
就架構而言,高度專用的平臺最為復雜。當設計運行在這些云上的應用程序時,需要考慮很多問題。當然,它們帶來的獨特益處足以彌補這些限制。Google App Engine 是一個很好的例子。
當針對 Google App Engine 創建一個應用程序時,僅需創建應用程序源代碼以及需要用到的靜態資源(比如圖片)。您無法控制應用服務器或數據訪問。對此,有一個很好的解釋:App Engine 提供高度可伸縮的解決方案。不過,您需要理解 App Engine 所提供的基礎架構。Google 提供了一個 API(Google Query Language)用來訪問 App Engine 數據存儲。這非常類似 SQL,這樣一來,您就能輕松地開始使用數據存儲了。這個數據存儲不是一個關系數據庫,倒更像是一個簡單的文件系統。
對數據庫的簡單訪問要比對數據庫的查詢(通過主鍵找到一個單一對象)慢一些。關系查詢(例如表連接)是允許的,但要通過多個連續查詢才能實現。這要比關系數據庫上的連接慢得多,因此很難創建一個讓數據存儲超負荷的查詢。
為了充分利用數據存儲,我們通常建議對數據進行反常規處理,比如允許相關數據存儲在一起并被一起檢索。例如,看這樣一個例子:我們需要存儲用戶信息,其中每個用戶都可能具有多個電話號碼。這是一個典型的一對多的關系,并且通常情況下,在數據庫中,都會相應地建立一個用戶表及一個電話號碼表,其中的電話號碼表包括一個指向用戶表的外鍵。您完全可以按同樣的方法用 Google 的數據存儲建模,但將電話號碼封裝為用戶的一部分(作為一個電話號碼的列表或數組),效率會更高。對數據存儲的單一查詢就可以返回您所需要的任何東西。
Google App Engine 并不是使用這個模型的惟一云計算平臺。Amazon 的平臺 SimpleDB 也以同樣的方式工作。您可以在 EC2 上運行 MySQL、Postgres 或任何其他數據庫,但 SimpleDB 最簡單易用,并可提供某些可伸縮性方面的優勢(當不允許連接時,水平伸縮會更容易)。Ning 是另一個專用平臺,也提供類似的訪問模式。 通過使用專用平臺,您能夠獲益良多,但當設計一個運行于這些專用平臺之上的應用程序時,需要牢記它們各自的特點。因此,使用一個基礎云計算平臺往往更簡單些。
針對基礎平臺的架構
基礎平臺,例如 Amazon EC2 或 Joyent Accelerator,允許在其云上運行任何軟件。它對架構的限制較少。如果要針對基礎平臺進行架構設計,可以像處理屬于您自已的平臺一樣任意處理這個平臺。若應用程序需要運行于自已的數據中心或從本地供應商租來的服務器上,該如何設計這個應用程序呢?倘若想在云計算平臺上運行這個應用程序,可能根本不需要對設計做大量更改。
在基礎平臺上運行 Web 應用程序,與在像 Google App Engine 那樣的專用平臺上運行 Web 應用程序非常類似,但不同的是,可以隨意使用所需要的任何應用服務器或數據庫。當然,它的缺點就是您需要建立、安裝、配置并管理所有這些基礎架構。在這方面,云平臺幫不上什么忙。
這里也有一些中間地帶。Aptana Cloud 平臺提供了很多的靈活性,因為它要位于 Joyent Accelerator 之上。Aptana 提供了幾個可供選擇的開源基礎架構,您可以在其上構建應用程序,這就大大減少了工作量。它還有一些很好的工具,可用來簡化部署過程。成功的關鍵就是選用了開源技術。
充分利用開源技術
有了基礎平臺,還需要著手選擇應用服務器、數據庫等。如何選擇呢?如果要構建自已的數據中心,可能就想要使用開源技術。這同樣適用于云平臺。您可以選擇一個 Linux? 或 UNIX? 操作系統、一個具有恰當的編程語言模塊的 Apache Web 服務器以及一個 MySQL 或 Postgres 數據庫。這些都是一些極為常用的選擇,甚至可以找到一些預先配置好的選項。一個更容易的選擇是使用 Aptana Cloud。Aptana Cloud
Aptana Cloud 將開源技術布置在 Joyent Accelerator 平臺之上。由于 Joyent 在 OpenSolaris 操作系統上使用了 Xen 虛擬技術,所以 Joyent 與 Aptana 所使用的開源技術相結合,就產生了一個真正的純開源的平臺。Aptana 使用 Apache Web 服務器、Postfix 郵件服務器及 MySQL 數據庫。它提供了針對 PHP 及 Jaxer 的 Apache 插件,這是一個開源容器,可用于使用服務器端 JavaScript。在撰寫本文時,Aptana 還在 Aptana Cloud 上提供了面向 Ruby on Rails 的私有 beta 版本。
使用 Aptana Cloud 十分簡單。Aptana 的平臺被集成進了它的旗艦產品 Aptana Studio IDE 中。只需下載這個 Studio 并用它創建應用程序,然后將應用程序部署到 Aptana Cloud。如果更愿意使用自已喜歡的工具構建應用程序,也是可以的。只要將它導入到 Aptana Studio 并用 Studio 將應用程序部署到云即可。下面,我們將著重看看如何構建應用程序并將其部署到 Aptana Cloud。構建一個應用程序
本文中的示例應用程序在 Aptana Cloud 上使用了 PHP。要使用 Aptana Studio 開發應用程序,所要做的就是安裝 PHP 插件,如下所示。
圖 1. 為 Aptana Studio 安裝 PHP 插件
安裝完插件后,就可以開始編寫 PHP 了。由于它是一個完整的 IDE,因此可以運行這個 PHP 應用程序,對它進行調試等。它還提供了一個用來與數據庫進行交互的接口。 我們將為這個示例應用程序創建一個定制博客。這種類型的應用程序適合用于簡單的平臺,例如 Aptana Cloud。開始時,可以用少量的資源以較低的開銷先啟動這個應用程序。隨著應用程序受歡迎程度的增加,再給它增加資源(垂直伸縮)。但是,即使是一個很小的應用程序也有可能出現使用 “暴增” 的情況(它將自動地增加 CPU 的使用來進行處理)。如果需要維持大量的用戶,就需要用多個服務器來進行水平伸縮,還有可能需要直接使用 Joyent Accelerator 來處理定制架構。
因示例應用程序是一個博客,我們可以走個捷徑。這個應用程序是在 WordPress 博客軟件基礎上開發的。它是一個純 PHP 應用程序,使用了一個 MySQL 數據庫,這使得它很適合 Aptana Cloud。由于它是開源的,因此只需下載代碼、定制它并將它部署到服務器。在這個示例中,服務器實際上是 Aptana Cloud。
對于任何一個 WordPress 應用程序,我們的首要工作之一就是通過編輯 wp-config.php 腳本對它進行配置,以便設置數據庫訪問和 cookie 安全性。清單 1 給出了一個典型的示例文件。
清單 1. 配置 WordPress
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define(’DB_NAME’, ’wordpress’);
/** MySQL database username */
define(’DB_USER’, ’wpadmin’);
/** MySQL database password */
define(’DB_PASSWORD’, ’your_password_here’);
/** MySQL hostname */
define(’DB_HOST’, ’localhost’);
/** Database Charset to use in creating database tables. */
define(’DB_CHARSET’, ’utf8’);
/** The Database Collate type. Don’t change this if in doubt. */
define(’DB_COLLATE’, ’’);
/** More stuff omitted. */
?> 上述代碼中有幾點需要引起我們的注意。如果是在本地工作站上做開發,那么 MySQL 數據庫很可能也在相同的這個機器上。這就需要將 DB_HOST 設為本地主機。這種設置與在 Aptana Cloud 上使用的設置相同。數據庫將運行于與應用服務器相同的一個機器上。在將它部署到 Aptana Cloud 時,不必更改運行在工作站上的代碼。
WordPress 之所以受歡迎的原因之一就是它是可擴展的。它有很多可用的插件。假如,您的公司不僅僅需要一個可用來與客戶進行交互的博客,還希望在有新博文發布時能通過 Twitter 告知客戶。此時,您就可以使用 WordPress 的 Twitter Tools 插件。它很簡單,是一個 PHP 腳本,您可以下載并復制到 wp-content/plugins 子目錄下。如果這還不能很好地滿足您的要求,您可以修改代碼或編寫您自已的 PHP。
此外,通過創建一個新的主題(一組 PHP 腳本、CSS 文件和圖像)并將代碼放入 wp-content/themes 子目錄,還可以定制 WordPress 的觀感。定制完代碼后,就可以開始將它部署到 Aptana Cloud 了。
部署到 Aptana Cloud
Aptana 的一大優點就是它的部署。只需選擇 Aptana > Cloud > Deploy project 即可完成部署,如下所示。
圖 2. 部署到 Aptana Cloud
在首次將一個項目部署到 Aptana Cloud 時,系統會提示您輸入一些基礎的注冊信息。您有 3 周的時間可以免費部署到 Aptana Cloud,所以不必一開始就輸入付款信息。輸入完基礎信息后,Aptana 將會在云上設置虛擬服務器。
圖 3. 供應 Aptana Cloud
在供應和設置好站點后,就可以著手部署代碼了。您可能不想簡單地將代碼從工作站復制到云,而是想通過源代碼控制管理軟件來進行部署。Aptana 又一次為您提供了所需工具并充分利用了開源技術。Aptana 使用 Subversion 并在云上建立一個源代碼控制存儲庫。部署代碼,實際上是將它添加到了 Subversion。
圖 4. 部署代碼 — 添加到 Subversion
一旦 Aptana 將代碼添加到 Subversion 并完成部署,您就可以用它的 Smart Sync 來更新您對應用程序所做的任何增量修改。Aptana 還提供了一個用戶界面,用來向此應用程序添加團隊成員以便他人也可以從 Subversion 獲取代碼并進行協作。如果多人同時處理一個應用程序,那么它很可能會變得不太穩定。幸運的是,除了生產站點,Aptana 還在云上創建了一個準備站點。在提交給生產站點前,可以在準備站點中對更改進行測試。
部署數據
源代碼控制管理非常適合于將代碼部署到云,但數據又如何部署呢?對于 WordPress,一般先是要在本地安裝,這會導致 WordPress 把配置數據插入到它的數據庫中。隨著插件、主題和其他配置的逐漸添加,會有更多的數據被寫入數據庫。這對于數據驅動應用程序非常典型。配置或種子(seed)數據是必要的。所幸,用 Aptana 進行部署很容易。只需用 mysqldump 命令提取數據庫的轉儲。Aptana 有一些管理數據庫的工具,其中包括流行的 phpMyAdmin 開源應用程序。可以從 Aptana 訪問它,如下所示。
圖 5. 從 Aptana Studio 訪問 phpMyAdmin
通過 phpMyAdmin 應用程序,可以上傳所創建的文件。
圖 6. 上傳 MySQL 轉儲
現在可以將您在本地創建的所有數據移到云中的數據庫了。這個過程主要對應用程序的初始設置有用。也可以在本地生成 SQL 腳本,然后在準備和生產數據庫上運行這些腳本,正如在自已的硬件上運行應用程序一樣。
結束語
在本文中,您了解了 Aptana 是如何簡化基于 PHP 與 MySQL 的應用程序開發的,也學會了如何將應用程序部署到云。這個 “真實的開放源碼云計算” 系列文章的下一篇將會探究部署在云上的應用程序的生命周期的其他內容。
針對云設計并開發應用程序可能需要一些技巧,這主要取決于所使用的云計算平臺的類型。不過,對于很多類型的應用程序,用標準的開源技術可以大大減化您的工作。這種方法在 Aptana Cloud 上得到了很好的體現。
評論
查看更多