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 各种语言框架的上手指南