STS实现Cloud Foundry云平台应用部署

2013-03-15 06:26丁振凡
关键词:数据源消息部署

丁振凡



STS实现Cloud Foundry云平台应用部署

丁振凡

(华东交通大学信息工程学院,江西,南昌 330013)

STS(Springsource Tool Suite)是Spring应用开发的一个强大工具,Cloud Foundry是Spring Source提供的一个开源云平台。在STS中通过添加Cloud Foundry扩展可支持云应用部署,对云平台上个人虚拟机的服务器及应用进行管理。分析了Cloud Foundry 的架构组成,讨论了将Web应用部署到云环境的具体操作过程,重点针对云数据库访问、文档管理应用以及面向消息应用,分析了在云环境下编程要注意的问题。最后,给出了一个网络教学系统样例以及云应用部署的优劣分析。

Cloud Foundry;STS;云应用部署;云数据库访问

云计算作为一种新型的资源共享和管理模式,成为近年来研究热点。将软件部署在公有云或私有云的虚拟化环境中,开发人员不用维护基础设施,从而使软件的部署和应用变得快速方便。根据美国国家标准与技术研究所的定义[1],云计算提供的服务从下往上分为3个层次,分别是基础设施服务(IaaS)、平台服务(PaaS)和软件服务(SaaS),这3种服务模型既相互独立又相互联系的。本文介绍的Cloud Foundry云平台属于PaaS类型。STS(Springsource Tool Suite)是开发Spring应用的优秀工具,Spring是一个开源框架,它是为了解决企业应用复杂性而创建的高效开发环境,Cloud Foundry云平台直接支持Spring的应用部署。

1 Cloud Foundry云平台简介

Cloud Foundry 是 VMware 发布的业内第一个开源 PaaS 项目。Cloud Foundry目前支持 Spring Java,Rails,Ruby等,也支持其他基于JVM 的框架,如 Groovy,Grails 等。并提供消息服务(如RabbitMQ)和数据服务(如MySQL,Mongo DB等)。利用Cloud Foundry构建的云计算平台,提供了软件开发、测试和运行维护一整套完整的平台环境, 确保安全性、可管理性、高可用性。

Cloud Foundry的最新架构如图1所示。通过VMC客户端和STS部署应用,通过浏览器和移动终端访问应用。Cloud Foundry采用基于消息的多组件架构,有利于集群节点间的松耦合,并使自注册,自发现的功能得到实现。

图1 Cloud Foundry的逻辑架构

以下就逻辑架构中主要模块进行简要说明,其中,Stager、Warden、BlobStore等是Cloud Foundry为提高效率在新版添加的模块。

(1)路由器(Router)模块:对所有进入Router的请求进行路由。请求可分为两类:首先是来自VMCClient或者STS的管理型指令。例如,部署应用、删除应用等。这类请求会被路由到云控制器。第二类是来自具体应用的访问请求,会被路由到执行代理池。

(2)云控制器(Cloud Controller)模块:是Cloud Foundry 的管理模块。它与命令行工具 VMC 和 STS交互。主要工作有:①应用程序的增删改读;②启动、停止应用程序;③把一个应用程序打包成 Droplet;④管理service;⑤修改应用程序的运行环境等。

(3)执行代理池(Droplet Execution Agency)DEA模块:DEA是应用程序执行引擎。Droplet 是由应用源代码、云运行环境和管理脚本压缩在一起的tar包,存放在BlobStore中。DEA将Droplet解压并通过执行其中的start脚本让应用运行。

(4)NATS 模块:NATS 是一个轻量级的基于发布/订阅机制的消息系统。Cloud Foundry的是所有内部组件通过NATS进行通信。每个模块会根据自己的消息类别,向MessageBus发布多个消息主题;而同时也向自己需要交互的模块,按照需要的信息内容的消息主题订阅消息。

(5)运行状况管理(Health Manager)模块:Health Manager 是一个独立守护进程,它从DEA获取应用程序的运行信息,进行统计分析。统计结果与云控制器设定的指标进行比较,实现系统自我管理及自我预警。

(6)Service模块:该模块是一个独立的、可Plug-in 的模块。用于将第三方的服务整合进来。目前 Cloud Foundry 支持数据服务,消息服务等。

(7)暂存器(Stager)是为解决应用打包过程比较费时而在新引入的模块,每当Cloud Controller需要打包的时候,就会向Stager队列中发送一个请求,Stager收到请求后,逐个处理。

