<b></b>

随着云计算的不断发展,iaas已经不能满足用户的需求。作为一个能够简化开发、测试、部署、运维的平台,pass受到了越来越多的关注。今天沈阅斌老师将为我们分享关于paas的一些亲身经验和体会,同时详细介绍paas技术中的cloudfoundry。
目录
paas基本介绍
paas的价值在哪里
paas的技术选型
cloudfoundry基本介绍
cloudfoundry架构及相关组件
基于cloudfoundry扩展paas功能
diego介绍
一.paas基本介绍
paas,平台即服务。是云计算的一种服务形式。其实并不是一个非常新的概念,像gae、sae很早就提供了类似这样的服务。不过在很长一段时间内,paas接受程度不高,在跟客户谈及云计算时,普遍都认为云计算就是iaas,即基础设施服务。但是随着云计算的不断发展,用户发现光有iaas,虽然简化了对基础设施资源的管理,但是对云计算的终端用户来说通过iaas只是拿到了一个裸操作系统,要想开发一个软件并部署到云平台上,还需要做很多工作。包括代码的管理、持续集成、自动化测试、交付物管理、应用托管、中间件服务、自动化运维、监控报警、日志处理等等。用户希望通过一个平台能够真正简化开发、测试、部署、运维等工作,使得企业能够真正实现devops。
二.paas的价值在哪里
在我们接触paas之前,我们做开发时需要自己搭建各种环境,包括开发环境、测试环境,上线的时候需要搭建生产环境以及进行各种配置,上线之后还需要进行人工运维。有时候搭建环境是一件很麻烦的事情,比如搭建一个tomcat的集群或者是mysql主从等。由于各种环境都是人工搭建,难免会出现环境的不一致,导致系统在某个环境下运行地好好的,但是部署到其他环境就无法正常运行的情况。
paas可以提供各种标准化或非标准的环境以及各种运维管理功能,用户可以在秒级按需获取各类资源和环境。所以paas最大的价值在于解放开发、测试、运维人员。虽然目前还不能完全做到这个程度,但它实实在在地降低了用户对应用软件的交付成本及时间。
通常我们所说的paas,包括mopaas,主要提供应用部署和托管服务。平台服务涵盖的范围包括,应用开发部署运行环境(如应用开发测试管理/工具等),服务组件池和管理(数据库、消息队列、缓存等),应用资源管理(开发运行管理应用、弹性伸缩等)。
三.paas的技术选型
其实我们刚接触paas的时候,并没有多少可以选择的paas技术,所以当cloudfoundry推出的时候,我们毫不犹豫地选择了cloudfoundry作为我们构建mopaas的基础框架。
最近几年,随着容器技术的飞速发展,比如docker,目前构建paas的技术方案非常多,比如cloudfoundry、openshift、docker+k8s、docker+mesos+marathon、cloudify等等,目前这些方案或多或少都在被企业采用。
至于哪种方案最优,个人觉得还是根据用户的具体需求来决定的。比如cloudfoundry,虽然很多人认为比较重量级,但是在成熟度以及paas功能提供方面优于其他方案。再比如要构建一个基于docker构建paas平台,那么像docker+mesos+marathon就是很好的选择。
四.cloudfoundry基本介绍
cloud foundry是一个工业级开源paas,它可以部署为一个云,并对外提供多语言多框架、应用运行环境及服务。个人认为,cf的社区相对还是比较活跃的,并且版本迭代比较快,一般1,2周就会发布一个小版本。而且cf在不断的改进和优化自身的架构,到目前为止已经经历了cf v1,cf v2以及cf v3。每一次大版本的发布都对cf进行了性能和架构上的优化。
我们接触paas的时候,cloudfoundry还不是很成熟,需要我们自己对cloudfoundry源码进行修改和bug修复。比如那时候还没有引入容器进行资源隔离,只能通过对应用进程监控以及操作系统用户用户组的方式进行隔离,在这些方面我们需要做很多定制工作。
后来cloudfoundry v2版本的推出,在稳定性、安全性方面做了大量提升,并且引入容器warden(cf自带的)进行资源的隔离。这时候容器技术docker也开始兴起,docker在某些方面确实可以弥补cf的不足,所以我们在mopaas后来的版本中大量使用docker等容器技术。比如一些轻量级服务的提供,可以通过docker实现自动化部署及资源隔离和监控。
cloudfoundry v3版本将推出新的运行时diego,提供的容器叫garden,将支持运行docker镜像。
五.cloudfoundry架构及相关组件
1、 软件路由和软负载均衡
haproxy、gorouter:
router将平台流量分发给特定的组件,通常为cloud controller,或者运行在dea节点上的应用。
2、 认证和授权
uaa、login server:
uaa与login server主要提供用户身份认证管理服务
3、 应用生命周期管理
cloud controller、health manager:
当开发者将一个应用push到cloud foundry后,cloud controller会存储应用文件,在数据库中创建应用的元数据记录,并指派dea节点来stage及运行应用。cloud controller同时还维护了组织、空间、服务、服务实例、用户角色等记录信息。
监控应用以确认其运行状态(例如running\stopped\crashed等)、版本以及实例个数。hm9000根据运行应用的dea返回的心跳(heartbeats)及droplet.exited消息来更新应用的实际运行状态。
确认应用的期望运行状态、版本及实例个数。hm9000从ccdb中获取应用的期望运行状态。
使应用的期望运行状态和实际运行状态一致。例如,如果实际运行的实例个数少于期望运行的实例个数,hm9000就会指示cloud controller启动准确的应用实例个数。
指示cloud controller修复任何应用状态的差异。
4、 应用存储和运行
blob store、dea:
dea负责管理应用实例,跟踪已启动的应用实例,并广播其运行状态的消息。
blob store保存了应用代码、buildpacks(应用依赖的runtime、web server、framework等的集合)以及droplets(已完成stage的可直接在dea上运行的应用包)。
5、 服务
service broker:
应用往往依赖于数据库或第三方服务。
当开发者需要创建一个服务实例并将其与某个应用绑定,该服务的service broker负责提供这个服务实例。
例如应用需要使用mysql数据库服务,mysql服务的service broker负责创建一个mysql服务实例,并将该服务实例与应用绑定。
6、 消息
nats:
cloud foundry使用nats进行组件间的内部通信。
nats是一种轻量级的、基于发布-订阅机制的分布式队列消息系统。
7、 日志和监控数据
metrics collector、app log aggregator:
计量数据收集器从各组件收集计量数据。运维人员可以使用这些信息对整个cloud foundry平台进行监控。
应用日志汇集器(loggregator)可以将应用日志输出给开发者。
在cloudfoundry平台上,应用如何被部署运行的?
开发者切换到应用根目录,使用命令行工具cf cli提交“push”命令。
cf cli告知cloud controller创建一条该应用的记录。
cloud controller将该应用的元数据存储至ccdb(例如应用名、实例个数,以及指定的buildpack等信息)。
cf cli将应用文件上传至cloud controller。
cloud controller将应用原始文件保存到blobstore中。
cf cli提交应用“start”命令。
由于应用尚未stage,因此cloud controller会从dea池中选择一个dea对应用进行stage,负责stage的dea会根据buildpack中的指令对应用进行stage(stage过程主要是为应用配置相关的语言runtime、web服务器、框架等,最终得到一个可以独立运行的应用包droplet)。
负责stage 的dea会将stage过程的日志同步输出至cf cli,开发者可以据此定位stage错误。
负责stage 的dea将已完成stage的应用打包成一个称为droplet的压缩包,并将该droplet存储至blobstore。
负责stage的dea向cloud controller报告stage工作已完成。
cloud controller根据应用配置从dea池中选择一个或多个dea来运行已完成stage的应用(在dea的warden容器中运行droplet)。
负责运行应用的dea向cloud controller报告应用的运行状态。
buildpack:
buildpacks为应用提供框架及运行时支持。
buildpacks通常会检查用户提供的应用代码以确定需要下载哪些依赖,以及该如何配置应用使其能跟绑定的服务进行通信。
当你push一个应用,cloud foundry会自动检测(也可以在push时显式指定)要使用哪个buildpack,并将其安装至运行应用的dea上。
表中所列为cloud foundry system buildpack。
开发者可以通过以下方式使用上述所列之外的buildpack:
1. 改造已有的buildpack;
2. 自己编写buildpack;
3. 使用cloud foundry社区提供的buildpack;
4. 使用heroku提供的第三方buildpack。
服务:
通过实现一组api被集成进cloud foundry 的服务称为受管理的服务。
用户可以按需创建相应的服务实例,并获取使用该服务实例的凭证。
ss
service broker标准apis。
1. 获取服务目录
2. 创建服务实例
3. 绑定服务实例
4. 解绑服务实例
5. 删除服务实例
六.基于cloudfoundry扩展paas功能
虽然cloudfoundry已经提供了paas平台的基础框架,但是如果我们想要基于cf构建一个paas平台,并且能够给用户提供paas服务的话,还是需要我们做很多的定制化的工作,接下去我就简单介绍一下相关内容:
1、 应用运行环境扩展
通过修改和增加buildpack实现,我们可以对buildpack进行相关定制,包括修改中间件的版本、配置信息以及buildpack代码来实现更多的功能,比如安装apm的探针。然后将buildpack打成离线包上传到cloudfoundry。
如果需要扩展.net运行环境,可以使用一个开源的.net插件ironfoundry,因为.net跟其他运行环境不一样,需要运行在windows操作系统上面,所以要单独安装一个windows的dea(ironfoundry提供),并且将.net buildpack添加至cloudfoundry之后完成扩展。
2、 服务中间件扩展
cloudfoundry对服务中间件集成提供一种标准的接入方式broker,对中间件部署、运维、监控,cloudfoundry并没有提供很好的方式解决方案,需要我们自己实现。一些轻量级的中间件服务,如缓存,可以采用docker进行部署和管理,数据库服务可以采用vm方式部署,然后通过broker将服务注册到cloudfoundry。
3、 可视化操作界面
cloudfoundry提供了一套标准的rest api,包括认证授权、组织空间管理、应用服务管理等功能。我们可以通过cloudfoundry提供的sdk可以非常方便的完成对cf的调用。
4、 应用/服务监控
cloudfoundry对应用的监控还是做了一些工作的,包括像health_manager,会实时采集应用的监控信息。通过dea的varz接口也可以采集到应用的监控信息。如果应用出现不健康的状态,cf会对其进行自动重启。对应用访问日志数据,cloudfoundry在gorouter节点上有进行记录,但是如果我们需要采集分析这些日志数据,那么我们需要修改gorouter,将日志打到日志服务器上。对服务的监控,完全需要我们自己来做,如果只是一般的监控需求,可以采用对容器或者vm监控,如果需要获取服务中间件更加详细的监控数据,可以通过集成apm来实现。
5、 弹性伸缩
cloudfoundry提供了对托管的应用进行弹性伸缩,包括纵向和横向的伸缩,但是只能通过手动的方式,如果需要根据规则和阈值进行自动伸缩,需要我们进行定制开发,通过对应用采集的访问数据、监控数据进行分析,满足阈值条件则进行伸缩。
6、 持续集成
cloudfoundry对开发测试这块并没有提供太多的功能,不过我们可以采用目前比较通用的方案来实现持续集成。
采用git/svn托管代码;采用nexus/artifactory作为制品仓库;采用jenkins作为持续集成工具,通过jenkins提供的插件,可以将代码托管、制品仓库以及paas平台进行集成,实现从代码提交到部署上线一整套自动化流程。
7、 tcp协议的支持
cloudfoundry默认只支持http(s)协议,如果需要部署一个tcp协议的应用,那么我们需要定制一个tcp_router。
七.diego介绍
diego。(dea in go),cloud foundry的下一代容器管理系统。
在没有diego的cloud foundry平台中,由cloud controller负责调度并管理dea上的应用。
而diego取代了dea以及hm9000,并从cloud controller那接手调度及管理应用的职责。
cloud foundry v3具有全新的 runtime, diego。cloud foundry(v3) 主要由 cc, uaa, diego, loggregator, gorouter, buildpacks, 和services和 bosh等组件构成。新的cloud foundry可以无缝地提供docker容器服务;在原有支持 linux 平台的基础上,也将支持 windows应用。
在新版cloud foundry中diego将取代目前的dea 。diego解决了原cloud foundry架构功能上的的一些局限,包括:
1)功能间的强耦合。
2)dea、hm和cloud controller之间的三角依赖关系。
3)应用范围只局限于linux平台,对windows不原生支持。我们也将在mopaas新版中采用cloudfoundry v3版本。
讲师介绍:
魔泊云产品研发总监 。
11年it从业经验,j2ee技术背景。
2011年加入魔泊云负责mopaas产品研发和管理工作,是国内较早接触cloudfoundry等paas技术并从事相关研发的工作者之一
<b>本文来自云栖社区合作伙伴"dbaplus",原文发布时间:2016-01-28</b>