Bluemix使用與其他雲平臺對比

NO IMAGE

  筆者近幾年做過了一些專案,應用了國內外的幾家雲平臺,包括:Bluemix、阿里雲、七牛、新浪雲等。下面介紹一下各個雲的情況及使用心得。

一、  Bluemix

  Bluemix是來自IBM的最新雲產品,它提供了開放、整合的環境及開發管理工具,使得企業與開發人員能夠快速而又輕鬆地在雲上建立、部署和管理應用程式(web,移動,大資料,新型智慧裝置等)。

  Bluemix是IBM基於 Cloud Foundry 開放雲架構的PaaS平臺,Bluemix不僅提供了企業級服務,還包括其他IBM的軟體服務,第三方服務及開源技術,這些服務可輕鬆地與使用者的雲應用程式相整合,使用者甚至無需知道如何安裝或配置它們。

 

二、    阿里雲

  阿里雲提供的服務比較多,從底層伺服器硬體,到資料庫、到快取服務、到大資料計算等,可以說是應用有盡有。但是對於企業應用、部署,則要求企業的架構人員需要有很強的專業知識才可以完全駕馭。要求架構人員對硬體、網路、軟體、架構等全部瞭解,才可以。並且筆者作為我們企業的架構人員,在使用阿里雲的過程中,對阿里雲提供的各個服務沒有一個全面的瞭解,在應對軟體開發、架構的同時,還需要對阿里雲提供的服務進行了解、測試,這個過程是一個很漫長的過程,並且沒有人員可以諮詢,實在是比較鬱悶。

 

三、    七牛

  七牛是一個雲端儲存平臺,功能雖然不像阿里那麼豐富,但是比較“純潔”,想使用者之所想,把細微功能做到了極致。

四、    新浪雲

  新浪SAE,對於開發者來說,很易用,可以說是把程式設計師給“慣壞了”。使用者什麼也不用考慮,只管開發功能就行了。但是SAE最大的弱點就是速度以及穩定性。這也是我們後來放棄而使用其他雲服務的原因。

 

  總體來說,阿里雲服務,大而全,但是需要使用者專業知識較強。七牛小而精,將雲端儲存做到了極致。新浪功能也很強,很易用,但是致命的弱點,會損失很大一部分使用者的。而IBM的Bluemix可以說是各方面做的都很優秀,功能豐富、簡單易用。Bluemix執行多種開發語言,包括:Java、Php、Ruby、js、Go……

  下面以Java語言為例,講一下如何部署Java執行庫。(以下轉載自ibm網站)

使用命令列工具部署和管理應用

  • 應用的部署,啟動,停止,重啟以及刪除、
  • 服務的建立,繫結,以及解除繫結等操作
  • 檢視和監控應用程式的日誌

命令列工具一直受大多數程式設計師歡迎,高效並且高效能,你想在 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.net
Setting api endpoint to https://api.ng.bluemix.net...
OK
API 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 login
API endpoint: https://api.ng.bluemix.net
Username> [email protected]
Password>
Authenticating...
OK
Select an org (or press enter to skip):
1. [email protected]
2. OE_Runtimes_SVT
Org> 1
Targeted org [email protected]
Targeted space dev
API endpoint: https://api.ng.bluemix.net (API version: 2.2.0)
User: [email protected]
Org: [email protected]
Space: 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 MANIFEST_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.war
Creating app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK
Using route hellomongodw.ng.bluemix.net
Binding hellomongodw.ng.bluemix.net to HelloMongoDW...
OK
Uploading HelloMongoDW...
Uploading from: C:\A_Workspace\apps\HelloWithMongo.war
53.4K, 14 files
OK
Starting app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
-----> Downloaded app package (484K)
OK
Buildpack Version: 20140527-0132
-----> Downloading IBM 1.7.0 JRE from http://file.icap.cdl.ibm.com/icapShared/jr
e/ibm-java-jre-7.0-6.0-linux-x86_64-small-footprint-uncompressed-jar-20140116.ta
r.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 starting
1 of 1 instances running
App started
Showing health and status for app HelloMongoDW in org [email protected] / spac
e dev as [email protected]
OK
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: hellomongodw.ng.bluemix.net
state since cpu memory disk
#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”。

繫結 MongoDB 服務到例子應用

這個例子應用使用了 Mongo 資料庫,在訪問應用之前需要將 Mongo 資料庫繫結到已經部署成功的應用中,在 Bluemix 中使用資料庫也非常簡單,無需安裝,無需做任何配置,只需要簡單的執行幾條命令:

