一种部署在云计算环境中部署服务的方法

文档序号:6425139阅读:253来源:国知局
专利名称:一种部署在云计算环境中部署服务的方法
技术领域
本发明涉及计算机应用技术领域,尤其涉及服务在云计算中软件即服务平台 (Software as a Service, SaaS)中服务部署的一种部署在云计算环境中部署服务的方法。
背景技术
狭义云计算指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算(Cloud Computing)是网格计算(Grid Computing)、分布式计算(DistributedComputing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage ^Technologies)、虚拟化(Visualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。因为云计算技术是新一代信息技术产业的重要组成部分,是继个人计算机、互联网之后的第三次信息技术浪潮,将引发信息产业商业模式的根本性改变,才使得世界众多国家都将其作为战略性新兴产业中的重点发展领域。从中国信息化建设角度看,云计算将极大地推动中国信息基础设施建设、支撑中小企业信息化升级并保障国家经济平稳较快发展、推动传统产业的改造升级和加速培育高科技新兴产业。云包括三种模式IaaS、PaaS, SaaS, 本发明主要涉及 SaaS (Software-as-a-Service)软件即服务。它是一种通过hternet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。相对于传统的软件,SaaS解决方案有明显的优势,包括较低的前期成本,便于维护,快速展开使用等。现有技术IBM公司在2005年提出面向服务架构的技术,其基本原理方式如图1所示,服务提供者通过WSDL向第三方代理UDDI注册服务,服务使用者向代理搜索可用服务,代理提供服务搜索规则,服务使用者通过WSDL描述的服务提供者地址访问服务。云计算技术现在已经逐渐走向成熟,已经有较多成熟的产品,如Goole的Google App Engine,亚马逊的弹性云EC2,微软的Azure等等,云服务的提供商提供了强大的可扩展虚拟存储和计算能力,多台分布式计算机连接起来成为一个集群的“虚拟超级计算机”, 用户只需要付少量的费用,即可享用高性能计算。云计算与SOA如何结合也是当前云计算研究的热门之一;应用程序经常总是有一两项计算密集型的“功能”。这些应用程序的大部分都需要更多的处理过程,因为它们在数学上是很复杂的,或者需要很多分析,或者包括处理大量的数据集。无论是哪一种原因,运行这些工作量都是很昂贵的。现有技术的问题面向服务的架构在传统领域方面发展比较成熟,但是在云环境中仍然存在诸多问题,云是能够提供非常强大的计算能力的,但SOA工作量还不能够有效地卸载到云计算,原因如下 1.传统的SOA的描述语言WSDL不太适合云环境,如WSDL中的服务IP地址端口等信息在云环境中并没有任何意义,因为云相对于用户和服务提供者来说,都是透明的,用户不可能知道云中哪个节点保存和运行的服务,更谈不上IP地址;另外,云环境中需要的一些虚拟存储的句柄等信息也是目前WSDL所不能提供的2.传统的SOA需要一个或者若干个Wfeb Service的容器,如IBM的W^eb Sphere,服务开发者将服务显式的部署在Web Service容器中;而在云环境中,服务开发者是不知道服务运行的物理位置;而对于云平台来说,每个云节点都有部署该服务的能力,那么如何选择部署的节点是云平台首先要解决的问题,另外,在云环境中,节点的失效是经常发生的, 服务部署系统不仅要选择一个最优的部署节点,还要做一定的冗余部署。3.传统的SOA的部署是固定运行在ffeb Service容器中,即使服务反应时间非常慢,服务质量极低的情况仍然会继续运行。针对上述问题本发明集中于解决这些工作量也就是服务在整个云环境中各个节点的部署的问题,更高效地利用云的计算能力;解决云中如何部署服务的问题但是在云环境中,服务提供者并不需要自己维护一个服务运行的环境,而是将服务提交至云环境中,至于服务存放的位置,所需的物理资源,都不需要服务提供者关心。本发明提供的方法就是解决对于云平台来说,服务提供者提供的服务如何部署,部署到哪个节点,每个节点之间如何均衡协商。

发明内容
本发明目的在于,解决云平台中软件开发使用SOA架构的部署问题,其包含了以下各方面的目的首先,云平台为开发者提供一套标准服务描述语言,开发者开发服务,向云平台注册;该标准服务描述语言采用XML格式,改进于WSDL,是云服务调用规范的描述。然后,云平台根据云结点当前负载的情况和服务的资源需求,计算该服务最佳部署点,将服务部署至该结点的云服务容器,同时选择若干个次优的节点,冗余部署;冗余部署点平时并不运行,当该服务运行的节点失效时,冗余部署点继续运行。最后,在服务实际运行中,云平台定时监测云结点中该服务运行的状态,并计算是否需要将该服务重新部署至更优结点,保证服务质量。本发明提供了一种在云平台中部署服务的方法,包括以下步骤1)开发者通过创建元数据向服务仓库注册服务;2)数据仓库根据服务生成索引,并将服务交付至服务部署系统处理;3)服务部署系统计算服务执行服务所需时间、内存等信息估计服务可能占用服务器的负载;4)服务部署系统获得空闲云结点的当前负载,计算最佳的部署结点,并将服务部署至该结点云服务容器,同时选择若干个次优的节点,冗余部署;5)经过一段时间后,服务部署系统获取该服务在每个结点实际运行情况,根据该统计结果重新部署服务。其中,在所述步骤1)中,服务注册系统为开发者实现了一组可公开访问的接口,通过这些接口,服务开发者向系统注册服务,云计算需求者可以找到云平台中提供的各种服务开发特定应用;服务开发者首先需要了解服务注册系统定义的云服务定义语言(Cloud Service Define Language,CSDL),根据该规则说明提供的服务和调用规则;其中,在所述步骤2)中,服务部署系统根据服务开发者提供的SDL文件,为服务生成索引,并将服务保存至服务仓库,供服务需求者索引服务;其中,在所述的步骤3)中,服务部署系统根据服务开发者提供的SDL文件,预计算该服务所需的存储空间、耗费时间等信息,量化可能占用的负载;其中,在所述的步骤4)中,服务部署系统实时了解各个节点的负载情况,根据服务所需要的资源和各个节点可以接受的负载,选择若干最优或者较优的节点部署该服务, 并记录该服务部署的位置,同时选择若干个次优的节点冗余部署,保证系统的健壮性;其中,在所述的步骤5)中,服务部署系统定时检查各个节点的负载现状、是否存在故障主机等信息,根据步骤4)动态调整服务在各个节点的部署。


