正是基於這樣的趨勢,IBM 發佈了自己的公有雲產品,產品名稱是 IBM Bluemix,目前正處在公開測試階段。 Bluemix 建立在 Apache 開源專案 Cloud Foundry 之上,並提供了 IBM 及其合作夥伴開發的高品質的服務(Services)供 IT 從業人員使用。 本文以 Bluemix 平臺的核心元件 - Bluemix JAVA 運行時為主線,來向讀者介紹 IBM 公有雲產品 Bluemix,和讀者一起去領略平臺雲給 IT 帶來的變化。
這是一個耳熟能詳的傳說:傳說中,鳳凰是人世間幸福的使者,每五百年,它就要背負著積累于人世間的所有不快和仇恨恩怨,投身于熊熊烈火中自焚,以生命和美麗的終結換取人世的祥和和幸福。 在肉體經受了巨大的痛苦和輪回後它們才能獲得更美好的軀體得以重生。 佛教徒把這個故事稱為「涅槃」。
的確,一切苦難和磨礪的盡頭也是新的希望開始的地方。 作為 IT 從業人員,特別是程式師的你,是否也想過或者期望經歷這樣的涅槃呢? 如果你曾經或者現在正在經歷如下的痛苦,那麼 Bluemix 就是為你而準備的。
不停的安裝各種運行時,容器以及繁雜的協力廠商依賴包 安裝並配置一切必須的服務(資料庫,移動服務等) 將所需的服務與應用進行關聯,配置埠/IP/防火牆等 建立動態路由以及負載均衡機制 保證從底層到應用層各個層次的高可用性 確保日誌的完整收集和高效分析 日常要做好應用的性能監控 保證應用可以根據負載的大小進行靈活的伸縮 最後,不斷的重複著 開發》測試》上線 的輪回
Bluemix 帶來了什麼
Bluemix 致力於解決上述在軟體發展過程中遇到的問題,旨在協助程式員更快速的開發,測試,部署和運維雲平臺應用。
什麼是 Bluemix?
簡單的講,Bluemix 就是一個開放的公有雲平臺,允許程式師在上面運行幾乎所有類型的應用,而不用為硬體,軟體,網路等其他因素分心。 如上文提到,Bluemix 處於雲世界的中介層,也就是 PaaS 層。 如下圖所示:
圖 1. Bluemix 扮演的角色
通常來講,所謂 PaaS 指的是運行在 Iaas 層上的一系列軟體服務,並把伺服器平臺或開發環境作為一種服務提供給使用者,也就是「平臺即服務」。 Bluemix 運行在 IBM 的 IaaS 層產品 Softlayer 之上。 Softlayer 在 2013 年被 IBM 收購,其主要為使用者提供企業級的 IT 基礎設施的建設和解決方案,無論是在性能還是在安全性上都有很高的品質保證,有興趣的讀者可以參考文章最後的資源連結進一步學習。 使用者的應用程式通過很簡單的操作(大部分場景只需要一條簡單的命令即可)就能部署應用到 Bluemix 環境裡,程式師不需要去關心底層的作業系統,運行時,網路等等一切和 code 本身無關的東西, 而可以把全部的精力放到程式的設計和優化上。
選擇 Bluemix 的理由
Bluemix 作為 PaaS 層產品給程式師帶來了很多的優勢:第一,節省時間和精力,程式師可以把所有的心思都放在應用程式的編寫和調優上,而不用去擔心繁雜的平臺基礎架構和設施,更有利於發掘程式師的創造力,開發出更高品質, 高性能的應用;第二,加速應用程式上線,在實際的操作中,只需要簡單的幾條命令或者 UI 介面的幾次點擊操作就能輕鬆的完成各種應用程式的部署,而完全不用去擔心硬體採購,軟體安裝等等這些先期準備工作;第三, 很容易的滿足應用程式對各種新功能和新服務的需求,IBM 及其合作夥伴負責提供優質的服務,程式師只需要簡單的「綁定」操作就能將服務加入到應用程式中;第四,Bluemix 支援的語言,運行時,框架等都是程式師已經熟知的,採用 Bluemix 平臺幾乎不需要增加新的學習成本;最後一點是,Bluemix 底層採用 IaaS 是可以提供企業級需求的 Softlayer,可以有效的保證平臺的高性能和高安全性。
目前,Bluemix 正處於公開測試階段,程式師只需要簡單的註冊就能輕鬆的使用 Bluemix 提供的平臺雲服務。 在測試階段,每個註冊帳號可以獲得 8G 的記憶體空間用來部署和運行足夠多的應用,其中還包括多達 20 個雲服務的使用權,註冊網址是:www.bluemix.net
Bluemix 運行時和 Buildpacks
在 Bluemix 中程式運行時是以 Buildpacks 的形式提供給使用者的,通過下面這張圖,可以瞭解運行時和 Buildpack 的關係。
圖 2. 圖解 Buildpack
在 Bluemix 中自帶四種 Bludpacks,分別是 Liberty for JAVA,Node.js,Ruby on Rails,Ruby Sinatra。 如果部署的應用是上面四種語言之一,那麼在部署應用的時候就不需要指定相應的 Buildpack,平臺自身會根據部署的應用類型選擇對應的 Buildpack。 在本文開始的部分,我們提到 Bluemix 支援幾乎所有類型的應用,那麼除了上面四種應用,其他類型的應用又是通過什麼方法進行部署呢? 答案就是在部署應用的時候,明確的指定應用所需的 Buildpack 類型,這些 Buildpack 有的來自社區,有的來自程式師自己的開發,因為 Bluemix 是一個開放的雲平臺架構,允許協力廠商根據其標準去做一些客制化的拓展。 下圖所列的就是目前 Bluemi 支援的運行時類型。
圖 3. 運行時(Runtimes)
Bluemix 提供的服務(Services)和功能外掛程式(Add-Ons)
應用程式往往不是單獨存在的,它需要額外的附加一些新的價值才能使其豐富起來,在 Bluemix 中這些應用程式的附加值是通過服務(Services)和功能外掛程式(Add-Ons)來實現的。 在 Bluemix 中,為程式師提供了分門別類的多種服務,這些服務主要包括:Web 和應用服務,移動開發服務,資料管理服務,大資料,DevOps 服務等等。 Bluemix 可以做到以最小的代價將相應的服務添加到應用程式中,以此來豐富應用程式,這些操作既可以通過命令列,也可以通過基於瀏覽器的 UI 來完成。 在使用過程中,使用者可以創建多個服務的實例,同樣多個應用也可以同時使用同一個服務實例。
功能外掛程式(Add-Ons)可以理解成一種特殊的服務,這些功能外掛程式是為運行時來提供更高層次的附加功能。 使用者可以根據自己的需求,選擇應用是否連接到一個或者多個功能外掛程式上,以此來豐富運行的應用程式。 功能外掛程式與服務的不同之處在于,同一個 Space 裡,只能有一個功能外掛程式實例,多個應用去連同一種功能外掛程式的時候,實際上連的是同一個外掛程式實例,共用同一份服務資源。
對於服務和功能外掛程式來說,當某一個服務綁定到應用中,或者當應用連接到某一個功能外掛程式上時,關於這個服務和功能外掛程式的相關服務資訊就會被寫進一個成為「VCAP_SERVICES」的系統內容變數中,使用者可以在代碼裡通過調用 System.getenv(「VCAP_SERVICES」) 來獲取具體的資訊,這些資訊是遵循一定的格式的 JSON 字串,例如對於某一個資料庫的服務,讀到的環境變數裡主要就是資料庫的連接資訊, 使用者可以在應用程式裡獲取並建立與資料庫的連接。
如何使用 Bluemix JAVA 運行時
BlueMix 為程式師提供了多種方法開發,測試應用並最終運行在 Bluemix 運行時中,本文主要關注 Bluemix JAVA 運行時,並向讀者介紹最常用的幾種方法,其他運行時的使用方法和本文介紹的類似,讀者可以自行使用。
使用命令列工具部署和管理應用
命令列工具一直受大多數程式師歡迎,高效並且高性能,你想在 Bluemix 上做的任何事情,都可以通過命令列工具來完成。 比如下面所列,是我們和應用打交道時用到的最頻繁的操作。
應用的部署,啟動,停止,重啟以及刪除、 服務的創建,綁定,以及解除綁定等操作 查看和監控應用程式的日誌
命令列工具的安裝也很簡便,請首先閱讀文章末尾的參考資源安裝命令列工具。 使用 Bluemix 之前,需要首先註冊 Bluemix 帳號,訪問 www.bluemix.net 註冊 Bluemix 帳號,當這些都完成以後,讓我們開始你的平臺雲之旅吧!
當使用命令列部署 JAVA EE 的應用到 Bluemix 的時候,Bluemix 支援三種格式應用的部署,分別是:WAR,EAR 以及直接上載一個 Liberty server 到 Bluemix。 除了支援這三種格式的打包檔外,還支援將打包檔解壓成目錄結構,通過命令列將整個目錄結構上傳並部署到 Bluemix 環境。 我們這裡將以一個 WAR 應用為例子來詳細講解每一步的操作,關於其他兩種格式的應用的部署與 WAR 應用的部署幾乎是一樣的,詳細介紹請閱讀參考資源——部署 Liberty 應用到 Bluemix。
登錄 Bluemix
使用之前註冊的使用者名和密碼登錄到 Bluemix,為部署應用做準備:
首先,使用「cf api」建立于 Bluemix 的連接,連接位址是 HTTPs://api.ng.bluemix.net
清單 1. 連接 Bluemix
USAGE: cf api [URL]C:\Users\IBM_ADMIN>cf api HTTPs://api.ng.bluemix.netSetting api endpoint to HTTPs:// api.ng.bluemix.net... OKAPI endpoint: HTTPs://api.ng.bluemix.net (API version: 2.2.0)Not logged in. Use 'cf login' to log in.
其次,運行「cf login」登錄到 Bluemix 並選擇所要工作的組織和空間
清單 2. 登錄 Bluemix
USAGE: cf login [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE]C:\Users\IBM_ADMIN>cf loginAPI endpoint: ht tps://api.ng.bluemix.netUsername> xiuleizh@cn.ibm.comPassword>Authenticating... OKSelect an org (or press enter to skip):1. xiuleizh@cn.ibm.com2. OE_Runtimes_SVTOrg> 1Targeted org xiuleizh@cn.ibm.comTargeted space devAPI endpoint: HTTPs:// api.ng.bluemix.net (API version: 2.2.0)User: xiuleizh@cn.ibm.comOrg: xiuleizh@cn.ibm.comSpace: dev
部署應用到 Bluemix
本文提供一個例子應用供大家下載部署使用,這個應用是 HelloWithMongo.war,裡面包含了一個簡單的 servlet 以及一些對 Non-SQL 資料庫 Mongo 的基本操作,在 Bluemix 提供的資料庫服務裡包含了 Mongo 資料庫,我們直接拿來使用。
運行「cf push」命令來部署應用到 Bluemix:
清單 3. 部署應用到 Bluemix
USAGE: Push a single app (with or without a manifest): cf push APP [-b BUILDPACK_NAME] [-c COMMAND] [-d DOMAIN] [-f MANIFE ST_PATH] [-i NUM_INSTANCES] [-m MEMORY] [-n HOST] [-p PATH] [-s STACK] [-t TIMEOUT] [--no-hostname] [--no-manifest] [--no- route] [--no-start]C:\Users\IBM_ADMIN>cf push HelloMongoDW -p C:\A_Workspace\apps\HelloWithMongo.warCreating app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.ibm.com... OKUsing route hellomongodw.ng.bluemix.netBinding hellomongodw.ng.bluemix.net to HelloMongoDW... OKUploading HelloMongoDW... Uploading from: C:\A_Workspace\apps\HelloWithMongo.war53.4K, 14 filesOKStarting app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.ibm.com...-----> Downloaded app package (484K)OKBuildpack Version: 2014 0527-0132-----> Downloading IBM 1.7.0 JRE from HTTP://file.icap.cdl.ibm.com/icapShared/jre/ ibm-java-jre-7.0-6.0-linux-x86_64-small-footprint-uncompressed-jar-20140116.tar.gz (0.0s) Expanding JRE to .java ( 1.2s)Downloading from output/wlp/com.ibm.ws.liberty-2014.4.0.0-201405270132.tar.gz ... (0.0s). Installing archive ... (0.6s).-----> Uploading droplet (93M)0 of 1 instances running, 1 starting1 of 1 instances runningApp startedShowing hea lth and status for app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.ibm.com... OKrequested state: startedinstances: 1/1usage: 1G x 1 instancesurls: hellomongodw.ng.bluemix.net state since cpu memory di sk#0 running 2014-05-30 06:45:02 PM 0.6% 329.8M of 1G 179.1M of 1G
部署成功以後可以運行「cf apps」查看應用的運行狀態。 在這裡有幾點需要說明:第一,<app_name>最好要做到唯一,不和部署在 Bluemix 上的其他應用重複,因為預設情況下這個<app_name>會和 domain 組成應用的訪問連接,即:< app_name>.ng.bluemix.net,每一個應用的訪問連接應該是唯一的,如果不是唯一,部署的過程中會報錯提醒,我們只要換一個不一樣的名字即可;第二,cf push 命令預設會將目前的目錄下的所有內容 push 到雲端,除非我們顯示的使用 –p 參數顯示的指定要部署的內容;第三,從上面的輸出中可以看到,應用的訪問路徑是「urls: hellomongodw.ng.bluemix.net」,即「HTTP:// hellomongodw.ng.bluemix.net」,這也是預設的 Bluemix 中應用的訪問路徑的統一格式「appname.domain」。