基于云计算平台的应用部署方法和系统的制作方法_2

文档序号:8472783阅读:来源:国知局
过对接应用管理的接口,由云应用商店模块触发新建部署应用的操作,应用部署遵循 CloudFoundry的规范;2)对CloudFoundry平台组件执行代理组件(DropletExecution Agent,简称DEA)功能扩展,使之适应云应用商店的业务需求。3)通过修改源代码仓库,更 新已经部署的应用程序。根据技术要求,具体实现方法和步骤如下:
[0053] 根据技术方案中第一点的所述内容,云应用商店模块和CloudFoundry对接需要 调用两个接口,一个是授权和验证功能接口,另一个是应用管理接口。
[0054] 云应用商店模块使用Node,js框架开发,基于JavaScript,通过Node,js框架可以 简化搭建服务器集群的工作量。Node,js服务器集群的基本原理如下:N〇de.js在入口程序 中读取系统配置文件,并提供一个分支判断(除非强制关闭),默认启动服务器集群模式, 首先启动一个主节点(master node),然后根据主机的中央处理器(CPU)数目N,启动N个 工作节点(worker node)。通过Node,js的内在机制实现负载均衡。
[0055] 系统的用户角色权限管理使用CloudFoundry的uua接口,简化平台的开发量。
[0056] 云应用商店模块采用轻量级的设计,仅需要维护若干个Yaml (Yet Another Markup Language,另一种标记语言)格式的配置文件。系统通过读取解析应用商店模块的 配置文件,在界面上展示平台中可用的应用的详细信息。Yaml文件可以通过平台上传,也可 以在平台上新建保存,支持多个配置文件同时并存。配置信息基本格式如下:
[0057] -name:汇率转换器 /*应用名称*/
[0058]id:bottle-currency/* 应用id,具有唯一性 */
[0059]desc: -个用Python开发的汇率转换工具/*应用的描述*/
[0060] framework:python/* 应用的编写语言 */
[0061]runtime:python27 /* 应用的运行环境 */
[0062] services:redis/* 应用所需服务 */
[0063]commit:master/*应用在git服务器上的分支*/
[0064] src:http://$git服务器ip地址/root/bottle-currency. git /* 应用源代码 url地址*/
[0065]icon:http: //$ 文件服务器ip地址/fiIes/icon/currency,png/* 应用的图标 */
[0066]mem: 128 /*应用所需的内存*/
[0067] 平台中的解析器设计针对上述配置进行解析,将信息提取并分为两部分:应用名 称、描述、编程语言、使用的服务、内存需求信息作为应用的基本描述,展示在页面上;应用 的源代码地址和分支信息作为高级选项,供用户需要克隆签出代码时使用。解析成功的配 置,如图3所示。
[0068] 在界面上点击某个应用的部署按钮,系统调用CloudFoundry的应用管理REST接 口进行新建应用的操作,REST接口URL(UniformResourceLocator,统一资源定位符)为 /v2/app/create〇
[0069] 根据技术方案中第二点所述内容,开源平台CloudFoundry只能通过命令行形式 "vmcpushapplication"上传本地应用程序包(war格式或是软件代码编译压缩包),云应 用商店模块通过对DEA的扩展和修改,使CloudFoundry对接云应用商店模块进行应用部 署,主要的改良工作在CloudFoundry的云控制器(CloudController,简称CC)和执行代理 组件(DropletExecutionAgent,简称DEA)上,具体步骤如下:
[0070] 通过鉴权之后,如图4所示;容器环境下载源代码后,在容器中运行编译工具的 工作原理。源代码中有一个配置文件,配置项声明web应用程序所使用的开发语言,以及 对应的编译工具所在的仓库地址。通过解析得到的URL地址,下载对应的编译工具到容器 中。编译工具包含两个自动化脚本,检测web应用源代码具体所使用的开发框架,不同开发 框架对应下载不同的软件包进行运行环境的部署,下载的内容可以是 :tomcat(汤姆猫)、 spring(开源框架)、hibeinate(对象关系映射框架)、python(癖蛇)、ruby(-种脚本语 言)、nginx(服务器)、php(HypertextPreprocessor,超文本预处理器)等,下载完成后, 安装并启动服务容器环境。
[0071] 具体步骤为:云控制器执行如下操作:读取请求新建的应用程序的所有配置信 息,根据源代码地址,执行"gitclone$源码仓库url/tmp/code/",把源代码下载到本地目 录;
[0072] 执行压缩命令,为本web应用的源代码目录生成一个随机16位的 uuid(UniversallyUniqueIdentifier,通用唯一识别码),把下载的源代码进行压缩打 包,以uuid的值作为命名并保存在/data文件夹下待用,并通知DEA组件源码打包完成,进 入下一个步骤;
[0073]DEA组件接收到新建应用的请求时,进行以下操作:
[0074]DEA通过warden(CloudFoundryLXC容器管理)新建一个应用容器;
[0075]DEA根据应用的配置信息判断应用的类型、所需要的编译工具包和工具所在的 代码仓库地址,签出编译工具仓库中相应的编译工具包,下载到应用容器中的/tmp/. buiIdpacks文件夹中;
[0076]DEA从/data文件夹中获取源代码压缩包,加上下载的编译工具包,并创建部署的 自动脚本文件。把所有文件压缩打包,得到一个应用程序包,称为droplet;
[0077]DEA将dropIet拷贝到应用容器中,在应用容器环境中解压dropIet,执行编译 工具包的脚本文件。DEA向刚创建的应用容器中导出环境变量"EXP0RT_BnLDPACK_ENV_ VARIABLES_SCRIPT",此变量生成了自动运行脚本的代码,其目的是为执行编译工具包目录 下的所有sh脚本;
[0078] 编译工具脚本包括获取应用程序运行所需要的软件包,通过本具体应用实例中的 文件服务器快速完成下载,执行脚本文件对软件包进行解压到适当位置、修改配置文件、和 其他文件的执行权限;
[0079] 环境配置完成后,脚本最后将应用程序的源代码拷贝到适当的位置,启动应用程 序。应用程序已经完成部署,用户可以通过界面返回的链接进行访问;
[0080] 根据技术方案中第三点所述内容,通过修改仓库源代码,实现应用的更新和版本 控制。用户下载源代码,完成修改并推送更新至代码仓库后,具体步骤如下:
[0081] 如图5所示,源代码仓库使用git传输协议搭建,git支持一种称为"钩子(hook) " 程序的操作,在代码仓库每次发生一次推送和更新的时候,此钩子程序都自动执行。本 具体应用实例充分利用了钩子程序的作用,在钩子中写入了代码更新之后,自动调用CloudFoundry中的重新部署应用的接口,接口为/v2/app/restage;
[0082] 同样通过鉴权之后,云控制器将新版的代码下载并打包,赋予重新生成的16位随 机uuid,把旧版源码包移出部署目录,重新执行新建应用容器和编译的流程,实现新版本软 件的部署。
[0083] 云控制器中记录了所有应用部署的元数据,在每个应用部署的时候,云控制器将 web应用程序的uuid和应用名称记录在数据库中,根据时间的先后,在界面上赋予每个版 本一个版本号%、V2……,在界面上展示并提供回滚版本的功能。回滚的操作不需要下载代 码包,只需要从本地替换源码包即可;
[0084] 本具体应用实例涉及web应用托管和一种具备云能力(cloud-ready)的应用商店 系统设计方案,本具体应用实例的关键在于:
[0085] 首先是一种支持多语言的部署环境系统,借助CloudFoundry的PaaS能力,构建一 个适合于普通用户和开发者共同使用的PaaS领域的软件系统。通过预置的源代码仓库,平 台可以构建丰富的"开箱即用"的web应用程序;
[0086] 其次,可配置的云应用商店模块的设计模型。云应用商店通过yaml格式的配置文 件,将每个web应用的元数据信息(应用名称、应用类型、硬件需求、源代码仓库、编译工具 仓库)保存在系统中,并展示在界面上。这意味着系统不会存储任何web应用程序的源代 码或者编译包,这样大大降低了系统的存储压力;
[0087] 本具体应用实例中的CloudFoundry连接两个源代码仓库和一个文件服务器:web 应用程序源代码仓库和编译工具所在的脚本仓库,文件服务器上存放所有在运行环境中需 要用到的软件包。代码仓库支持使用SVN(Subversion,版本管理工具)和Git的协议实现, 云控制器和DEA通过下载web应用源代码和编译工具,并安装相应的软件包,实现web应用 在容器中的部署。
[0088] 源代码仓库通过"钩子"程序(hook)倒挂
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1