openshift_logo

OpenShift 是 redhat 公司推出的一個 PaaS 雲計算應用平台,開發者可在上面構建、測試、部署和運行應用程序,它支持 Java, Ruby, Node.js, Python, PHP, Perl 等眾多語言環境和開發框架,並且支持 MySQL, PostgreSQL, MongoDB 等數據庫服務。最重要的是,它的整個體系都是開源的,這和 IaaS 開源雲計算軟件 OpenStack 一樣,對於擁有硬件資源而希望部署雲的服務提供商來說很有研究價值。

一、再談雲計算

雲計算這個名詞已經被炒翻了天,但到底什麼是雲,很多人其實仍在雲里霧裡。根據 NIST 的權威定義,雲的服務模型,分為以下三種:

CloudSpectrum

  • Software as a Service (SaaS):軟件即服務模型,用戶直接使用構建在雲端的軟件。例如,Google Docs, Salesforce.com,甚至是 Web Email 也是雲計算,因為我們拋棄了客戶端。
  • Platform as a Service (PaaS):平台即服務模型,用戶使用雲平台所支持的語言和工具,開發應用並部署在雲平台。例如,Google App Engine, Force.com,國內的 Sina App Engine
  • Infrastructure as a Service (IaaS):基礎架構即服務模型,提供處理器、存儲、網絡等(虛擬)硬件資源給用戶,用戶可任意安裝軟件和開發環境,包括安裝操作系統。例如,Amazon EC2, Joyent,國內的阿里雲

可見,三種模型從應用到平台再到架構,越來越底層,用戶得到的可操作性和靈活性也越來越大。

UnderstandingCloudComputing

Red Hat 稱,IaaS 和 PaaS 的特定實現既不應該是供應商鎖定,也不應該受控於供應商。不同的架構阻礙了不同雲之間的數據遷移。為了讓雲計算保持開放和活力,雲端的實現應該走向真正的開放,不僅僅是在許可證上,而是也應該在管理方式上。OpenShift 將在這方面起一個標杆作用。反觀某浪的 app engine,限制本地 I/O 讀寫和很多函數,要求開發者使用該平台的特有版本,這樣一個封閉的環境實在是讓人吐槽無力。

二、開通 OpenShift 服務

目前在 Red Hat 的 OpenShift 上可以免費創建三個 app,提供 1.5G 內存和 3G 存儲空間。

1. 使用 Web 方式

(1)註冊

通過註冊鏈接進行登記,這個很簡單,不多說。

(2)新增應用

註冊並 Email 激活完成後,登錄管理後台,添加你的第一個應用。

Openshift-first-application

這時 PaaS 的優勢就開始顯現了,它提供了各種語言的平台給你選擇,包括 Ruby, Python, PHP 以及當前熱門的 Node.js 等等,與此同時還提供一些開發應用框架的一鍵安裝,比如 ROR, WordPress 等等。

選好自己的應用類型後,會進入配置頁面,需要給你的應用添加一個二級域名。二級域名由“應用名”和“命名空間” 兩部分組成,“命名空間”是和帳號綁定的,以後新增其他應用也會用到,不能再更改(已經可以更改了,不過所有應用的URL都會改變,成本很大),需要慎重選擇。另外,應用創建後還可以綁定自己的頂級域名。

Openshift-application-subdomain

這樣,應用就創建成功了。接下來就是向服務器上傳自己代碼。OpenShift 使用 Git 來部署代碼,你需要熟悉 Git 命令行的操作。另外值得一提的是,如果你按照上面 Web 的方式創建了第一個應用,在部署代碼前你需要設置一個 RSA 密鑰。

Openshift-public-key

這和 Amazon AWS 平台恰恰相反,AWS 會在雲端生成密鑰對,並將私鑰下載給你。而這裡是讓你自己生成公鑰和私鑰,並將公鑰上傳給 OpenShift。雖然用戶自己生成密鑰看上去更安全,但無形中也增加了用戶的使用壁壘。下面就是在 Linux 下使用 openssl 命令生成密鑰對的方法

$ openssl genrsa -out privatekey.pem 1024
$ openssl rsa -in privatekey.pem -out publickey.pem -pubout

用文本編輯器打開 publickey.pem,將裡面的字符串粘貼到上圖中的網頁文本框中提交即可。

2. 使用命令行方式

如果使用命令行方式,則會自動創建密鑰對,比較方便。參考“如何開始”指南,Windows 用戶需要安裝 cygwin 模擬 Linux 環境,包括 openssh、ruby、make、gcc、git 等等。考慮到 Ubuntu 用戶比較多一些,下面是 Ubuntu 的操作流程

# 安裝rhc工具
$ sudo apt-get install git ruby rubygems
$ su -c 'gem install rhc'
# 創建命名空間(慎重選擇名字)
$ rhc domain create -n mydomain -l rhlogin
Password: (type... type... type...)
# 創建應用
$ rhc app create -a myapp -t php-5.3
Password: (type... type... type...)
# 部署代碼
$ cd myapp
$ vim php/index.php
(Make a change...  :wq)
$ git commit -a -m "My first change"
$ git push

