Cloud Foundry:开放的云平台
2012-08-29郭名芳林予松王宗敏
文/郭名芳 林予松 王宗敏
云计算作为一种新兴的网络服务模式,将传统的以桌面为核心的任务处理转变为以网络为核心的任务处理,利用非本地或远程服务器的分布式计算机为互联网用户提供按需分配的计算能力、存储能力以及应用服务能力。云计算包括三个层次的服务:由底层硬件或虚拟机资源构建的基础设施服务(IaaS);构建在云基础设施上,提供云计算应用服务开发平台和环境的平台服务(PaaS);基于云平台开发的各类应用服务的软件服务(SaaS)。
在云计算体系的三层架构中,PaaS平台位于中间层起着关键作用。PaaS能将现有各种业务能力进行整合,向下根据业务能力需要测算基础服务能力,通过IaaS提供的API调用硬件资源,向上提供业务调度中心服务,实时监控平台的各种资源,并将这些资源通过API开放给SaaS用户。现今的多数PaaS平台限制在非标准框架下,并且缺乏多种应用服务的支持能力,尤其是不能将应用跨越私有云和公有云进行部署。在这种情况下,第一个开源开放式PaaS平台——Cloud Foundry应运而生,其架构专门针对云计算环境而设计,通过集成软件堆栈、应用执行引擎、自助应用部署、自助应用架构配置功能实现简化IT运算。
本文首先对PaaS平台做一个简单介绍,在此基础上,深度剖析了Cloud Foundry的架构设计,并对如何发布应用程序到Cloud Foundry做了说明,然后通过与其他PaaS平台的比较,给出了Cloud Foundry的几个优势,并说明如何将该平台应用到高校云计算项目开发的实践中去。
PaaS平台
PaaS是Platform as a Service的缩写,意思是平台即服务。从传统角度来看,如图1所示,PaaS实际上就是云环境下的应用基础设施,也可理解成中间件即服务。PaaS为部署和运行应用系统提供所需的基础设施资源应用基础设施,所以开发人员无需关心应用的底层硬件和应用基础设施,并且可以根据应用需求动态扩展应用系统所需的资源。完整的PaaS平台应提供的功能,如表1所示。
PaaS的实质是将互联网的资源服务化为可编程接口,为第三方开发者提供有商业价值的资源和服务平台。PaaS主要具备以下三个特点:1. 平台即服务,PaaS提供的是一个基础平台,而不是某种应用;2. 平台及服务,PaaS运营商所提供的服务不仅仅是单纯的基础平台,而且包括针对该平台的技术支持服务,甚至针对该平台而进行的应用系统开发、优化等服务;3. 平台级服务,强大而稳定的基础运营平台可以保证支撑SaaS或其他软件服务提供商各种应用系统长时间稳定的运行。
图1 云计算的三层服务
表1 PaaS的全局功能
Cloud Foundry介绍
Cloud Foundry的架构设计
Cloud Foundry是一个基于开源开放式PaaS平台的服务,开发人员可以使用Java或者其他基于JVM的架构在该平台上迅速部署及运行Web应用程序。目前,Cloud Foundry支持的应用程序框架包含Spring、Grails、Ruby on Rails、Node.js及Scala等,现在又增加了对.NET的支持;提供MySQL、MongoDB和Redis三种应用架构服务,以后还将逐步支持其他应用服务及第三方技术。Cloud Foundry的总体架构如图2所示。
由图2可知,Cloud Foundry由以下几个模块组成:
1. Router模块
Router模块在Cloud Foundry中是对所有进来的Request进行路由。进入Router的request主要有两类:首先是来自VMCClient或者SpringSource Tool Suite(STS),由Cloud Foundry使用者发出的管理型指令。例如列出所有Apps的Vmcapps,提交一个Apps等。这类Request会被路由到AppLife Management组件中去。第二类是外界对所部署的Apps访问的Request,这部分Requests会被路由到Appexecution或者Deas组件中去。所有进入Cloud Foundry系统的Requests都会经过Router模块。
Router模块是对nginx的一个简单封装,nginx以一个套接字文件(.sock文件)作为输入输出。外界httprequest进入Cloud Foundry服务器,nginx接到Request通过sock与router.rb进行交互,router.rb根据传入的url、用户名、密码等进行逻辑判断,然后到Cloud Controller组件或者DEA组件中取数据,并通过与nginx连接的.sock文件返回。简而言之,router.rb是对nginx进行了逻辑封装。
2. DEA(Droplet Execution Agency)模块
Droplet是一个把提交的源代码,以及Cloud Foundry配套好的运行环境,再加上一些管理脚本,例如start/stop这些小脚本全部压缩好在一起的tar包。制作这个包并把其存储好的过程叫stagingapp。Cloud Controller模块发送start/ stop等基本的Apps管理请求给DEA,dea.rb接收这些请求,然后从NFS里找到合适的Droplet。DEA把找到的的Droplet解压,并即行里面的start脚本,这个App便运行起来。至此,这台服务器的某个端口已经在等待,只要Request从这个端口进来,此App就可以接收并返回正确的信息了。
3. Cloud Controller模块
Cloud Controller是Cloud Foundry的管理模块。Cloud Controller采用restful接口与VMC和STS进行通信,从VMC或者STS接到JSON格式的协议,然后写入Cloud Controller Database,并发消息到各个模块控制管理整个云。
4. HealthManager模块
HealthManager模块从各个DEA里取到运行信息,然后进行统计分析报告等。统计数据与Cloud Controller的设定指标进行比对,并提供Alert等。
5. Services模块
Cloud Foundry的Service模块是一个独立的,可Plugin的模块,以方便开发人员把自己的服务整合入Cloud Foundry生态系统。目前,Cloud Foundry提供的服务有数据服务、信息服务等。
6. NATS
从Cloud Foundry的架构图可以看出,nats位于各模块的中心位置,是一个轻量级的,支持发布、订阅机制的消息系统。Cloud Foundry是基于多模块的分布式系统,支持模块自发现,错误自检,且模块间低耦合,其核心原理是基于消息发布订阅机制。每台服务器上的各个模块根据自己的消息类别,向MessageBus发布多个消息主题,同时按照需要的信息内容的消息主题订阅消息。
图2 Cloud Foundry架构图
Cloud Foundry的使用
开发者可以使用Cloud Foundry实例进行应用的开发和部署。首先需要进入Cloud Foundry的官方网站进行注册,随后会在注册的邮箱收到注册确认以及初次登录的密码。注册成功后,发布应用程序到Cloud Foundry可以使用命令行工具vmc,或图形界面工具,如Spring Source Tool Suite(STS)。下面将对这两种方式进行简单介绍。
VMC是Cloud Foundry的一个命令行工具,包括应用、服务的生命周期管理、Cloud Foundry账户管理和运行状态等使用的操作。VMC是一个Ruby应用,在安装VMC之前,Windows等系统需要先安装Ruby和相关的组件。然后使用“sudo gem install vmc”命令安装VMC,安装好VMC后,需要连接到Cloud Foundry,使用“vmc target hello.cloudfoundry.com”命令。输入已注册的用户名和密码,使用编辑器编辑所要显示的内容。最后在Cloud Foundry上部署应用程序。部署好应用程序后,打开浏览器,输入刚才应用程序所部署的URL,就可以看到编辑器编辑的内容。
STS是一个基于Eclipse、用于构建Spring应用程序的开发环境。开发者可以使用STS在Cloud Foundry中部署并管理Spring、Grails以及Java应用。首先需要下载并安装STS,然后在STS中安装Cloud Foundry Integration插件,该插件为Cloud Foundry云平台提供了很好的支持,允许开发者直接在工作区中将应用程序部署为Cloud Foundry实例以及查看、管理已部署的应用程序和服务。安装成功后,在Server下会出现VMware→CloudFoundry。然后便可以使用Cloud Foundy插件创建工程并发布运行程序。
表2 Cloud Foundry与其他PaaS平台的比较
与其他PaaS平台比较
随着云计算技术的不断发展,PaaS逐渐在云计算市场占重要地位。PaaS平台相继不断涌现,国外具有代表性的有Google的Google App Engine,微软的SQL Azure等。国内也推出了多款云计算PaaS平台,如新浪云、百度云、阿里云、腾讯云。表2是Cloud Foundry与这些平台的比较结果。
由表2可知,相比其他PaaS平台,Cloud Foundry的优势有以下几个方面:
1. Cloud Foundry是一个开源PaaS平台,一方面开发者可以通过这个平台来建设自己的SaaS服务,不用自行建设和维护硬件服务器及中介软件;另一方面,因为Cloud Foundry采用开源的网站平台技术,开发者的应用程序可以转移到其他平台而不受限于Cloud Foundry的平台。
2. Cloud Foundry能够部署在私有云或公有云的环境中,既可以运行在vSphere和vCloud架构之上,也可以运行在其他云架构之上。例如Cloud Foundry可以部署在Amazon Web服务之上,还可以部署在Eucalyptus和OpenStack等开源平台技术之上。而其他的PaaS平台把用户限制在某个特定的云里,不能将应用跨越私有云和公有云进行部署。
3. Cloud Foundry可以支持多种开发框架,Spring for Java、Ruby on Rails、Node.js以及多种JVM开发框架等。不像在Azure上必须使用微软的.Net框架来开发应用程序,在VMForce上必须使用Spring框架来开发应用程序。
4. Cloud Foundry提供消息服务,如RabbitMQ;数据服务,如MySQL,MongoDB,Redis。还有一些其他服务,如GemFire等。
总之,作为第一个开源开放式PaaS平台,Cloud Foundry能够广泛支持各种开发框架和编程语言以及多样的应用服务和云部署环境,方便用户快速部署云平台应用。
在教育领域的应用
随着高校研究生招生规模不断扩大,研究生的各类信息也不断增长,其中学位和教务教学管理作为高校硕士培养中及其重要的一个环节,准确快速的实施对于提高研究生管理水平也就显得尤为重要。因此,为了适应当前研究生培养的需要,改善研究生信息的管理手段效率低、繁琐、资源浪费大等缺点,高校建设了学位与研究生教育云平台项目,实现研究生管理工作的网络化集中化管理。该项目选择了Cloud Foundry这一开源平台,通过下载Github上开源的Cloud Foundry源代码,在自己的数据中心搭建一个PaaS平台,开发部署应用程序, Cloud Foundry的优势为项目实施带来了很大的便利。另外,高校有关云计算的科研项目多数都在尝试Cloud Foundry这个开发平台。
Cloud Foundry作为开源的PaaS平台,是未来教育信息化基础架构平台的最佳选择之一,它能够实现云计算辅助教学,构建个性化教学的信息环境,另外还能为高校的各部门管理、教学资源共享等提供云服务,节省未来IT重复投资,明显提升工作效率和用户服务质量。
本文从现有云计算技术出发,针对目前PaaS平台存在的一些缺陷,引出了第一个开源PaaS平台——Cloud Foundry,深入剖析了Cloud Foundry的架构设计,并对部署应用程序到Cloud Foundry的两种方式:VMC命令行工具和STS,做了简单说明。通过与其他PaaS平台比较发现,在可靠性、开发工具的提供和服务、存储成本上,Cloud Foundry均占优势,其应用前景非常广阔。随着云计算在教育领域的迁移,关于云计算的科研项目不断被提出, Cloud Foundry因其开源性成为了高校项目开发平台中一个不错的选择。