Bluemix使用与其他云平台对比

时间:2023-02-04 10:50:51

  笔者近几年做过了一些项目,应用了国内外的几家云平台,包括: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> xiuleizh@cn.ibm.com

Password>
Authenticating...
OK

Select an org (or press enter to skip):
1. xiuleizh@cn.ibm.com
2. OE_Runtimes_SVT

Org> 1
Targeted org xiuleizh@cn.ibm.com

Targeted space dev

API endpoint: https://api.ng.bluemix.net (API version: 2.2.0)
User: xiuleizh@cn.ibm.com
Org: xiuleizh@cn.ibm.com
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
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 xiuleizh@cn.ibm.com / spac
e dev as xiuleizh@cn.ibm.com...
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@c
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 xiuleizh@cn.ibm.com / spac
e dev as xiuleizh@cn.ibm.com...
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
ibm.com...
OK

Uploading HelloMongoDW...
Uploading from: C:\A_Workspace\apps\HelloWithMongo.war
53.4K, 14 files
OK

Stopping app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
ibm.com...
OK

Starting app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
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 xiuleizh@cn.ibm.com / spac
e dev as xiuleizh@cn.ibm.com...
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. 访问应用主页
Bluemix使用与其他云平台对比

读者可以可以看到有两个连接,点击第一个连接,程序会首先向 Mongo 数据库中插入几条数据,然后将这几条数据检索出来,并在页面进行展现,点击 MongoServlet,应用成功返回如下页面,则说明应用成功运行了。

图 5. 操作 Mongo 数据库
Bluemix使用与其他云平台对比

点击第二个连接,程序会打印出环境变量的相关信息,从中,读者可以查看有关 Mongo 数据的连接信息,如下图:

图 6. 打印环境变量
Bluemix使用与其他云平台对比

到这里我们已经成功的在 Bluemix 上部署并运行了一个示例应用,接下来再介绍几个常用的和应用程序相关的命令:

清单 7. 其他常用命令

1. 停止,启动以及重启应用

停止:

USAGE:
cf stop APP

C:\Users\IBM_ADMIN>cf stop HelloMongoDW
Stopping app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
ibm.com...
OK

启动:

USAGE:
cf start APP

C:\Users\IBM_ADMIN>cf start HelloMongoDW
Starting app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
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 xiuleizh@cn.ibm.com / spac
e dev as xiuleizh@cn.ibm.com...
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
ibm.com...
OK

Starting app HelloMongoDW in org xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
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 xiuleizh@cn.ibm.com / spac
e dev as xiuleizh@cn.ibm.com...
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 xiuleizh@cn.ibm.com /
space dev as xiuleizh@cn.ibm.com...
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@c
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 xiuleizh@cn.ibm.com / space dev as xiuleizh@cn.
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
Bluemix使用与其他云平台对比

如果您已经完成了清单 1 到清单 3 就会在 Applications 旁边看到一个已经部署好的应用,应用的名字是 HelloMongoDW,单击这个应用,进入应用的管理界面:

图 8. 应用管理界面
Bluemix使用与其他云平台对比

在这个界面里向程序员展示了一些关于应用的基本信息,并提供了一些关于应用的操作链接。在这里我们单击 ADD A SERVICE 为示例程序绑定一个 Mongo 数据库:

图 9. 创建 Mongo 数据库
Bluemix使用与其他云平台对比

当点击 CREATE 后,UI 会提示是否要重启应用,来使得数据库的操作生效,点击 OK,UI 会自动重启应用。应用重启后,会在应用管理界面看到一个新的 Mongo 示例,显示 Mongo 被成功的绑定了。

图 10. 成功绑定 Mongo 数据库
Bluemix使用与其他云平台对比

点击上面的 Routes 连接,我们就可以访问应用了,整个过程只需要点击几个按钮,就完成了应用的部署和服务的绑定。接下来我们再介绍几个 UI 里常用的功能:

点击上图中的 Liberty,进入运行时管理页面:

图 11. 运行时管理页面
Bluemix使用与其他云平台对比

在这个页面里,我们可以:1,查看关于程序和运行时的基本信息;2,修改程序运行实例的数量以及分配内存的大小。3,点击左侧的 Files and Logs 可以查看应用的日志输出,如下图:

图 12. 查看应用日志输出
Bluemix使用与其他云平台对比

同时,我们还可以点击 CATALOG 去查看 Bluemix 提供的运行时和服务的详细列表和使用说明,如下图:

图 13. Bluemix 功能一览
Bluemix使用与其他云平台对比

点击 DOCS 可以查看 Bluemix 的所有文档,点击 COMMUNITY,进入 Bluemix 的开发者社区,在使用 Bluemix 的过程中碰到的任何疑问都能在这里找到合适的答案。在这里我们就不再一一介绍,有兴趣的读者可以自行研读,并做一些实际的操作。

安装 Eclipse 插件开发和部署应用

一个应用从无到有需要借助开发工具来完成应用的开发,大多数 Java 程序员的选择都是 Eclipse,Bluemix 同样提供了丰富的插件来帮助程序员使用 Eclipse 与 Bluemix 进行联合开发,装上了 Bluemix 插件的 Eclipse 可以连接到 Bluemix 平台上,在 Eclipse 里只需一个简单的拖拽动作就能将应用快速的部署到 Bluemix 上,同时插件还提供了完成的应用生命周期的管理功能。在 Eclipse Marketplace 中搜索 Bluemix 并安装插件到 Eclipse 中就能方便的使用这些功能:

图 14. 使用 Eclipse 插件开发 Bluemix 应用
Bluemix使用与其他云平台对比

除了可以进行应用开发外,Bluemix 还提供了一种称为 Dev Ops 的服务,通过该服务,可以实现应用的持续集成,敏捷开发,除了这些,Dev Ops 还提供了一个基于 Web 页面的 IDE,程序员只需要打开浏览器就能进行应用程序的开发,并将开发完成的应用一键部署到云端,这些对于开发人员来说都是非常高效有用的工具。详细的使用方法都可以在参考资源里找到。

总结

Bluemix 给程序员带来的便利还有很多,在这里我们只能窥见一斑,不能做到事事巨细,希望通过本文的介绍让更多的程序员了解平台云带给 IT 的变化。云计算已经正在改变着人们的生活方式,作为程序员的我们,也同样在经历着这些变化,一种新的工具或者平台的出现,必定有其存在的理由,更要有其适合发展的土壤,IBM Bluemix 就是这样一个平台,虽然目前提供的功能还不是特别完善,但是随着云计算的不断发展,Bluemix 也将会不断演进,不断的提供更多的功能来服务程序员,并引领云计算带给 IT 的变化。