郑伟平, 刘健敏
(华南师范大学计算机学院,广州 510631)
基于图模型的云平台应用部署技术研究
郑伟平*, 刘健敏
(华南师范大学计算机学院,广州 510631)
为了实现与平台无关的应用部署,提出了一种基于“部署图”的应用部署方案,给出一个通用云平台应用部署体系,重点介绍了部署工具的设计与实现技术,并实现了一个原型系统,结合部署实例证明所提部署方案是可行的且具有平台无关、可视化和可复用等优点.
云平台; 应用部署; 部署图; 平台无关; 子图同构
目前,云平台被广泛使用,应用系统面对的部署环境更加复杂[1]. 应用部署是云平台核心功能,云平台提供商通常都提供平台专属的部署工具(如命令行、网页控制台、API等). 例如,亚马逊提供了AWS Cloud Formation、OpsWorks、CodePipeline和CodeDeploy等一系列部署工具、服务与系统;OpenStack有dodai-deploy、Devstack以及Fuel等多种部署工具. 这些工具和接口与特定平台相关,缺乏普遍适用性,部署时需要针对不同云平台进行重复配置和部署,效率较低,且容易出错. PaaS云平台不单提供了部署工具,还限定了平台语言、服务、库以及相关的部署流程与模型[1]. 考虑到PaaS平台部署模型的不同及其在平台迁移、学习成本和跨平台部署等方面存在的问题,刘欢欢等[2]对亚马逊、Google和微软等PaaS平台进行总结,建立了PaaS平台部署环境元模型,提出了一种元模型驱动的部署方法;SIMBAD团队[3]开发的m-COAPS实现了面向异构PaaS平台的通用资源描述与操作接口,目前已经对接了OpenShift、Amazon Elastic BeansTalk和Cloud Foundry等PaaS平台;HOSSNY等[4]对COAPS进行扩展,使其支持GAE平台. 针对云资源异构问题,YONGSIRIWIT等[5]提出了一种使用TOSCA、OCCI以及CIMI等资源描述标准来构建云资源的通用语义知识库的语义框架,实现对异构云资源描述的无缝转化;NGUYEN等[6]基于面向对象方法在云平台之上构建一个抽象层,以屏蔽云平台的底层细节,提高了云平台应用开发与部署的通用性;BRANDTZ☞G等[7]使用构件和领域特定语言方法,提出了一种描述语言Pim4Cloud,实现IaaS平台和PaaS平台上应用软件的部署建模.
与文献[2-4,6,8]的研究(主要面向PaaS平台)不同,本文研究IaaS云平台的通用应用部署技术,以图模型为抽象语法,提出了一种云平台应用部署描述工具——部署图(Deploy Graph),阐述了基于部署图的应用部署体系,并且实现了一个作为部署工具的云应用部署管理平台. 文中还介绍了混合部署与增量部署技术,展示了图模型在应用部署上的灵活性与可扩展性.
为了实现与平台无关的应用部署,必须对部署描述加以抽象,使其具备通用性. 本文以图模型作为抽象语法,提出了用于描述部署任务的“部署图”概念.
定义1 部署图是六元组DG=(N,E,NT,ET,C,P),其中N是有限个节点的非空集合;E⊆N×N是有向边的集合;节点类型集合NodeType={SG,VM,DU,CN},其中SG表示安全组,VM表示虚拟机器,DU表示可部署单元,CN表示复合节点. NT:N→NodeType是节点类型函数;边类型集合EdgeType={hoston,dependon,accesson},其中hoston表示托管、部署或安装关系,dependon表示依赖关系,accesson表示通信关系,ET:E→EdgeType是边类型函数;C:EdgeType→NodeType×NodeType是边类型约束函数,对各种类型的边两端连接的节点类型进行了约束;P:N∪E→KEY×VALUE是从节点或边到(key,value)对集合的映射函数,表示节点或边的相关属性.
关于定义1,有几点需要说明:
(1)定义1给出了节点类型集合、边类型集合的最小集,实际使用时应根据资源种类、范围以及云平台所支持的技术属性,对NodeType、EdgeType、KEY和VALUE等集合做进一步的界定和扩展.
(2)安全组SG用于设定VM节点之间的访问规则(主要是访问可达性);虚拟机器VM是物理机器在云平台上的映射,其基本属性包括CPU、内存、存储、网络和虚拟机镜像等,属于部署环境描述的“硬件”部分;可部署单元DU是应用系统的“软件”模块,或者是软件栈的其他组成成分(如数据库、JVM等);复合节点CN是一种特殊节点,其本质是一个部署子图,但在图中表示为一个节点,用于描述事先装好软件栈的机器节点,其虚拟机镜像属性应指向事先制作好的虚拟器件文件. 复合节点提供了部署描述粒度与部署管理的灵活性.
(3)边类型hoston强调2个节点间的位置约束关系,即必须部署在同一虚拟机器上;dependon表示部署安装的先后次序;accesson表示访问可达性的约束. 总的来说,边类型蕴含了位置约束、组件调用以及安装次序等重要的部署语义信息.
(4)为了表达更丰富的部署语义,部署图还为边与节点设置了属性信息. 属性的KEY、VALUE信息可以从配置脚本、使用说明书和开发手册等资料中学习和提取.
下面从部署模型、工具支持和部署流程等3个方面阐述基于部署图的云平台应用部署体系.
1.1 部署模型
部署模型由部署图、部署工具、云平台以及部署管理策略等4个要素组成. 部署图是抽象描述工具,是通用部署的概念基础;部署工具实现了部署图概念,是通用部署的实施基础;云平台是管理对象,其部署接口是部署模型的重要组成成分;部署管理策略规约了部署模型支持的功能和特性,例如跨平台部署、异常回滚和智能调度等,在一定程度上影响部署工具的实现.
1.2 工具支持
部署图是通用的部署语义描述工具,无法直接使用云平台的原生部署接口. 因此需要设计一套部署工具,对部署图进行解释,并转换成为适用于特定云平台的部署代码,实现通用部署功能. 本文将在第2节阐述部署工具“云应用部署管理平台”的设计与实现.
1.3 部署流程
在部署图及其部署工具的支持下,本部署体系的部署流程(图1)包括4个步骤:
(1)规划描述. 与传统应用部署相同,实施部署之前必须详尽规划,包括确定系统边界、预估资源需求、划分部署区域、制定计划和制作镜像等一系列准备工作. 但不同的是,不直接使用云平台所提供的原生部署工具或接口. 在本步骤中,部署工作人员使用部署工具制作部署图,描述部署任务,并将部署图文件和应用系统代码一起上传到“部署信息存储库”中.
(2)解释转换. 在确定部署图之后,部署引擎解释部署图,检查部署图的合法性,确定部署目标云平台,然后将部署图转换成为调用目标云平台原生接口的部署代码. 如果实施跨平台部署,引擎还需要按照不同平台,先将部署图分割成为多个部署子图,再分别转换成原生部署代码.
(3)远程部署. 部署平台将转换得到的部署代码传输到目标云平台上,调用云平台的部署服务接口,完成远程部署.
(4)过程管理. 事实上,部署流程的步骤(1)、(2)、(3)存在先后次序关系,而本步骤涵盖部署流程的全过程. 其管理内容包括图版本管理、历史记录、状态跟踪和异常管理等.
图1 云应用部署流程
2.1 平台设计
本文采用分层模型设计了一个部署工具(图2),即云应用部署管理平台(以下简称平台). 该平台由应用层、调度层、适配层及资源层组成:
(1)应用层. 为管理人员提供了统一部署接口,包括部署图管理、部署与监控、应用元数据管理、云平台信息管理和访问控制等功能. 部署图管理提供部署图录入、语法检查、子图定义和版本管理等功能;部署与监控是该层核心功能,管理人员调取部署图,填写部署策略与平台信息后实施部署,部署后可监控应用系统实例的健康状态和属性信息;应用元数据管理完成各类软件系统的属性管理、定义部署图基础数据和管理代码镜像等;云平台信息管理负责接入部署工具的各个云平台的访问、资源和特性等信息的获取和设置;访问控制功能验证管理人员是否有权使用本平台以及访问云平台的资源.
(2)调度层. 根据部署上下文以及云平台资源情况,决定部署任务的实施位置与步骤等. 首先解析部署图,完成语义检查(包括一致性检查、完整性检查和权限检查等),必要时分解部署图;然后运行调度算法确定部署目标平台、实施步骤和优先级别. 如果涉及任务分解,还需要进行同步控制,并管控可能出现的异常和错误.
(3)适配层. 屏蔽了各云平台的差异,向上提供统一部署接口与统一监控接口. 该层承上启下,通过“转换引擎”将调度层输入的部署图转换为目标云平台上的部署代码,再调用资源层的云平台访问代理,启动远程部署. 类似地,适配层也通过访问代理获取资源信息,向上封装成为统一监控接口.
(4)资源层. 由部署信息、云平台资源信息、部署平台管理信息以及存取上述信息的相关功能组成. 另外,部署平台为接入的各个云平台产生一个访问代理实例,作为监护进程长驻,负责与各云平台的通信与控制.
图2 部署平台分层架构
2.2 平台实现
根据上述架构,本文使用Node.js+MongoDB技术实现了一个云应用部署管理平台的原型系统(CloudDeployments),其主要功能如下:
(1)方案管理. 实现了“云平台信息管理”的部分功能,包括云平台认证、资源描述和特性服务等元数据管理. 云平台接入系统时,先为其创建一套管理描述文件,同时在资源层生成相应的访问代理实体.
(2)拓扑管理. 系统仅实现部署功能,尚未实现云平台资源监控功能,因此需要管理员人为地管理接入云平台的拓扑结构,包括物理节点、连接关系、管理域和配置信息等. 在后续版本中将增加云平台资源的自动发现功能.
(3)部署图管理. 实现了图形化的部署图编辑、语法检查、子图定义、部署图分层显示和筛选过滤等功能. 子图定义将部署图作为构件,提高了可复用性和制作效率.
(4)远程部署. 实现了基于编排模板的部署引擎,可将部署图转换成为AWS Cloud Formation部署脚本,调用编排服务实现远程部署. 系统还实现了简单的部署日志管理和增量部署功能.
(5)系统管理. 实现了用户身份认证、平台访问权限控制、云平台访问授权和部署策略设置等功能.
该平台原型系统使用highttopo库[9]实现拓扑图、部署图的图形化操作功能,使用Cloud Formation做为云编排服务接口. 目前系统仅支持兼容AWS接口的云平台. 部署功能是平台的核心部分,下面从基本部署、混合部署和增量部署等3个方面介绍其实现技术.
2.2.1 基本部署
(1)部署图实现. 平台实现了一个图形化的部署图编辑器,通过拖拽元件和连线、双击元件图标填写属性信息,可快速构建部署图实例. 根据部署图的定义,平台实现了SG、VM、DU和CN等4类节点,以及hoston、accesson和dependon等3类边,为各实体设计了各种属性(表1),其中属性1~4为4类节点均有的通用属性、属性5~10为虚拟机器专有属性,Layer属性是为部署图分层展示而设置的属性,Region属性是为部署图划分而设置的标记属性. 篇幅所限,其余属性就不再赘述. 建立概念模型后,将部署图表示为BSON格式,存储到MongoDB库中.
表1 虚拟机器类型的属性设置Table 1 Attribute settings for virtual machine type
(2)转换引擎实现. 将部署图转换成为目标云平台的部署代码时,可以根据实际选用不同的部署接口. 为了便于远程部署,本文选用编排模板的部署方式. 下面以目标云平台为AWS为例,介绍文中转换引擎将部署图转换为Cloud Formation[10]的算法流程(图3). 本文采用工厂设计模式为每类节点设计了一个工厂类,转换时调用相应的工厂类生成模板实例,再将所有模板整合到主模板中. 在转换可部署单元节点时,将下载地址配置信息转化为模板的“files”属性,将安装命令转化为模板的“commands”属性,然后将此信息以AWS∷CloudFormaction∷Init类型的格式插入到宿主节点的模板里.
(3)远程部署. 生成编排模板后,资源层中访问代理调用目标云平台的编排服务,实施远程部署. 以AWS Cloud Formation为例,平台使用基于Node.js的SDK开发包,调用AWS工厂类的awsConf方法配置云平台认证信息;调用GetCloudFormation方法获取服务编排功能对象;再调用DepStackMng类的newAndSave建立编排,完成部署.
2.2.2 混合部署 混合部署是一种跨云平台的部署形式[11],其部署资源由多个同构或异构的云平台[12]联合提供. 利用前述基本部署功能,可以灵活地实现混合部署. 具体过程如下.
(1)混合部署规划. 混合部署规划可以由部署人员人为地决定,也可以由调度算法根据资源情况计算后决定,采用何种方式取决于平台部署策略. 管理人员通过为虚拟机器节点VM或复合节点CN的Destination属性设定目标云平台值,可以实现混合部署,但划分的合理性由管理员负责. 另一种情况,管理人员设置Region属性,将部署图划分为多个连通区域,但并不指定Destination属性,再由调度层负责计算各分区到云平台的映射. 如果Region属性与Destination属性全部为空,则调度层负责全部规划工作,包括决定是否划分区域以及云平台资源分配,这对调度算法提出较高要求.
图3 编排模板转换流程图
管理人员在赋值Region或Destination属性后,平台需要检查部署图的语义一致性. 例如,A节点与B节点的Region属性值相同,而两者的Destination属性值却不同,显然存在逻辑错误,平台应当给出错误提示. 在需要考虑边属性的约束时情况将更加复杂,例如accesson类型边可指定访问链路带宽、延迟和安全域等属性,对边两端节点的部署将带来限制,部分属性(如安全域)在静态配置时便可检测,而部分属性(如延迟)则需要在调度层指定目标平台时方能判断是否满足属性要求[13].
(2)混合部署实施. 在本文应用部署体系下,混合部署的实施均需要将部署图分割成为若干子图,然后使用前述基本部署功能,“分而治之”地逐个完成子图的部署. 实现混合部署时调度层必须提供同步机制,对各个部署子任务的状态进行监控,发现某个子图部署失败时,可以实行部署回滚,并向应用层报告相关状态.2.2.3 增量部署 前面讨论的部署属于新建形式,所需资源全部由云平台创建提供. 然而,有时部署可以利用云平台上已运行的资源实例,仅需要在已有资源环境上完成应用组件安装、运行配置命令和下载数据等操作,而不需要向云平台重新申请资源,我们将这种方式称为“增量部署”. 增量部署必须解决符合部署要求的资源定位问题,本文提出一种“以图找图”的查找方法. 具体来说,将所需的资源环境以部署图形式描述出来作为查询图,然后在已完成部署的目标图上查找与其同构的子图. 例如,图4A的虚线框内的子图与图4B同构[14-15],增量部署时可以利用此类资源(虚拟机B、Java虚拟机D和服务器E).
图4 子图同构实例
为了实现“以图找图”功能,本文实现了一个匹配算法,其伪代码如下:
Procedure Match(q:Node,pre_q:Node,t:Node,pre_t:Node){
If (q与t不匹配) return EMPTY
If (pre_q!=NULL & pre_t!=NULL & q与pre_q之间的边与t与pre_t之间的边不匹配)
return EMPTY
qNeighbors←qNeighborspre_q // qNeighbors是q在查询图上的邻居节点集合
tNeighbors←tNeighborspre_t // tNeighbors是t在目标图上的邻居节点集合
matchResult←EMPTY
ForEach (n: Node in qNeighbors)
result←EMPTY
ForEach (m:Node in tNeighbors)
result←Match(n,q,m,t)
If (result!=EMPTY) {
tNeighbors←tNeighborsm
Break
}
End ForEach
If (result!=EMPTY)
matchResult=matchResult∪result
Else return EMPTY
End ForEach
return (q,t)∪matchResult
}
本文以原型系统为工具,成功部署了职业测评系统、博客系统和精品课程网站等多个应用系统,经测试,系统功能正常、运行稳定,而且部署方便快捷、可复用性强. 实践证明,本文提出的部署方法是可行的、有效的. 下面以职业测评系统为例,介绍其部署过程.
(1)部署环境准备:使用本文研发的原型系统为部署工具,在安装了某商用云平台软件的私有云上进行部署,平台支持AWS服务接口. 部署之前,已经在原型系统中接入了该云平台,并导入了相关的元数据;另外,部署所需的虚拟机镜像文件已存在,所需的系统软件等元数据也在原型系统中完成定义.
(2)部署需求与规划:职业测评系统是一套基于SSH框架开发的Web应用系统,后台采用MySQL数据库. 根据常规的部署方法,可为其分配2个虚拟机:一个用作Web服务器,另一个为数据库服务器. 2个服务器处于同一网段,便于通信. 由于系统的用户并发访问量不大,部署方案不涉及负载均衡服务.
根据文中的部署流程,必须事先制作一个部署图,描述部署任务. 结合部署需求,部署图的节点设置情况如表2.
表2 部署图的节点设置Table 2 Configurations of nodes in the deploy graph
除了上述节点,还需要为部署图添加若干条边:N2→N1(accesson类型);N3→N1(accesson类型);N4→N2(hoston类型);N5→N4(dependon类型);N6→N5(hoston类型);N7→N3(hoston类型);N6→N7(accesson类型). 最后,在原型系统中保存好部署图.
(3)实施部署:调出制作好的部署图,点击“部署”命令按钮,选择目标云平台(即前述已导入的私有云平台),部署工具执行远程部署.
(4)部署结果:部署完成,系统运行正常. 部署完毕,还可通过部署工具查看部署方案中的资源实例. 例如,可以查看实验中的Web服务器虚拟机实例以及相关部署信息,如图5所示.
图5 部署后的虚拟机实例
大规模云计算基础设施的建设对云计算平台的自动化、智能化和自主化管理提出了更高要求. 本文研究IaaS云平台的通用应用部署问题,提出“部署图”作为应用部署的形式化描述工具,以达到平台无关的应用部署目的. 在部署图的基础上,给出了一个面向多云平台的通用应用部署体系,设计了部署工具的分层架构模型,阐述了云应用部署管理平台的设计与相关算法,最后展示了平台原型系统. 本文提出的应用部署技术具有平台无关、可复用、可验证和直观易用等优点,极大降低了应用部署难度,减少部署工作量,避免了人为配置错误.
部署图作为部署抽象工具,具有多方面的优势:图模型表达直观、灵活性强,展示效果好;图模型与应用系统部署的实施方式更为接近,易于理解;图论研究成果丰硕,可为应用部署分析提供理论工具,例如图着色、图划分和子图同构等. 文中以混合部署、增量部署为例,展示了部署图的优势. 但是,部署图也存在粒度小、实现繁琐和查找困难等缺点,因此需要设计良好的部署工具加以支持.
我们下一步将继续完善云应用部署管理平台,扩充云平台资源监控功能,开展基于日志的部署图自动生成、应用部署性能优化等方面的研究.
[1] 陈康,郑纬民. 云计算:系统实例与研究现状[J]. 软件学报,2009,20(5):1337-1348.
CHEN K,ZHENG W M. Cloud computing:system instances and current research[J]. Journal of Software,2009,20(5):1337-1348.
[2] 刘欢欢,麻志毅,陈泓婕. 基于PaaS的云应用软件部署环境的元模型[J]. 计算机科学,2015,42(10):45-49;80.
LIU H H,MA Z Y,CHEN H J. Meta-model of PaaS-based cloud application’s deployment environment[J]. Computer Science,2015,42(10):45-49;80.
[3] SIMBAD team. M-COAPS API[EB/OL]. (2016-01-04)[2016-06-08]. http://www-inf.it-sudparis.eu/SIMBAD/tools/COAPS/.
[4] HOSSNY E,KHATTAB S,OMARA F,et al. A case study for deploying applications on heterogeneous PaaS platforms[C]//Proceedings of the 2013 International Confe-rence on Cloud Computing and Big Data. Washington,DC: IEEE,2013:246-253.
[5] YONGSIRIWIT K,SELLAMI M,GAALOUL W. A semantic framework supporting cloud resource descriptions interoperability[C]//Proceedings of the 9th International Conference on Cloud Computing (CLOUD). San Francisco,California:IEEE,2016:585-592.
[6] NGUYEN B M,TRAN V,HLUCHY L. Development and deployment of cloud services via abstraction layer[C]//Proceedings of International Conference on Computing,Management and Telecommunications. New York:IEEE,2013:246-251.
[7] BRANDTZ☞G E,MOHAGHEGHI P,MOSSER S. Towards a domain-specific language to deploy applications in the clouds[C]// Proceedings of the Third International Conference on Cloud Computing,Grids,and Virtualization. Nice,France:[s.n.],2012:214-218.
[8] SELLAMI M,SAMI Y G,MOHAMED M,et al. PaaS-independent provisioning and management of applications in the cloud[C]//IEEE Proceedings of the Sixth International Conference on Cloud Computing. Washington,DC:IEEE,2013:693-700.
[9] Hightopo Inc. A rich JavaScript UI library[EB/OL]. (2015-09-12)[2016-07-15]. http://www.hightopo.com/index.html.
[10]Amazon Web Services,Inc. AWS cloud formation[EB/OL]. (2015-12-07)[2016-08-02]. https://aws.amazon.com/cn/ cloudformation.
[11]BUYYA R,BARRETO D. Multi-cloud resource provisioning with Aneka:a unified and integrated utilisation of microsoft azure and amazon EC2 instances[C]//Proceedings of International Conference on Computing and Network Communications. New York:IEEE,2015:216-229.
[12]BROGI A,CARRASCO J,CUBO J,et al. SeaClouds:an open reference architecture for multi-cloud governance[C]//Software Architecture:Proceedings of the 10th European Conference. Berlin:Springer,2016:334-338.
[13]GONCALVES J R,ROLIM T,SAMPAIO A,et al. A multi-criteria approach for assessing cloud deployment options based on non-functional requirements[C]//Proceeding of the 30th Annual ACM Symposium on Applied Computing. New York:ACM,2015:1383-1389.
[14]ULLMANN J R. An algorithm for subgraph isomorphism[J]. Journal of the ACM (JACM),1976,23(1):31-42.
[15]LISCHKA J,KARL H. A virtual network mapping algorithm based on subgraph isomorphism detection[C]//Proceedings of the 1st ACM Workshop on Virtualized Infrastructure Systems and Architectures. New York:ACM,2009:81-88.
【中文责编:庄晓琼 英文审校:肖菁】
Research on Application Deployment Technology of Cloud Platforms Based on Graph Model
ZHENG Weiping*, LIU Jianmin
(School of Computer Science, South China Normal University, Guangzhou 510631, China)
An application deployment schema based on deployment graph is presented for the purpose of platform-independent deployments, in which a general deployment framework for cloud applications is given and related design principles and implementation technologies for the deployment instrument are focused. A prototype system is implemented and a deployment case is used together to prove the feasibility of the presented deployment schema, as well as the advantages of platform-independency, visualization and reusability etc.
cloud platform; application deployment; deployment graph;platform-independency; subgraph isomorphism
2016-08-08 《华南师范大学学报(自然科学版)》网址:http://journal.scnu.edu.cn/n
广东省科技计划项目(2013B010401021,2016B010109005);广东省自然科学基金项目(S2013040012449)
TP311
A
1000-5463(2017)04-0115-07
*通讯作者:郑伟平,副教授,Email:csweapon@gmail.com.