(8)程序运行容器Warden是新引入的模块,为防止用户应用随意访问文件系统、跑满CPU、占尽内存等现象。该容器提供了一个孤立的环境,Droplet只可以获得受限的CPU、内存、磁盘访问权限。

(9)BlobStore模块是新引入的模块,原先存放运行包的NFS是一处单点,一旦Crash,整个Cloud Foundry的部署功能要瘫痪。新版用BlobStore替代NFS,提供高可用、可扩展的存储服务。

对于应用开发者来说,云平台的支撑框架的改进只是为了提高云的运作效率,用户的应用部署过程是保持不变的。本文重点是各种应用在云环境的部署处理。

2 用STS部署CloudFoundry云应用的环境准备

STS能够与CloudFoundry深度耦合,使用STS 可部署Spring web应用程序到Cloud Foundry云平台上,也可以通过STS 管理已经部署好的应用程序。以下为利用STS部署应用到CloudFoundry云平台的流程。

2.1 注册cloudfoundry帐户

在http://my.cloudfoundry.com/signup注册一个免费帐户。帐号是以用户的电子邮件地址作为用户登录名,注册后,将收到一封包含用户凭据的电子邮件。每个用户在云平台分配有一个虚拟机,在虚拟机上可以部署多个应用。

2.2 在STS中安装Cloud Foundry Integration Extension

具体步骤如下:①选择菜单Help→Dashboard。②打开面板,点击Extensions标签,可看到STS加载扩展名列表。③向下滚动到Server and Clouds类别,选择“Cloud Foundry Integration”。④点击Install,按安装向导逐步安装。

2.3 在STS中添加对应云平台上的Server

通过STS的Server添加功能,添加一个服务器,在服务器的类型选择中要选择来自云平台,连接服务器将需要注册的帐户和密码。用户使用“Run At Server”运行Web应用程序时选择来自云的服务器,则该应用将自动部署到云平台上。在云空间的虚拟机上将部署一个Tomcat服务器,该服务器可以通过STS进行启停控制。

3 云平台上Web应用的开发与部署

3.1 关于云上Web应用的访问路径问题

云上的应用直接以工程的名称作为服务器的域名前缀,这点和本地应用不同。例如,工程名称为“xyz”的应用,在云上的根访问为“http://xyz.cloudfoundry.com/”,而在本地服务器访问为“http://localhost:8080/xyz/”。因此,在应用的相对路径计算时要注意。正因为工程名作为应用域名前缀,所以,在该云空间上不存在同名应用时才能完成部署。

3.2 关于数据库应用在云平台上的部署

3.2.1 开发云数据库应用的基本过程

对于数据库应用,需要使用云上的数据库,具体过程如下。

(1)配置数据源

连接云服务器,双击Cloud Foundry server,在其设置界面中,点击add按钮打开service控制面板。在弹出的对话框中,选择数据源并输入名称,假设选择的数据源类型为mysql数据库,名称为mysql。然后,点击“Finish”按钮即可。

(2)在应用中通过建立基于数据源的JdbcTemplate对象访问数据库

第一步:在云应用的虚拟机控制窗体中,将Services面板的数据源服务拖到Application Services面板。如图2所示。这样,在应用中才能通过标识连接到该数据源。

图2 将数据源拖放到Application Services面板

第二步:在应用配置文件引用云上定义的数据源要用到cloud标签,相应地,在配置文件中要引入cloud 命名空间。如果应用中通过JdbcTemplate访问数据库[4],以下代码使用SpEL表达式引用数据源mysql。

xmlns:cloud=http://schema.cloudfoundry.org/spring

……

http://schema.cloudfoundry.org/spring

http://schema.cloudfoundry.org/spring/cloudfoundry-spring-0.6.xsd">

class="org.springframework.jdbc.core.JdbcTemplate">

第三步:在应用逻辑中通过属性依赖引用Spring容器中的JdbcTemplate对象。例如:

@Resource(name="jdbcTemplate")

private JdbcTemplate jdbc;

(3)在Maven依赖关系中添加Cloud Foundry的支持

部署在云端的应用通常要使用Maven创建工程,为支持Cloud Foundry,需要在Maven工程的pom.xml文件中添加cloudfoundry-runtime依赖。

以上过程完成后,就可以通过STS控制Cloud Foundry应用的部署,启动和停止。

【注意】Cloud Foundry不支持STS动态Web工程,对于用MVC模式进行应用开发的Web项目,需要用Spring MVC模板工程创建,它是一个Maven项目。

