云计算PaaS的五层

过去的中间件或SOA已经逐步被云计算PaaS平台替代,该文总结了PaaS的五层结构。

一两年前,PaaS系统是铁板一块monolithic. 只有一个单独的供应商或解决方案,如Heroku, 提供一整个系统处理PaaS各个方面,但是事情已经改变,随着各种开源项目涌现如Docker, Packer, Serf, CoreOS, Dokku, 和 Flynn, 这些都可以构建你的PaaS,但是如何正确构造呢?

首先我们从功能上定义PaaS是干什么的?

PaaS能够被看成一个工作流,有几个功能段组成,每个功能段完成一个特定目标,每段不代表步骤,它们可以并行运行,不必一定要像步骤那样按照顺序来:

PaaS的五段功能块如下:
1.部署Deployment
2.自动配置Provisioning
3.生命周期管理Lifecycle management
4.服务管理Service management
5.报告Reporting

下面逐个详细描述:
1.部署
部署部分是负责迁移一个应用从其开发处(开发人员的电脑)到PaaS,通用方式如下:

(1). 在PaaS运行着一个远程git,从客户端会通过发出事件, (Heroku, OpenShift, Flynn 和 Dokku都是用这种方式 Elastic Beanstalk 用的是这种方式变异)

(2). 发送代码作为一个捆绑包(一个 gzipped tar包). Cloud Foundry 使用的是这个方法,Stackato也是,本地编译代码,然后复制执行结果到PaaS.

(3). 当PaaS接受到一个部署, 它将揭开一个序幕过程:移动该应用程序进入运行状态. 由此进入下面任何阶段。

banq评:部署这个过程是不是非常类似我们将应用程序部署到tomcat JBoss Oracle IBM等JavaEE中间件服务器上?

2.自动配置
在这个过程中,PaaS将配置运行应用程序的必要底层设施,"Infrastructure底层设施" 广泛的含义,几个目标如下:

(1)设置容器和计算实例(类似需要启动几个JavaEE服务器 几个JVM)
(2).配置网络
(3)安装和配置操作系统服务 (e.g. Apache)
(4)安装或配置库包(e.g. Ruby Gems)
(5)许多PaaS系统会将自动配置扩散到跨多个工具:一个工具用来创建计算实例, 而另外一个也许是在安装库包. 但是它们都共享同样职责: 为即将运行的应用程序创建环境支持。

3.生命周期管理
一旦PaaS有了应用程序的拷贝,并且环境已经准备好能够运行它,就有必要管理应用程序的执行,这就是生命周期管理的任务:

(1).启动应用
(2).监测应用的运行状态
(3).监视或报告应用的资源消耗。
(4).在失败时重启应用
(5).在命令行停止或重启应用

一些小型的PaaS系统提供基础的生命周期管理(e.g. start and stop), 而一些高级系统则提供自动伸缩 自动节流 以及热部署等

4.服务管理
这个阶段不是在所有PaaS中都存在,它不是必要的,但是有用的:

所有PaaS系统都能运行应用,但是一些平台做得更好,能够提供服务接触到你的应用, 这些服务运行在应用程序容器之外或是计算实例之外。

服务包括:

数据库
网络化的文件系统
消息队列
缓存
聚合日志
"Old guard" 系统 (如 Cloud Foundry) 跨多个应用分享一个服务 (e.g. MySQL) . 一些新的基于容器的系统如CoreOS提供以一种特别设计的容器运行服务,这种模型更加简单。

为什么不是所有PaaS系统都需要这个阶段?一个理由是许多云提供商也许有类似的服务,形式如 DBaaS, MQaaS等等。

5.报告和监视
这个阶段很平常,大部分应用主要是运行,在这个期间有很多有趣事情发生,有一些事件我们必须了解,如重启,也有一些环境情况如资源消耗 系统性能等需要掌握,当然还包括日志文件等。

一些PaaS平台提供几个层次报告,如:

Amazon Elastic Beanstalk集成了 AWS Cloud Watch, 每个应用都有聚合日志系统。

ActiveState Stackato 提供一个 web 控制台,带有丰富日志, 能够显示应用的实时状态和环境,Heroku能有选择发生事件到后端日志。

banq评:云计算PaaS=中间件 + (操作系统+中间件)的管理。