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