现在,我们已经对Predix Cloud有了一个基本了解,就可以开始发布我们的第一个Predix应用了。
目前,Predix在全球已经建成四个数据中心,第五个数据中心即将落地中国。因此,我们需要基于注册Predix账号时选择的数据中心,来选择不同的接入点登录Predix平台。
数据中心 | 接入点(endpoint) |
---|---|
北美西海岸(Predix US-West) | https://api.system.aws-usw02-pr.ice.predix.io |
北美东海岸(Predix US-East) | https://api.system.asv-pr.ice.predix.io |
英国(Predix UK) | https://api.system.dc-uk01-pr.ice.predix.io |
日本(Predix JP) | https://api.system.aws-jp01-pr.ice.predix.io |
注:本文中所有的例子都是以日本的数据中心为接入点
我们通过cf
命令行工具来登录Predix平台。
$ cf login -a https://api.system.aws-jp01-pr.ice.predix.io
注:如果我们在命令行输入上述命令,得到下述输出,有很大的可能性是我们需要在命令行上设置相应的HTTPS的代理来访问Predix数据中心。
API endpoint: https://api.system.aws-jp01-pr.ice.predix.io
FAILED
Error performing request: *省略部分命令行输出* : no such host
当输入上述命令后,cf
命令会交互式的提示我们输入已在Predix平台注册的邮箱账号和密码。注意,当我们输入密码时,命令行是没有任何提示信息的。这是精心设计的功能,目的是不让任何人探测到我们输入密码的长度。
API endpoint: https://api.system.aws-jp01-pr.ice.predix.io
Email> xxxxx
Password>
Authenticating...
OK
Targeted org yyyyy
Targeted space dev
当登录成功后,我们会得到如下信息,包括登录Predix平台的接入点,用户账号信息,Org
和Space
信息。
注:我们现在不需要了解
Org
和Space
的概念,只需要知道这就是登录成功后返回的信息。Org
和Space
的知识会在后续章节中详细介绍。
API endpoint: https://api.system.aws-jp01-pr.ice.predix.io (API version: 2.62.0)
User: xxxxx
Org: yyyyy
Space: dev
接下来我们就来推送一个非常简单的Hello World应用程序,只需要输入以下命令来下载Python/Flask的程序源码。
$ git clone https://github.com/pxie/hello-python.git
然后进入当前应用程序源码的目录
$ cd hello-python
最后推送当前应用到Predix平台
$ cf push
现在,我们就可以在浏览器中通过下列的URL访问这个应用程序了。注意,为了保证平台上所有应用的安全,Predix Cloud已经禁止了非安全的http连接请求,只允许https的连接请求。所以,当我们在浏览器中输入的网址必须是https开头。对于这个例子而言,输入的地址为https://hello-unrainy-reformability.run.aws-jp01-pr.ice.predix.io
*省略部分命令行输出*
requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: hello-unrainy-reformability.run.aws-jp01-pr.ice.predix.io <--- 应用程序的URL
last uploaded: Tue Mar 28 07:16:59 UTC 2017
stack: cflinuxfs2
buildpack: https://github.com/cloudfoundry/python-buildpack.git
state since cpu memory disk details
#0 running 2017-03-28 03:17:53 PM 0.0% 73.5M of 256M 162M of 256M
注:因为Predix Cloud会给应用程序随机分配一段字符串作为URL的一部分,所以每个用户推送上述应用时会得到不同的URL。请仔细检查命令行输出的地址信息,再将其输入浏览器以获取正确的网页信息。
开发人员通常利用日志来查看应用程序的状态,定位应用程序的问题。现在,我们来看看上一步推送的云端应用近期日志的一个快照。
$ cf logs hello --recent
或者类似Linux平台的tail -f
命令,我们可以连接到云端应用的日志流,来查看实时的日志
$ cf logs hello
注:如果,我们使用上述命令查看实时日志信息,最后可以在命令行输入
Control+C
来中止当前的进程。
日志输入如下所示,我们可以看到在2017-03-28T15:20:47.55+0800
应用程序收到了一个GET
请求,并且请求的返回值是200
*省略部分日志输出*
2017-03-28T15:17:50.34+0800 [DEA/14] OUT Starting app instance (index 0) with guid ea626583-35e8-4b38-80b6-0a4fee694f8e
2017-03-28T15:17:53.82+0800 [App/0] ERR * Running on http://0.0.0.0:61024/ (Press CTRL+C to quit)
2017-03-28T15:20:47.55+0800 [App/0] ERR 10.120.3.10 - - [28/Mar/2017 07:20:47] "GET / HTTP/1.1" 200 -
2017-03-28T15:20:47.55+0800 [RTR/0] OUT hello-unrainy-reformability.run.aws-jp01-pr.ice.predix.io - [28/03/2017:07:20:47.546 +0000] "GET / HTTP/1.1" 200 0 12 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" 10.120.3.57:64493 x_forwarded_for:"-" x_forwarded_proto:"http" vcap_request_id:98901748-4575-4f6c-7514-e2ddac9f1a09 response_time:0.007087279 app_id:ea626583-35e8-4b38-80b6-0a4fee694f8e app_index:-
Predix Cloud为应用程序提供了非常便利的日志聚合服务,已经包含了HTTP访问日志,应用程序输出日志和应用程序生命周期管理日志等。
每行日志都包含四个字段:
包含时区的时间戳 | 包含实例编号的日志类型 | 日志输出管道 | 消息体 |
---|---|---|---|
2017-03-28T15:20:47.55+0800 | [App/0] | ERR | 10.120.3.10 - - [28/Mar/2017 07:20:47] “GET / HTTP/1.1” 200 - |
Predix Cloud提供非常丰富的面向工业场景优化的服务,这些服务都能够非常方便的被应用程序所使用。
下面以大家都比较熟悉的PostgreSQL为例子,介绍如何将云端的应用和数据库连接到一起。
获取Predix Cloud上可用的PostgreSQL的服务
$ cf marketplace -s postgres
创建一个免费的PostgreSQL服务实例
$ cf create-service postgres shared-nr test-postgres
注:我们现在不用关注
shared-nr
服务计划的概念,在之后的章节,我们会详细介绍服务实例相关管理
绑定刚刚创建的服务实例到我们之前推送的应用程序
$ cf bind-service hello test-postgres
一旦,服务实例被绑定到一个应用程序,服务实例的信息就可以通过环境变量传递给应用程序。我们可以通过cf restage
使应用程序导入新的环境变量,获取服务实例的连接信息,并最终完成与服务实例的连接。
$ cf restage hello
最后,我们可以通过下列命令验证服务实例已经成功的绑定到了应用程序。
$ cf services
通常来说,增加应用程序的实例数能增强应用程序的处理并发用户请求的能力,增加单个实例可使用的内存容量、磁盘空间可以提高应用程序的整体性能。对于传统的IT来说,应用程序的横向扩容和纵向扩容并不容易,而在Predix Cloud上,不管是横向扩容还是纵向扩容都可以通过一个简单的命令完成。
横向扩容
通过增加应用程序的实例来处理增长的用户请求,我们用cf scale
命令将应用程序的实例从一个增加到两个。
$ cf scale hello -i 2
查看应用程序的状态并验证应用程序的两个实例正在运行
$ cf app hello
纵向扩容
通过增加应用程序实例可使用内存和磁盘空间增加其整体性能
增加应用程序实例的可使用的内存容量
$ cf scale hello -m 1G
增加应用程序实例的磁盘空间
$ cf scale hello -k 512M
通过前面的介绍,我们了解到Predix Cloud能够利用几个简单的命令自动化部署和管理云端应用程序的生命周期,而且可以非常方便横向和纵向扩容应用程序。更重要的是,我们完全不需要在意应用程序所运行的基础架构的技术细节,能够非常专注在应用程序的业务逻辑开发。
作者:谢品,上海创新坊首席架构师,GE数字集团
专注于工业互联网,云计算,大数据,高性能分布式存储领域,对Cloud Foundry和传统应用向云端迁移有丰富的经验,曾供职于VMware,EMC,Autodesk等知名软件公司云计算部门。