首先,建立一個 Mongo 資料的例項

清單 4. 建立 Mongo 資料庫例項
USAGE:
cf create-service SERVICE PLAN SERVICE_INSTANCE
C:\Users\IBM_ADMIN>cf create-service mongodb 100 mongo_demo
Creating service mongo_demo in org [email protected] / space dev as [email protected]
n.ibm.com...
OK

如果想要得到某一種服務的 SERVICE PLAN,可以單獨執行“cf marketplace”進行檢視,當然,也可以檢視每個服務的說明文件,這些資訊都會在服務提供者提供的使用文件裡進行說明。

其次,當建立好資料庫例項後,需要執行一個繫結的命令將資料庫例項和應用程式進行繫結,比如上面建立的 Mongo 資料庫例項 mongo_demo,使用如下命令進行繫結

清單 5. 繫結 Mongo 資料庫和應用程式
USAGE:
cf bind-service APP SERVICE_INSTANCE
C:\Users\IBM_ADMIN>cf bind-service HelloMongoDW mongo_demo
Binding service mongo_demo to app HelloMongoDW in org [email protected] / spac
e dev as [email protected]
OK
TIP: Use 'cf push' to ensure your env variable changes take effect

當執行完繫結命令後,有的時候我們需要重新執行“cf push”使得資料庫的繫結操作生效,操作很簡單,僅僅是把之前部署應用的命令重新執行一遍,即:

清單 6. 重新部署應用
C:\Users\IBM_ADMIN>cf push HelloMongoDW -p C:\A_Workspace\apps\HelloWithMongo.war
Updating app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK
Uploading HelloMongoDW...
Uploading from: C:\A_Workspace\apps\HelloWithMongo.war
53.4K, 14 files
OK
Stopping app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK
Starting app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
-----> Downloaded app package (484K)
-----> Downloaded app buildpack cache (4.0K)
OK
Buildpack Version: 20140527-0132
-----> Downloading IBM 1.7.0 JRE from http://file.icap.cdl.ibm.com/icapShared/jr
e/ibm-java-jre-7.0-6.0-linux-x86_64-small-footprint-uncompressed-jar-20140116.ta
r.gz (0.0s)
Expanding JRE to .java (1.1s)
Downloading from output/wlp/com.ibm.ws.liberty-2014.4.0.0-201405270132.tar.gz ..
. (0.0s).
Installing archive ... (0.6s).
Downloading from output/wlp/com.ibm.ws.liberty.ext-2014.4.0.0-201405270132.tar.g
z ... (0.0s).
Installing archive ... (0.3s).
-----> Installing client jar(s) from output/serviceClient/mongo-2.10.1.jar (0.0s
)
-----> Uploading droplet (119M)
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
1 of 1 instances running
App started
Showing health and status for app HelloMongoDW in org [email protected] / spac
e dev as [email protected]
OK
requested state: started
instances: 0/1
usage: 1G x 1 instances
urls: hellomongodw.ng.bluemix.net
state since cpu memory disk
#0 running 2014-06-01 06:35:01 PM 0.7% 331.2M of 1G 212.9M of 1G

對比第一次部署應用到 Bluemix 的輸出,最明顯的變化是多了一些關於 Mongo 資料庫的輸出,在重新部署的時候,Bluemix 自動安裝了 Mongo 資料庫的驅動程式,這樣應用就可以正常執行了。

在瀏覽器中輸入“http://hellomongodw.ng.bluemix.net”,將會看成如下頁面:

圖 4. 訪問應用主頁

圖 4. 訪問應用主頁

讀者可以可以看到有兩個連線,點選第一個連線,程式會首先向 Mongo 資料庫中插入幾條資料,然後將這幾條資料檢索出來,並在頁面進行展現,點選 MongoServlet,應用成功返回如下頁面,則說明應用成功執行了。

圖 5. 操作 Mongo 資料庫

圖 5. 操作 Mongo 資料庫

點選第二個連線,程式會列印出環境變數的相關資訊,從中,讀者可以檢視有關 Mongo 資料的連線資訊,如下圖:

圖 6. 列印環境變數

圖 6. 列印環境變數

到這裡我們已經成功的在 Bluemix 上部署並執行了一個示例應用,接下來再介紹幾個常用的和應用程式相關的命令:

清單 7. 其他常用命令

1. 停止,啟動以及重啟應用

停止:

USAGE:
cf stop APP
C:\Users\IBM_ADMIN>cf stop HelloMongoDW
Stopping app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK

啟動:

USAGE:
cf start APP
C:\Users\IBM_ADMIN>cf start HelloMongoDW
Starting app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
1 of 1 instances running
App started
Showing health and status for app HelloMongoDW in org [email protected] / spac
e dev as [email protected]
OK
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: hellomongodw.ng.bluemix.net
state since cpu memory disk
#0 running 2014-06-01 09:28:56 PM 0.6% 338.5M of 1G 212.9M of 1G

重啟:

USAGE:
cf restart APP
C:\Users\IBM_ADMIN>cf restart HelloMongoDW
Stopping app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK
Starting app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
1 of 1 instances running
App started
Showing health and status for app HelloMongoDW in org [email protected] / spac
e dev as [email protected]
OK
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: hellomongodw.ng.bluemix.net
state since cpu memory disk
#0 running 2014-06-01 09:34:03 PM 0.7% 334.8M of 1G 212.9M of 1G

2. 解繫結,刪除服務例項

解繫結:

USAGE:
cf unbind-service APP SERVICE_INSTANCE
C:\Users\IBM_ADMIN>cf unbind-service HelloMongoDW mongo_demo
Unbinding app HelloMongoDW from service mongo_demo in org [email protected] /
space dev as [email protected]
OK

刪除:

USAGE:
cf delete-service SERVICE_INSTANCE [-f]
OPTIONS:
-f Force deletion without confirmation
C:\Users\IBM_ADMIN>cf delete-service mongo_demo
Are you sure you want to delete the service mongo_demo ? y
Deleting service mongo_demo in org [email protected] / space dev as [email protected]
n.ibm.com...
OK

3. 檢視應用日誌

USAGE:
cf logs APP
OPTIONS:
--recent Dump recent logs instead of tailing

4. 刪除應用

USAGE:
cf delete APP [-f]
OPTIONS:
-f Force deletion without confirmation
C:\Users\IBM_ADMIN>cf delete HelloMongoDW
Really delete HelloMongoDW?> y
Deleting app HelloMongoDW in org [email protected] / space dev as [email protected]
ibm.com...
OK

巧用 Manifest.yml 檔案

當我們使用“cf push”命令部署應用的時候,這個命令有可能會變的非常冗長,在清單 3 中我們給出了其用法,這條命令有很多的引數可以選擇,只要我們設定好相應的引數,就可以在一條命令裡執行多個操作,例如:

cf push appName –p myapp.war –b https://github.com/ryanjbaxter/mybuildpack -i 5 –m 512M –no-start

在上述命令中,除了部署應用外,我們還額外指定了應用要使用的 Buildpack,以及應用例項的數量,分配的記憶體大小以及部署後是否選擇啟動,在開發除錯的時候,每次都輸入這麼長的命令會顯的很麻煩,為了解決這個問題,我們可以使用 manifest.yml 檔案,如下是一個示例:

清單 8. Manifest 示例
applications:
- name: appName
path: HelloWorldDW.war
memory: 512M
instances: 5 
buildpack: https://github.com/ryanjbaxter/mybuildpack
services:
- todo-mongo-db

在如上示例中,我們定義了一些在部署應用的時候應該做的操作,當我們需要部署的時候,只需簡單的在命令列裡執行“cf push”即可,不再需要在後面跟很多的引數,需要注意的是:第一,當執行完“cf push”後,命令列會預設載入當前路徑下的 manifest.yml,如果當前路徑下沒有 manifest.yml 檔案,需要在“cf push”後加“-f”引數,指向一個全路徑。

通過 Bluemix 控制檯管理應用

命令列工具為程式設計師提供了很多命令來完成各種工作,同時,Bluemix 也提供了一個基於瀏覽器的 UI 介面,結合使用,會更高的提供應用程式的開發效率,在 UI 上同樣也提供了一些更加豐富的功能。要使用 UI 進行應用管理,首先我們需要先部署一個應用到 Bluemix,繼續之前,請讀者自行完成上節中的清單 1,清單 2 以及清單 3。

Bluemix UI 的訪問連線是:https://ace.ng.bluemix.net,輸入註冊的 Bluemix 賬號進行登入,登陸後點選儀表盤(DASHBOARD)並在右上角選擇要進入的 Organization 和 Space,如下圖:

圖 7. 登入 Bluemix UI

圖 7. 登入 Bluemix UI

如果您已經完成了清單 1 到清單 3 就會在 Applications 旁邊看到一個已經部署好的應用,應用的名字是 HelloMongoDW,單擊這個應用,進入應用的管理介面:

圖 8. 應用管理介面

圖 8. 應用管理介面

在這個介面裡向程式設計師展示了一些關於應用的基本資訊,並提供了一些關於應用的操作連結。在這裡我們單擊 ADD A SERVICE 為示例程式繫結一個 Mongo 資料庫:

圖 9. 建立 Mongo 資料庫

圖 9. 建立 Mongo 資料庫

當點選 CREATE 後,UI 會提示是否要重啟應用,來使得資料庫的操作生效,點選 OK,UI 會自動重啟應用。應用重啟後,會在應用管理介面看到一個新的 Mongo 示例,顯示 Mongo 被成功的繫結了。

圖 10. 成功繫結 Mongo 資料庫

圖 10. 成功繫結 Mongo 資料庫

點選上面的 Routes 連線,我們就可以訪問應用了,整個過程只需要點選幾個按鈕,就完成了應用的部署和服務的繫結。接下來我們再介紹幾個 UI 裡常用的功能:

點選上圖中的 Liberty,進入執行時管理頁面:

圖 11. 執行時管理頁面

圖 11. 執行時管理頁面

在這個頁面裡,我們可以:1,檢視關於程式和執行時的基本資訊;2,修改程式執行例項的數量以及分配記憶體的大小。3,點選左側的 Files and Logs 可以檢視應用的日誌輸出,如下圖:

圖 12. 檢視應用日誌輸出

圖 12. 檢視應用日誌輸出

同時,我們還可以點選 CATALOG 去檢視 Bluemix 提供的執行時和服務的詳細列表和使用說明,如下圖:

圖 13. Bluemix 功能一覽

圖 13. Bluemix 功能一覽

點選 DOCS 可以檢視 Bluemix 的所有文件,點選 COMMUNITY,進入 Bluemix 的開發者社群,在使用 Bluemix 的過程中碰到的任何疑問都能在這裡找到合適的答案。在這裡我們就不再一一介紹,有興趣的讀者可以自行研讀,並做一些實際的操作。

安裝 Eclipse 外掛開發和部署應用

一個應用從無到有需要藉助開發工具來完成應用的開發,大多數 Java 程式設計師的選擇都是 Eclipse,Bluemix 同樣提供了豐富的外掛來幫助程式設計師使用 Eclipse 與 Bluemix 進行聯合開發,裝上了 Bluemix 外掛的 Eclipse 可以連線到 Bluemix 平臺上,在 Eclipse 裡只需一個簡單的拖拽動作就能將應用快速的部署到 Bluemix 上,同時外掛還提供了完成的應用生命週期的管理功能。在 Eclipse Marketplace 中搜尋 Bluemix 並安裝外掛到 Eclipse
中就能方便的使用這些功能:

圖 14. 使用 Eclipse 外掛開發 Bluemix 應用

圖 14. 使用 Eclipse 外掛開發 Bluemix 應用

除了可以進行應用開發外,Bluemix 還提供了一種稱為 Dev Ops 的服務,通過該服務,可以實現應用的持續整合,敏捷開發,除了這些,Dev Ops 還提供了一個基於 Web 頁面的 IDE,程式設計師只需要開啟瀏覽器就能進行應用程式的開發,並將開發完成的應用一鍵部署到雲端,這些對於開發人員來說都是非常高效有用的工具。詳細的使用方法都可以在參考資源裡找到。

總結

Bluemix 給程式設計師帶來的便利還有很多,在這裡我們只能窺見一斑,不能做到事事鉅細,希望通過本文的介紹讓更多的程式設計師瞭解平臺雲帶給 IT 的變化。雲端計算已經正在改變著人們的生活方式,作為程式設計師的我們,也同樣在經歷著這些變化,一種新的工具或者平臺的出現,必定有其存在的理由,更要有其適合發展的土壤,IBM Bluemix 就是這樣一個平臺,雖然目前提供的功能還不是特別完善,但是隨著雲端計算的不斷髮展,Bluemix 也將會不斷演進,不斷的提供更多的功能來服務程式設計師,並引領雲端計算帶給 IT 的變化。