图1为传统面向服务体系架构SOA调用流程图2为本发明架构结构及其调用关系3为服务部署流程4为服务开发者注册服务流程5为云节点在云部署中心存储结构
具体实施例方式为使本发明的特征及优点得到更清楚的了解,以下结合附图,作详细说明如下如图2所示,描述了本发明的系统架构结构及其调用关系示意图,分为5个部分和一个主要参与者;一个主要参与者是云服务开发者,5个主要组成部分包括云服务注册中心,服务部署系统,服务仓库,备用服务仓库,云结点;目前基于SOA架构的程序是作为一个整体部署到应用服务器中的,这对应用服务器的性能提出了很高的要求,所有应用同时运行在一台服务器上,当部署的应用较多时,对 CPU、存储等资源争夺将变得非常激烈,从而导致服务器性能下降,同时也影响所部署应用的正常运行。为了解决这一问题,提出了将应用系统以SOA方式部署到云计算平台的思想。传统SOA中部署服务的方式如图1所示,从图中可以看出,服务提供者需要使用服务时,必须向UDDI查询服务,并了解该服务调用规范和该服务提供者的IP地址、端口等信息;而在云环境中,这些信息并不能反映云平台的特点,而且,传统的UDDI+S0AP的技术模式不能运用到云平台中,本发明使用云服务注册中心的方式,云服务注册中心与传统SOA 的不同点主要体现在1.云服务注册中心不仅完成服务接口规范,还要负责服务的部署, 而传统的SOA中不存在部署的环节,本发明在步骤4)中提供了一种在云环境中部署服务的方法;2.云服务的部署系统根据会预计系统的运行所占用的时间和空间计算负载,将计算密集型的服务部署到相对空闲的云节点,而传统的SOA中只是服务提供者提供服务器,运行效率较低。因为云服务提供者和使用者是松耦合关系,提供者必须遵循一定规范开发,使用者才能在不知道服务具体实现情况下,只调用服务提供者提供的服务描述文件调用该服务,所以云服务注册中心的模块之一是定义服务描述规范和服务注册接口,云服务开发者根据云服务注册中心提供的规范开发特有服务并向云服务注册中心发出注册请求, 云服务注册中心首先验证云服务开发者提交的云服务描述文件(Cloud Service Define Language, CSDL),然后将服务提交至服务部署系统;服务部署系统功能是统一部署云服务至所有的分布式云节点,计算节点的负载和统计服务运行的状态,每隔一段时间根据实际运行状态重新动态部署,对于每个提交的服务,云部署平台还将其提交至服务仓库;服务仓库负责保存云服务注册中心生成的服务索引,并生成搜索规则,云服务使用者通过其他系统与服务仓库交互,搜索和请求可用的逻辑服务;服务仓库在本系统中占有至关重要的地位,是整个云平台良好运行的关键,备用服务仓库是服务仓库的一个实时镜像,在服务仓库需要维护、更新或者出现故障时;备用服务仓库将起到服务仓库的作用;云结点是云环境中分布式的结点,是实际服务的运行者,服务实际中也是部署到云结点中,为了保证系统的健壮性,同一个服务实际上在多个云结点中同时部署,当服务请求到达时,每个云结点都有处理该服务的能力,云节点在运行服务同时启动统计线程,统计信息主要包括本节点负载和服务运行实际占用的时间空间等情况,并将统计信息反馈至服务部署系统。下面详细介绍服务在云平台中部署的流程为例来说明本发明的具体实施。服务从开发到实际部署到云节点共有5个步骤1)开发者通过创建元数据向服务仓库注册服务;2)数据仓库根据服务生成索引,并将服务交付至服务部署系统处理;3)服务部署系统计算服务执行服务所需时间、内存等信息估计服务可能占用服务器的负载;4)服务部署系统获得空闲云结点的当前负载,计算最佳的部署结点,并将服务部署至该结点;5)经过一段时间后,服务部署系统获取该服务在每个结点实际运行情况,根据该统计结果重新部署服务。在所述步骤1)中,如图2所示,开发了一个与云平台无缝对接的云服务注册中心, 该服务注册中心运行在一台云服务器中,采用C/S模式,开发者首先下载云平台客户端,通过Client端填写服务注册文件CSDL和服务例程,将其上传到云平台中。在所述步骤1)中,如图2所示,服务开发者根据服务注册中心规定的服务规则开发服务,并以CSDL语言描述该服务CSDL (Cloud Services Description Language,云服务描述语言)是一种XML Application,他将云服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。CSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的云服务。CSDL文件应该包括一下几个部分ServiceType 使用某种语法的数据类型定义;MetaKeyffords 本服务的关键字,帮助搜索
6
Content 要传递的数据;Args 消息参数;Operations 服务支持的操作的抽象描述;Interfaces 一个或多个端点支持的操作的抽象集;BindingProtocol 特定端口类型的具体协议和数据格式规范;Service 相关端点的集合,包括其关联的接口、操作、消息等;BucketPreference 云平台相关资源标识CSDL是参考WSDL、定义的一套云环境下运行的服务标准,与传统的UDDI中的WSDL 不同,在云平台中的CSDL不需要制定端口 port等信息,因为开发者也不知道该服务具体部署到云中具体的物理位置;另外CSDL增加了资源描述的元素,因为在云平台中,服务运行于MaS平台,而MaS又是基于I^aaS,需要向I^aaS平台申请资源,服务质量是与实际使用的资源相关,而传统的SOA是由服务提供者自己维护,资源数量也是一定的,故不需要维护资源。下面给出一个典型的CSDL文件
< xml version="!.0" encoding=〃UTF-8" > 〈definitions name="CSDLSample" > <MetaKeyffords> <meta-key name=" math" > <raeta-key name=" sqrt“ > </MetaKeyffords> <ServiceTypes name=" math" /> 〈content name="Siraple. arg〃> <args name="arg" type="xsd:int"/> </content>
〈content name="Simple.ret"> <args name="result" type=〃xsd:int〃/>〈/content〉
<portType name="SimplePortType〃〉 〈operation name=〃CSDL〃 parameterOrder=〃arg〃 > <input message=〃wsdlns:Siinple. arg〃/> 〈output message=〃wsdlns:Simple· ret〃/> 〈/operation〉 </portType>
<bindingProtocol name=〃SimpleBinding〃 type=〃wsdlns:SimplePortType〃> <stk:binding preferredEncoding="GBK〃 /> <csdl:binding style=〃rpc〃> 〈operation name=〃sqrt〃> <input)
<csdl:body use=〃encoded〃/> </input> <output>
<csdl:body use=〃encoded〃/> </output> 〈/operation〉 </bindingProtocol>
〈service name=〃CSDLSample〃>
<csdl: cloud name=" cs2c,,interface^http: //www. cs2c, com. cn/> </service>
<BucketPreference id="SDREQW#$9T 1213131"〉 <BucketProvider name=〃cs2c〃/> </BucketPreference> </definitions>示例中描述了一个数学运算中求平方根函数的原型,并且描述了该服务中保存数据的虚拟存储ID。服务提供者请求服务后,云服务注册中心验证该描述文件,CSDL文件的合法性判断使用XML技术中的xmlschema文件验证其合法性,若合法则向云服务部署平台请求服务部署,并同时向云服务仓库注册该服务,生成规则索弓I。在所述步骤2)中,生成索引的方式是根据步骤1)中CSDL文件中的MetaKeyWords 项中的meta-key属性值,服务仓库保存服务的同时,将与服务相关的所有关键字生成索引,记录步骤幻中计算的服务部署结点集合;在所述步骤幻中,服务部署系统通过模拟运行一次服务计算服务所占用的时间空间,下面介绍计算时间和空间的方法时间运行通过使用云平台中提供的获得时间戳接口,并开始运行程序时启动计时器,在程序运行后计算当前时间计算整个程序运行的总时间T,时间T的计算使用 gettimeofday方法,开始运行时记录时间start,服务每运行一次结束后,记录时间end, end-start即为一次运行时间,服务运行时间的计算根据多次运行的结果求平均值,这样计
算的时间更加准确,计算时间的例程如下所示#include <sys/time.h> #include <sys/time.h> #include <stdio.h> #include <math.h>
void function() {
unsigned int i,j; double y;
for(i=0;i<1000;i++) for(j=0;j<1000;j++) y=sin((double)i);
}
main() {
struct timeval tpstart,tpend; float timeuse;
gettimeofday (&tpstart,NULL); RunService(); //开始运行服务 gettimeofday(&tpend’NULL); timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+
tpend.tv_usec-tpstart.tv_usec; timeuse/= 1000000; printf("Used Time:%f\n",timeuse);
exit(0); }因为云平台中用户所有使用的资源包括内存、硬盘、CPU都是底层提供的虚拟化, 因此调用云平台的统计功能即可预计服务运行所占用的空间S;以基于Linux云平台为例, 下面给出获取硬件资源利用率的代码double get_hardware_usage(void) { FILE *hd_fp = NULL;
if(hd_fp = bucket_open("zhanggx/usage", "r")) == NULL){ sys_error("NO STAT FILE");
long long total = 1 ;
long long free = 0;
char bufl[BUF—MAX] = {'\0'};
char buf2[BUF_MAX] = {'\0'};
open(bufl,512, hdjp);
open(buf2, 512, hd_fp);
sscanf(bufl, "HdTotal: %lld V', &total);
sscanf(buf2, "HdFree: %lld \n", &free);
return l-(float)free/total;
}另外,云平台中为服务提供者所提供的服务设置权值Ct、Cs,当Ct > Cs时说明服务响应时间优先,最终通过公式Ct*运行时间+Cs*运算占用存储计算得到的负载;在所述步骤4)中,服务部署系统搜集云节点中负载的信息,根据步骤3)中得到的服务将要占用的负载选择一个最优的部署节点。选择最优节点的策略步骤如下获取所有节点的负载情况使用最小堆数据结构排列所有节点,其中最小堆是一个树形结构,如图所示,其特点是父节点的负载均大于子节点的负载选取根节点作为服务部署节点并选择该父节点的两个子节点作为冗余部署点,将服务部署到这些节点的云服务容器中。在所述步骤幻中,服务部署系统每经过一段时间,获取各个节点服务实际运行统计结果,获得运行响应时间小于某个阙值T的服务,该阙值的计算是动态计算的,计算方法是当前服务总数除以当前云节点个数,然后将该服务通过步骤幻,3),4)重新部署。以上所述的实例对本发明的各个部分的实现方式作了详细的说明,但是本发明的具体实现形式并不局限于此,对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。
权利要求
1.一种部署在云计算环境中部署服务的方法,其特征在于,其包括以下几个步骤1)开发者通过创建元数据向服务仓库注册服务;2)数据仓库根据服务生成索引,并将服务交付至服务部署系统处理;3)服务部署系统计算服务执行服务所需时间、内存等信息估计服务可能占用服务器的负载;4)服务部署系统获得空闲云结点的当前负载,计算最佳的部署结点,并将服务部署至该结点;5)经过一段时间后,服务部署系统获取该服务在每个结点实际运行情况,根据该统计结果重新部署服务。
2.如权利要求1所述的方法,其特征在于,在步骤1)中,开发者同时需要提交一种云服务描述语言CSDL,该语言详细描述了服务开发者、关键字、调用参数、返回值、使用的云平台资源、支持的操作、提供的服务概要、调用的方式等信息,是云服务开发者或服务提供者向云平台注册服务的所要遵循的标准。
3.如权利要求1所述的方法,其特征在于,在步骤幻中,服务仓库提取步骤1)中服务开发者提供的CSDL语言中“关键字” 一项,定义搜索规则,生成索引保存到数据库中,供服务使用者搜索。
4.如权利要求1所述的方法,其特征在于,在步骤3)中,一种根据服务运行时间、所占空间以及其权值计算服务负载的一种方法。
5.如权利要求1所述的方法,其特征在于,在步骤4)中,一种按照最小堆数据结构,以负载为索引存储云节点的方法。
6.如权利要求1所述的方法,其特征在于,在步骤4)中,在存储的云节点实时负载中选择最部署优点的算法,即选择权利要求5中所述的最小堆顶点。
7.如权利要求1所述的方法,其特征在于,在步骤5)中,云服务部署系统根据云节点统计结果,动态部署的方法,将失效的节点中的服务以及运行响应时间低于阙值的服务重新部署,以达到效率最高,服务质量最优。
全文摘要
一种部署在云计算环境中部署服务的方法,本发明介绍的方法主要包括开发者通过使用本发明定义的一种云平台服务定义语言CSDL描述所提供的服务,并将服务提交至云平台,云平台根据云节点和该服务的负载选择最优的节点部署服务,并根据CSDL生成搜索规则;服务使用者通过访问云服务仓库搜索可用服务并调用;为保证健壮性,本系统还提供一个备用部署系统,并定期检查云节点运行情况,重新部署服务达到最优,利用本方法能使云平台具有较高服务效率和容错性,并且在云环境中,服务提供者并不需要自己维护一个服务运行的环境,而是将服务提交至云环境中。
文档编号G06F17/30GK102223398SQ20111014137
公开日2011年10月19日 申请日期2011年5月30日 优先权日2011年5月30日
发明者兰雨晴, 冯运辉, 孙坤建, 张冠星, 王钧, 黎立 申请人:兰雨晴
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1