簡介
在 3 種類型的雲中 —— 公共雲、私有雲和混合雲 —— 公共雲提供的產品是最出色、最成熟的。可訪問性和廉價性是導致公共雲日趨流行的兩個關鍵特征。為了實現可訪問性和廉價性,Amazon Elastic Compute Cloud (EC2) 基礎設施提供了宿主 Amazon Machine Image 實例的公共雲,AMI 可向用戶交付各種功能。為了讓用戶能夠利用 EC2,IBM 最近發布了 Amazon Machine Images (AMI),它包含了一些針對 EC2 平台的流行軟件;這些 AMI 可以根據開發許可免費獲得。此外,IBM 還支持運行在 EC2 基礎設施中的特定 IBM 軟件。
本文概述了公共雲,並討論了如何使用 IBM WebSphere sMash 和 IBM DB2 Express-C Amazon Machine Images 交付宿主在 EC2 基礎設施上的 Web 應用程序。
企業和公共雲
為了理解企業如何才能利用公共雲計算解決方案,請從以下兩方面考慮:
企業使用公共雲提供的應用程序。這個應用程序可能用於處理雇員的工資數據,也可能是一個客戶關系管理系統。通過利用以這種方式交付的應用程序,企業就不再需要在私有數據中心上安裝和維護應用程序。企業還可能節省一部分與許可費用相關的成本,因為大部分雲提供的服務都是根據使用量計費的。
企業利用基於雲的宿主解決方案向用戶交付應用程序。通過這種方式,企業就不再需要維護和更新產品系統,因為雲供應商負責提供基礎設施資源,以滿足用戶對應用程序的需求。這個模型還能促進企業服務的普及,因為任何連網的計算機都可以隨時隨地訪問通過公共雲交付的解決方案。
不管在什麼場景下,一個常見的主題就是業務的底線價值。很明顯,公共雲能夠幫助企業減少與擁有軟件和數據中心基礎設施組件相關的成本。雖然不是很直觀,但是使用公共雲能夠讓企業快速響應服務需求變更,從而使服務能夠進入新的市場,並且讓寶貴的人力資源集中於業務創新,而不是僅交付支持業務的技術基礎設施。
IBM 和公共雲
IBM 是公共雲的積極貢獻者,它提供的解決方案讓企業能夠從雲獲得應用程序,以及通過公共雲交付自己的終端用戶應用程序。從應用程序提供商的角度來看,IBM 提供了 IBM Lotus® Live、IBM Lotus Sametime® Unyte® 和宿主在公共雲上的軟件開發工具。這套工具讓用戶能夠利用雲提供的服務進行交流、討論、協作和創新。除了提供這些服務之外,IBM 的 Global Business Services 部門還幫助組織實現利用公共雲產品的解決方案,從而實現所需的雲價值。
本文的剩余部分主要關注 IBM 如何使您通過利用公共雲基礎設施交付高效的應用程序。如前所述,IBM 在 Amazon Machine Images 中包含了幾個企業級產品,因此可以在流行的 Amazon EC2 基礎設施中使用這些軟件。IBM AMI 包括:
IBM WebSphere Portal
IBM Lotus Web Content Management Standard Edition
IBM WebSphere sMash
IBM Informix® Dynamic Server Developer Edition 11.5
IBM DB2 Express-C 9.5
通過在 Amazon EC2 基礎設施上免費提供這些軟件,IBM 實現了一個為超過 400,000 個用戶提供服務的生態系統,並且吸引了 80% 以上的利用雲計算開發服務的開發人員。
要更多地了解 IBM 關於開發人員和雲計算的信息,請訪問 developerWorks 空間 雲計算 站點。本文分別闡述了 WebSphere sMash 和 DB2 Express-C AMI 的平台即服務(Platform as a Service,PaaS)和數據即服務(Data as a Service,DaaS)。
WebSphere sMash 和 DB2 Express-C
WebSphere sMash 和 DB2 Express-C 都是面向開發人員的強大工具。通過 WebSphere sMash,您可以使用流行的技術和模式(比如 Dojo、PHP、Groovy 和 REST 服務)創建 Web 2.0 式的應用程序。DB2 Express-C 提供高效、響應性好和可靠的企業數據,並且包含了純 XML 處理功能。然而,通過綜合利用這些技術交付響應性好、面向數據的富 Web 應用程序,甚至還能實現更大的價值。
本文包含的樣例應用程序 演示了一個餐館座位應用程序,它粗略的展示了 WebSphere sMash Zero Resource Model (ZRM) 和 DB2 Express-C 數據庫提供的功能。可以輕松地擴展這個應用程序使用的模式,以處理更加復雜的數據和數據關系。Zero Resource Model 通過與 DB2 Express-C 集成提供了豐富的前端體驗,該前端由輕量級的高效、高響應性後端所支持。
設置 AMI
要使用 IBM AMI,必須遵循以下步驟,並且第一步是先決條件:
設置一個 Amazon Web Services (AWS) 帳戶。這個帳戶用於管理 EC2 使用。
獲取並配置 WebSphere sMash AMI 和 DB2 Express-C AMI。在配置 DB2 Express-C 實例時,為了進行演示請使用默認的用戶名。現在還沒有創建數據庫;這些細節在下一小節描述。
根據提供的說明將 AMI 部署到您的 AWS 帳戶。
創建並激活數據庫
在將 DB2 Express-C 和 WebSphere sMash AMI 部署到 EC2 之後,配置正在運行的 DB2 Express-C 實例的數據庫。這個數據庫存儲應用程序需要使用的表。
使用 SSH 登錄並驗證您的 DB2 AMI 實例。在登錄之後,使用 su - db2inst1 命令切換到 db2inst1 用戶。
使用 createDatabase 命令為應用程序創建數據庫。在 /home/db2inst1/bin 目錄中,輸入 ./createDatabase RSTDB 命令。
圖 1. 創建數據庫
圖片看不清楚?請點擊這裡查看原圖(大圖)。
停止並重啟 DB2 服務以激活新的數據庫。使用 su 命令切換回根用戶,然後運行 rcdb2 stop 和 rcdb2 start 命令。
圖 2. 激活數據庫
圖片看不清楚?請點擊這裡查看原圖(大圖)。
在重啟服務之後,RSTDB 數據庫就被激活,並且 DB2 Express-C 實例在端口 50001 上運行。現在,DB2 Express-C 實例的配置已經完成。WebSphere sMash 中的 ZRM 用於與後台集成,因此所有表都被自動配置好。
設置應用程序
WebSphere sMash AMI 實例設置完畢之後,從 http://<ec2_host>:8070/ 登錄到 AppBuilder 應用程序。在這裡,您將創建一個在樣例中使用的 WebSphere sMash 應用程序。為此,單擊 Create new application 在 AppBuilder 的左邊面板中創建一個示例應用程序。當提示輸入名稱時,請輸入 RestaurantSeating。在創建應用程序之後,在控制台的中央面板中單擊應用程序名開始為應用程序添加內容。
利用 Zero Resource Model
受 WebSphere sMash 支持的 ZRM 的目的是大大簡化通過 REST 訪問後台數據存儲。該模型支持通過少量代碼和配置實現這種訪問。僅需為您的數據和資源處理程序(用於處理與數據的 REST 交互)創建一個模型。資源處理程序僅包含少量代碼,用於處理輸入數據,並且 ZRM 完全隱藏了與後端數據庫的交互。
為了開始在示例中使用 ZRM,需要為您的數據創建資源模型。這些資源模型定義應用程序中的數據的格式,並由 ZRM 用於訪問存儲在數據庫中的數據。您現在應該已經登錄到 AppBuilder,因此選擇 New file => Zero Resource Model in app/models => New form。
圖 3. 在 AppBuilder 中創建新的資源模型
圖片看不清楚?請點擊這裡查看原圖(大圖)。
為每個條目創建一個 JSON 數據模型。這些 JSON 模型定義組成資源的屬性。這包括關於屬性的數據類型的信息以及其他信息,比如默認值和數據長度等。因為您創建的是餐館座位系統,所以需要為 4 個不同的條目創建資源模型:
正在等待的顧客
餐桌
座位
服務員
在 WebSphere sMash 中這些模型被聲明為 JSON 格式。您可以使用 AppBuilder 中的設計編輯器,或直接輸入資源模型的 JSON 聲明。不管使用哪種方式,都應該有清單 1 中聲明的 4 個 JSON 文件。
清單 1. 資源模型聲明
// start patron.JSon (model for waiting customers)
{
"fIElds": {
"name": {
"label": "Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
},
"capacity_requested": {
"label": "Number needed",
"required": true,
"type": "integer",
"description": "",
"default_value": ""
},
"seated": {
"label": "",
"required": true,
"type": "string",
"description": "",
"default_value": "false",
"max_length": 5
}
}
}
// end patron.JSon
// start rest_table.JSon (model for restaurant tables)
{
"fIElds": {
"capacity": {
"label": "Capacity",
"required": true,
"type": "integer",
"description": "",
"default_value": ""
},
"table_type": {
"label": "Type",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
}
}
}
// end rest_table.JSon
// start waiter.JSon (model for waiters)
{
"fIElds": {
"name": {
"label": "Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
}
}
}
// end waiter.JSon
// start seating.JSon (model for a seating in the restaurant)
{
"fIElds": {
"table_id": {
"label": "Table Id",
"required": true,
"type": "integer",
"description": "",
"default_value": ""
},
"patron_name": {
"label": "Patron Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
},
"waiter_name": {
"label": "Waiter Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
}
}
}
// end seating.JSon
現在,可以設置資源處理程序了。資源處理程序提供對資源模型定義的數據的 REST 訪問,在這個示例中用 Groovy 語言實現它們。在 app/resources 中選擇 New file => Resource handler 創建 4 個資源處理程序,每個資源模型一個。資源處理程序應該與資源模型同名,但其文件擴展名為 .groovy 而不是 .JSon。在 app/resources 中選擇 Resource handler。每個資源處理程序內部中有一個 onList、onRetrIEve、onCreate、onUpdate 和 onDelete 方法。每個方法分別對應於 HTTP 中的 GET、GET、POST、PUT 和 DELETE 方法。清單 2 顯示了服務員資源模型的資源處理程序示例。
清單 2. waiter.groovy 文件
def onList()
{
ZRM.delegate();
}
def onRetrIEve()
{
ZRM.delegate();
}
def onCreate()
{
ZRM.delegate();
}
def onUpdate()
{
ZRM.delegate();
}
def onDelete()
{
ZRM.delegate();
}
通過用 ZRM.delegate() 代替文件的所有內容,前面的 groovy 聲明可以更加簡潔。沒有必要定義每個方法,但這樣做可以在每個方法中插入定制代碼(必要時)。
創建數據庫表
在創建了資源模型和處理程序之後,您可以在 WebSphere sMash 中使用命令行工具和配置文件創建數據庫表。
使用 SSH 登錄到 WebSphere sMash AMI 實例,並更新 /home/smash/aPPS/RestaurantSeating/config/zero.config 文件。添加後端數據庫的名稱、位置和配置。
清單 3. 集成 ZRM 和 DB2 Express-C
/config/db/zero-resource = {
"class" : "com.ibm.db2.jcc.DB2SimpleDataSource",
"driverType" : 4,
"serverName" : "ec2-75-101-207-229.compute-1.amazonaws.com",
"portNumber" : 50001,
"databaseName" : "RSTDB",
"user" : "db2inst1",
"passWord" : "passw0rd"
}
將 db2cc.jar 和 db2cc_license_cu.jar 復制到 WebSphere sMash 應用程序庫。在前面的步驟中,您已經提供了 ZRM 所需的信息,包括數據資源類名、數據庫位置和數據庫的訪問信息。接下來,因為您指向的是 com.ibm.db2.jcc.DB2SimpleDataSource 數據源類,所以需要確保 WebSphere sMash 能夠使用適當的 DB2 庫。使用 SCP 程序從 DB2 Express-C AMI 實例獲取 /home/db2inst1/sqllib/java/db2cc.jar 和 /home/db2inst1/sqllib/Java/db2cc_license_cu.jar 文件。將這兩個文件復制到 /home/smash/apps/RestaurantSeating/lib 目錄。從 WebSphere sMash 實例的 /home/smash/aPPS/RestaurantSeating 目錄運行 zero 模型,以將新的 JAR 文件添加到應用程序的類路徑。
現在,您可以為數據庫表定義初始數據,這是可選的。為了在創建表之後節省輸入時間,您可以使用一個特性定義一些初始數據,從而在創建表時填充這些數據。這些數據在應用程序的 app/models/fixtures 目錄下的 initial_data.json 文件中定義。這個文件中的條目是在先前步驟中定義的資源模型的實例。要生成表並用初始數據填充它們,請運行 zero 模型 sync 命令。最後,會在 DB2 Express-C AMI 實例上創建表,並且所有在 initial_data.JSon 文件中定義的數據都將在表創建之後插入到其中。
創建用戶界面
現在,需要讓系統的用戶能夠查看數據並與之交互。WebSphere sMash 提供定制的 Dojo 小部件,它們可以利用 ZRM 中的實用程序訪問數據庫中的數據。這些小部件提供開箱即用的功能。您可以將它們放置到 Html 頁面的任何位置,以提供必要的配置信息,結果將得到一個非常友好的界面,在其上,可以使用先前創建的資源處理程序創建、讀取、更新和刪除後端數據庫中的數據。
定義一個與 ZRM 資源處理程序交互的 DataStore,並定義一個使用 DataStore 的 DataGrid。在餐館座位系統中,引位員必須能夠查看當前正在等待的顧客,添加新的顧客,以及查看當前的座位數。您可以使用 zero.resource.DataStore 和 zero.grid.DataGrid 顯示顧客信息。(還可以將該技術應用到座位數據 —— 或任何配置為使用 ZRM 的數據)。
清單 4. 顧客 DataGrid 和 DataStore
// patron DataStore
<span dojoType="zero.resource.DataStore" id="patronDataStore"
JSId="patronDataStore"
contextRoot="./resources"
resourceCollection="patron">
</span>
// patron DataGrid
<div dojoType="zero.grid.DataGrid"
id="patronDataGrid"
visibleFIElds="name,capacity_requested,id"
store="patronDataStore"
readonly="true"
style="width: 348px; height: 271px;">
</div>
DataStore 引用顧客 (patron.JSon) 資源集,而 DataGrid 引用 DataStore。圖 4 顯示了輸出的結果。
圖 4. 顧客 zero.grid.DataGrid
除了顯示數據的 DataGrid 之外,您還可以添加新的顧客或為現有的顧客找到座位。可以使用 ZRM 輕松地將新數據添加到後端數據庫中。(在本文包含的 下載文件 中可以查看用於捕獲這一信息的 Html 表單和樣式)。
清單 5. 添加新的客戶數據
function addPatron() {
dojo.xhrPost({
url: "resources/patron",
form: "addPatronForm",
load: function (data) {
hideAddPatron();
displayWaitingPatrons();
},
// Call this function if an error happened
error: function (error) {
console.error ('Error: ', error);
}
});
}
使用 Html 和 Javascript™ 與 ZRM 資源處理程序進行通信。前面的例子導致調用 patron.groovy 資源處理程序,該處理程序從內部委托 ZRM 使用新數據填充 DB2 數據庫。圖 5 擴展了先前描述的概念,從而解決了當前座位數信息的顯示和更新。使用一些 Html 和 JavaScript 代碼生成如圖 5 所示的用戶界面。
圖 5. 餐館座位系統的用戶界面
圖片看不清楚?請點擊這裡查看原圖(大圖)。
最後得到一個簡潔、美觀、易用的用戶界面,它讓引位員能夠完全控制餐館的座位情況。
結束語
您可以下載針對本文樣例的完整 WebSphere sMash 應用程序的代碼。您需要一些資源來試用這個應用程序,並且可以利用 AMI 和 EC2 駐留 WebSphere sMash 和 DB2 Express-C 平台。遵循本文提供的說明步驟,快速啟動和配置 AMI 以在 Amazon EC2 中使用它們。
通過 WebSphere sMash 的 ZRM,您可以關注數據、數據關系以及如何更好地向用戶顯示這些關系,而不是關注數據庫通信的低級方面。將這些優點和 DB2 Express-C 提供的健壯、響應性強並且全面的數據庫功能結合起來,您就可以通過浏覽器交付豐富的、面向數據的用戶體驗。