歡迎您光臨本站 註冊首頁

現實中的開放源碼雲計算,第 2 部分: 針對雲進行開發

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
您可能對這樣的說法 —— “一次編程,處處可用” —— 早有耳聞。但是如果想要為運行在某個雲中的應用程序編程,恐怕真的需要知道其中的究竟。在 “現實中的開放源碼雲計算” 系列的第 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
				  <?php  // ** 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 Cloud 上得到了很好的體現。

在本文中,您了解了 Aptana 是如何簡化基於 PHP 與 MySQL 的應用程序開發的,也學會了如何將應用程序部署到雲。這個 “真實的開放源碼雲計算” 系列文章的下一篇將會探究部署在雲上的應用程序的生命周期的其他內容。(責任編輯:A6)



[火星人 ] 現實中的開放源碼雲計算,第 2 部分: 針對雲進行開發已經有636次圍觀

http://coctec.com/docs/linux/show-post-68896.html