3.2.2 关于云数据库的建表和数据管理

云上数据库没有直接打开的管理工具,需要编写应用对数据库进行管理。尤其是涉及安全认证的应用系统,假设帐户信息存储在数据库中,则在没有部署安全前,要先建立数据库表格和添加部分数据。例如,以下为实现建表处理的相应控制器Mapping方法。代码中通过@Resource注解将IOC容器中的JdbcTemplate对象注入给控制器的jdbc属性变量。用户访问“/createdata”请求时,将执行createdata()方法,在方法中通过调用JdbcTemplate对象的execute方法执行sql建表语句实现数据库的建表处理。

@Resource(name="jdbcTemplate")

private JdbcTemplate jdbc;

@RequestMapping(value="/createdata", method=RequestMethod.GET)

public String createdata() {

String sql="create table users(username varchar(20),

password varchar(20),enabled int(10),primary key(username))";

jdbc.execute(sql);

……

}

其他数据库管理应用可采用类似方法,采用Spring MVC模式实现可视化管理[4-5]。

3.3 文档管理应用在云上的设计

文档上传与管理是Web应用的一项常用功能,在网上教学、博客、办公等系统均需要支持各类资源文档的上传与管理。利用Spring的CommonsMultipartResolver解析器可实现文件上传的处理。为支持文件上传,需要在工程的Maven配置中添加commons-fileupload和commons-io两个依赖部件。

值得注意的是,云上应用资源的存储路径受到云的保护限制,用户上传的文件不能任意存储到云空间的任何位置。云环境和本地硬盘环境不同,没有普通Windows应用的C、D盘,虚拟机的文件系统采用类似linux的文件结构。存放操作系统资源文件的目录路径,不允许应用系统添加和修改文件,用户上传的文件通常考虑安排在Web应用部署的目录路径的某个子目录下。这也是云上应用虚拟化的基本要求,每个应用在云上有各自独立的空间,方便云对其空间的管理及对用户资源的限制。

3.4 面向消息应用在云上的设计部署

企业里很多系统通信,特别是与外部组织间的通信,实质上都是异步的。面向消息的应用编程处理成为目前SOA应用的核心,Spring提供了强大的支持来编写面向消息的应用。Spring Integration是Spring的一个扩展框架,提供了一个轻量级的、声明式模型实现面向消息的应用集成。Spring Integration应用可直接部署到云环境。

提供消息队列服务的产品较多(如:ActiveMQ、RabitMQ等),Cloud Foundry云平台下目前支持RabitMQ,RabitMQ用AMQP协议(高级消息队列协议)实现消息的分发,具有快速、可靠、开源、安全、可扩展的特点。为支持RabitMQ编程,要在工程的Maven配置中添加Spring框架的工件标识为“spring-rabbit”依赖包。

和前面介绍的mysql数据库服务的使用类似,STS开发环境中使用RabitMQ服务,首先要云服务器的service控制面板中添加“RabitMQ message queue”类型的服务部件,并将其拖放到具体应用面板。这样,在具体应用中通过队列标识引用队列。

然后,程序通过Spring框架提供的Amqp Template模板实现AMQP消息的发送与接受。

例如,以下代码发送一条消息到 "messages" 队列。

amqpTemplate.convertAndSend("messages","hello" );

以下代码从"messages" 队列接受1条消息。

String message = (String)amqpTemplate. receiveAndConvert("messages");

为提高应用效率,一般将AmqpTemplate配置为Bean。在应用中可通过Spring的依赖关系引用该Bean对象。以下为配置代码。

4 网络教学系统应用样例

国家《教育信息化十年发展规划(2011-2020)》中明确提出了建设中国教育信息化云服务平台的任务和行动计划。构建基于云环境的网络互动学习系统,将降低维护、运营成本,达到整合资源、强化资源共享的目标。Java网上教学系统在部署中采用了前面介绍的技术,应用界面如图3所示,数据库采用MySQL,系统利用Spring Security实现用户认证[6],用户可进行课件学习、讨论、答疑、提交作业、习题操练[7]、单元自测[8]、存放个人文档、内容搜索[9]等。系统控制每个登录用户对应有一个以自己标识为根目录的虚拟空间,用户可在各自目录下可以建立子目录和上传文件。

图3 Java教学系统部署到云平台

5 应用部署到云环境的利弊分析