3. 添加模塊

一般應用都需要使用數據庫以及其他輔助工具,OpenShift 也提供這些工具,十分方便。在網頁管理後台中點擊“My Applications”進入應用,選擇“Add Cartridges”就可以看到有很多數據庫可供使用,包括 MySQL, PostgreSQL 以及 NoSQL 數據庫 MongoDB 等等。

或者使用命令行工具添加模塊

$ rhc app cartridge add -a myapp -c mysql-5.1

三、搭建 wordpress 博客

現在 OpenShift 為了簡化應用創建,提供了 WordPress 等常用軟件的一鍵搭建,在上面“新增應用”的截圖中都可以看到。不過為了熟悉代碼部署的方式,我們還是使用 rhc 命令行把新建 wordpress 的整個流程走一遍,這也可以作為搭建其他語言類型應用的參考。

# 新建一個名為wordpress 的 php-5.3 應用
$ rhc app create -a wordpress -t php-5.3
 
# 添加 mysql 支持
$ rhc app cartridge add -a wordpress -c mysql-5.1
 
# 下載 wordpress 代碼到本地
$ cd wordpress 
$ git remote add upstream -m master git://github.com/openshift/wordpress-example.git
$ git pull -s recursive -X theirs upstream master
 
# 上傳代碼到 openshift 服務器
$ git push

完成。訪問你的 wordpress:
http://wordpress-$yournamespace.rhcloud.com
默認帳號為admin/OpenShiftAdmin

如果要綁定自己的域名,可以用以下命令:

$ rhc-ctl-app -a wordpress -c add-alias --alias blog.lovelucy.info

然後添加 blog.lovelucy.info 域名的 CNAME 到 wordpress-$yournamespace.rhcloud.com

需要注意的是, git push 會把本地倉庫推送到遠端的代碼倉庫里,同時還會重寫遠端應用目錄下的 repo 目錄(就是 www 服務的根目錄)。而這個過程似乎是覆蓋式的重寫,如果裡面有不在倉庫里的文件或目錄,之後也會丟失。在 WordPress 管理頁面里更新插件安裝中文包,然後經過 push 後這些都沒了。這也意味着,這個博客的更新,主題安裝等都需要先在本地搞好、提交到本地的 git 倉庫之後,通過 push 上去,才算可以使用,直接在 WordPress 管理界面更新、安裝主題等,會被以後的 push 滅掉。或者可以先 pull 再 push。關於 git 的使用,我也才剛剛開始學習。

經過測試,發現服務器 I/O 性能十分不錯。Ping 了一下,歐洲和美國的用戶訪問都很快,只不過 Red Hat 可能沒有在亞洲部署服務器,在中國訪問網站連接速度不是很理想。

四、總結

根據 NIST 的定義,雲計算服務至少應該包含如下幾個特徵:

  • On demand 按需服務。用戶可以自己定義自己需要多少資源,靈活配置,不必為用不到的資源付費。例如某個網站應對高訪問量只需要更多的 CPU 和 內存,而硬盤存儲則不必很多。
  • Broad network access 可訪問性。不論你是使用電腦、筆記本、手機,不論你使用什麼網絡,只要你連接上了 Internet,你就可以獲取到你的計算資源。所以說雲是瘦客戶端的。
  • Resource pooling 資源池。雲的提供商應當給用戶提供計算、存儲、網絡等資源,用戶按需索取,而不必理會底層細節。例如雲服務供應商的服務器可能遍布各大數據中心,但對用戶來說,他看到的只是 CPU 內存等資源,他不需要知道自己所使用的資源到底在哪一台物理設備上,也就不會受限於這些因素。
  • Rapid elasticity 快速伸縮。用戶可以沒有限制地對自己的資源進行調整,平滑過渡,立即生效。例如給自己的服務器增加計算能力,或者獲取更多的網絡帶寬,指令發出後自動執行。
  • Measured service 服務可測量。雲系統應該可以監控、報告自身資源的使用情況,甚至自動進行調整優化,無需人工干預。另外就是可以根據使用量來進行計費。

前兩年的時候,雲計算、物聯網等概念炒作得十分火熱,國內卻基本沒有看到任何實質的產品出現。政府跟風起鬨,投入了很多,基本上都是被偽裝為磚家的商人給騙了,資金都被挪去搞了房地產。現在,物聯網基本上也沒怎麼提了,不過整個數據中心的技術卻是已經有了實質性的進展,很多主流互聯網公司都在自己建立數據中心。海量存儲、MapReduce 並行計算,虛擬化等等技術不斷在進步和創新。在借鑒國外先行者成功的基礎上,國內很多互聯網公司也有了不少積累。在移動互聯網時代,由於終端設備的計算能力限制,雲計算會有非常大的發展前景。

參考鏈接:
在OpenShift中部署ROR應用
在Red Hat OpenShift平台部署Django應用
OpenShift 各種語言框架的上手指南