不难发现,Spring应用可容易移植到Cloud Foundry云环境,在STS中通过添加扩展插件支持,就可在STS环境下对云虚拟机进行应用部署、控制和管理,应用编程只需要根据云环境的特点进行简单的修改即可。

云平台具有可扩展性和高可用性等诸多优点,可减轻应用系统维护负担(如服务器断电、死机、病毒、黑客攻击等),从而提升应用的整体访问运作效率。规模较小的应用,利用Cloud Foundry云环境来运作是方便有效的方式。

但同时也应该看到,将应用部署到云平台在访问速度上通常会低于内部局域网应用。其中原因主要是来自网络拥挤的因素,也有来自云的访问瓶颈因素。从云控制器的逻辑架构可以看到,云环境下应用的运行需要经过一些中间控制环节,所有虚拟机的应用均要通过统一的路由模块进行路由。另外,云环境中每个虚拟机能享受的资源是受限的,云使用者要按服务质量要求进行付费。对于免费帐户,每个用户可部署应用的内存总和是2G, 默认给每个应用安排512M的内存。

因此,应用开发者根据各自实际来选择应用的部署环境。有条件的单位可组建内部私有云,从而实现单位内部应用的统一管理。为整合已部署的应用,还可以采用“云-地”结合的方式,将应用部分部署在云上,部分部署在本地服务器上。

6 结束语

本文在介绍Cloud Foundry云平台架构的基础上,给出了STS环境中将Spring web应用部署到Cloud Foundry云平台的过程,分析了各类应用设计部署应注意问题。Cloud Foundry支持众多的流行应用开发框架,并支持MySQL、MongoDB、RabitMQ等典型的应用架构服务。随着云计算优势的广泛认可,将有越来越多的应用部署到云环境中。

[1] 林利,石文昌. 构建云计算平台的开源软件综述[J]. 计算机科学,2012,39(11):1-6.

[2] 高文涛,郭明森.Cloud Foundry:第一个开源Platform as a Service[J]. 科技传播,2012,1:154-155.

[3] 丁振凡, 李馨梅.基于JdbcTemplate的数据库访问处理[J].智能计算机与应用,2012,2(3):29-32.

[4] 丁振凡,吴根斌. Spring 3.x MVC模型的数据校验国际化处理[J]. 计算机时代,2012,8:26-28.

[5] 丁振凡. 用Spring MVC实现数据分页显示处理[J]. 智能计算机与应用,2012,2(5):20-22.

[6] 丁振凡. 基于Spring Security的Web资源访问控制[J].宜春学院学报,2012,34(8):71-74.

[7] 丁振凡.利用XML数据岛实现网络课件中的习题操练[J].计算机系统应用,2002,8:71-73.

[8] 丁振凡,李卓群.基于XML的单元自测应用的设计[J].华东交通大学学报,2008,25(3):69-73.

[9] 丁振凡. 基于Tika语义分析的文档内容检索服务研究[J].井冈山大学学报:自然科学版, 2013,34(2):60-64.

THE APPLICATION DEPLOYMENT FOR CLOUD FOUNDRY PLATFORM BY USING STS

DING Zhen-fan

(School of Information Engineering, East China Jiao Tong University, Nanchang,Jiangxi 330013, China)

STS (Springsource Tool Suite) is a powerful tool for spring application development. Cloud Foundry is an open cloud platform provided by Spring Source. By adding Cloud Foundry extension, STS can supports the cloud application deployment, and the management of server and application in cloud platform virtual machine. We analyze the architecture of the Cloud Foundry and discuss the concrete operation process for deploying web application into the cloud environment. Furthermore, we focus on the programming problems about cloud database access, document management application and message oriented application. Finally, we give a sample of network teaching system and analyze the advantages and disadvantages about cloud application deployment.

cloud Foundry; STS; cloud application deployment; access to Cloud database

1674-8085(2013)05-0045-05

TP393

A

10.3969/j.issn.1674-8085.2013.05.011

2012-12-22;

2013-02-03

江西省教育厅教改项目(JXJG-12-5-24)

丁振凡(1965-),男,江西丰城人,教授,硕士生导师,主要从事云计算,语义Web,计算机辅助教学研究(E-mail: zfding@ecjtu.jx.cn).

猜你喜欢
数据源消息部署
一种基于Kubernetes的Web应用部署与配置系统
晋城:安排部署 统防统治
部署
一张图看5G消息
Web 大数据系统数据源选择*
基于不同网络数据源的期刊评价研究
部署“萨德”意欲何为?
基于真值发现的冲突数据源质量评价算法
消息
消息