使用面向对象语言的资源编排方法和设备与流程

文档序号:13331886阅读:294来源:国知局
使用面向对象语言的资源编排方法和设备与流程

本公开的各实施方式总体上涉及资源编排,并且更具体地涉及使用面向对象语言的资源编排方法、设备和计算机程序。



背景技术:

在云时代中,在云资源编排中,对将作为资源被部署和管理的任何项目进行抽象,例如通过可执行代码模板指定它们的细节和部署步骤,并且使用部署引擎来实现部署。例如,openstackheat是一种资源编排工具,其可根据模板部署多种复杂的应用。同样,传统的puppet也是一种编排语言,其中puppet代码作为模板来定义应用的部署过程。然而,针对云技术,信息技术(it)基础结构和软件应用的不断发展的复杂性以及不断缩短的上市时间总是需要更佳的恢复工具。



技术实现要素:

根据本公开的一个方面,提供了一种使用面向对象语言的资源编排方法。该方法包括:创建从面向对象语言中的概念到资源编排的需求的对应关系;创建用于实施所述资源编排的、基于所述对应关系的工作流;以及基于所述对应关系和所述工作流来实施所述资源编排。

根据本公开的另一方面,提供了一种电子设备。该电子设备包括:处理器;以及存储器,所述存储器被耦合到所述处理器并且存储有供所述处理器执行的指令,所述指令当由所述处理器执行时,使得所述设备:创建从面向对象语言中的概念到资源编排的需求的对应关系;创建用于实施所述资源编排的、基于所述对应关系的工作流;以及基于所述对应关系和所述工作流来实施所述资源编排。

根据本公开的另一方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行使得机器执行根据本公开的一个方面的一种使用面向对象语言的资源编排方法的步骤。

附图说明

结合附图并参考以下详细说明,本公开各实施方式的特征、优点及其他方面将变得更加明显,在此以示例性而非限制性的方式示出了本公开的若干实施方式。在附图中:

图1为根据本公开的实施方式的使用面向对象语言的资源编排方法100的流程图;

图2为根据本公开的实施方式的用于实现使用面向对象语言的资源编排方法的计算机设备的框图;以及

图3为根据本公开的实施方式的使用面向对象语言的资源编排设备的框图。

具体实施方式

以下参考附图详细描述本公开的各个示例性实施方式。附图中的流程图和框图示出了根据本公开的各种实施方式的方法和系统的可能实现的体系架构、功能和操作。应当注意,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分可以包括一个或多个用于实现各个实施方式中所规定的逻辑功能的可执行指令。也应当注意,在有些作为备选的实现中,方框中所标注的功能也可以按照不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,或者它们有时也可以按照相反的顺序执行,这取决于所涉及的功能。同样应当注意的是,流程图和/或框图中的每个方框、以及流程图和/或框图中的方框的组合,可以使用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以使用专用硬件与计算机指令的组合来实现。

应当理解,给出这些示例性实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。

为了实现更加理想的资源编排技术,基于针对资源编排的一般需求,面向对象(oo)技术被用来实现资源编排,以便最佳地适应上述一般需求。面向对象语言的示例包括但不限于java、c++、c#,等等。因此,根据本公开的实施例,提供了使用面向对象语言的资源编排技术,包括使用面向对象语言的资源编排方法、装置和程序。

通过利用面向对象语言来满足针对资源编排的一般需求,在此所记载的使用面向对象语言的资源编排技术能够构造理想的资源编排工具。同时,由于本公开中所记载的资源编排技术使用了面向对象语言,因此不仅能够使得资源编排工作简洁,还可以在无需修改的情况下实现对利用面向对象语言实现的资源编排技术中的组成部分的重复使用。因此,本公开中所记载的使用面向对象语言的资源编排技术创建了从世界范围内开发者团体所最广泛使用的面向对象语言到资源编排中的不断增加的挑战之间的桥梁。

本公开中所记载的使用面向对象语言的资源编排技术满足了资源编排的各种需求,这些需求包括例如从部署时指定到运行时生命周期管理。相比之下,现有技术的资源编排技术要么无法全面满足这些需求,要么具有由于使用独有的语言来编写而无法对使用面向对象语言编写的资源编排工具的组成部分进行重复使用而带来的局限性。

以下以云资源为例来描述根据本公开的实施方式的使用面向对象语言的资源编排。然而,本公开所记载的技术方案并不限于云资源的编排。本公开的各实施方式能够结合现在已知的或以后开发的任何其它类型的资源而被实现。

对于云资源编排的各种需求,总体而言,可以将它们抽象为以下两个方面。第一方面是部署时需求(记为“c1”),其指示在云资源的部署时每个云资源的细节以及云资源之间的关系,这通常由静态的编排模板加以描述。部署时需求所指示的内容主要用于云资源的部署。第二方面是运行时需求(记为“c2”),它指示在云资源被部署并且系统运行后对云资源执行的操作,这些操作例如包括监控云资源的状态(也被称为云资源的属性)、对云资源进行直接操作以及添加云资源之间的关系(例如,某一云资源到其他云资源的连接)。运行时需求所指示的内容主要用于云资源的生命周期管理。

尽管可以将云资源编排的各种需求抽象为以上两个方面,然而,为了更加具体地满足云资源的各种需求,可以将它们更详细地抽象为八个具体需求,这八个需求涵盖云资源部署时的云资源部署自动化以及云资源运行时的生命周期管理,从而形成用于云资源编排的完整特征集。这八个需求描述如下:

第一需求(记为“r1”)描述在部署时和运行时的云资源,可以分别对应于部署时需求和运行时需求。其中在部署时的一个云资源模板可以被部署到在运行时的多个运行的实例中。

满足第一需求允许跟踪云资源应当如何被部署以及云资源的部署的实例,这是在云资源的部署时和运行时中所有其他需求的基础。

第二需求(记为“r2”)描述云资源的属性。这些属性可以是在部署时所需的输入参数(例如,dns地址、数据库登录等),或者是在运行时可用的输出属性(例如,用于提供服务的ip地址和端口,平均工作量等)。满足第二需求允许使用输入参数来对云资源部署进行定制。更重要的是,第二需求允许查看云资源在运行时的输出属性。例如,当一个zookeeper云资源被部署并且随后的cassandra云资源希望连接到该zookeeper云资源时,该cassandra云资源将需要使用该zookeeper云资源的输出属性(即,一对服务地址和端口或者服务地址和端口的列表)以构建它的连接字符串。作为另一示例,当云资源提供了属性“is_healthy”时,用户可以将其构建到类属监控框架中。

第三需求(记为“r3”)描述对云资源执行的操作。这些操作在部署时被定义并且可以在运行时被调用。这些操作是对云资源所执行的直接操作,包括普通操作(例如,对云资源的安装和移除)和专有操作(例如,对cassandra云资源而非对rpm(redhat包管理)包云资源的扩展)。满足第三需求允许通过调用对云资源执行的操作来在运行时与云资源进行交互。其中,对云资源的安装和移除是用于云资源的部署和重新部署过程的基础。同时,某些云资源可以共享一些普通操作,比如向外扩展或者向内扩展、排除或者加入节点、重新开始或者关闭节点等。利用这些操作,用户可以实施类属自动扩展框架,或者通过排除出故障的节点并且重新安装它来实施自动回复。

第四需求(记为“r4”)描述对云资源的引用。当一个云资源必须连接到另一云资源时,这两个云资源之间的关系可以被称之为引用(例如,cassandra云资源需要连接到zookeeper云资源)。引用可以在部署时被定义,但是仅仅会在运行时发生,这是因为云资源所需要连接到的必定是存在于运行时中的运行的实例。满足第四需求允许更容易地指定云资源依赖性。在云资源编排中,一个云资源需要连接到另一云资源是很普遍的。通过满足第四需求,可以在模板中指定云资源的依赖性并且实现自动化云资源发现,从而使得用户无需记住主机名、ip地址或者端口并且无需将它们手动写入配置文件或者将它们转换为参数。

第五需求(记为“r5”)描述云资源的合成。在云资源编排中,较大的云资源可以由多个较小的云资源组成,其中这些较小的云资源被认为是较大的云资源的一部分(例如,openstack云资源包括cinder云资源)。云资源的合成不同于云资源的引用,这是因为云资源的合成指示a云资源是b云资源的一部分,而云资源的引用指示a云资源仅仅使用b云资源。满足第五需求允许通过合成较小的可重用云资源来构建较大的云资源。例如,openstack云资源时由数十个组成部分云资源组成的复杂云资源平台。通过满足第五需求,可以实现针对每个组成部分云资源独立地构建云资源模板并且然后将它们合成为复杂openstack云资源。在此之后,可以从组成部分云资源提取出任何组成部分云资源,并且在另一不同openstack云资源模板中使用它们。

第六需求(记为“r6”)描述云资源的继承。例如,云资源a1和a2可以继承自云资源b并且声明它们包括云资源b的类似功能(例如,haproxy和nginx均继承自云资源负载平衡器,这指示它们同样进行负载平衡)。考虑面向对象语言中的接口。同样,云资源a1和a2可以继承自云资源b以重新使用云资源b的代码(例如,ssh(安全命令行终端)服务器和ssh客户端均继承自云资源ssh从而使用云资源ssh的配置文件)。满足第六需求允许云资源遵循普通接口。例如,可以对可扩展云资源执行比如向外扩展或者向内扩展之类的操作。因此,当满足了第六需求时,任何作为继承者的云资源都可被执行扩展操作并且向用户告知它们可扩展。因此,在本公开的使用面向对象语言的云资源编排技术中,可以构建类属框架以检测哪些云资源可扩展并且进而进行自动扩展。作为另一示例,应用云资源可以提供属性is_healthy(是否正常),因而可以通过轮询属性is_healthy来向监控框架添加任何作为继承者的云资源。

第七需求(记为“r7”)描述云资源的操作顺序。例如,对云资源的一个操作可以要求总是在对云资源的另一操作之后被执行。通常,这些需要严格操作顺序的的操作是指在部署时使用的操作“安装”(例如,云资源web-服务器应当在云资源操作系统之后被安装)。第七需求是云资源编排中的基本需求之一。例如,操作系统(os)云资源应当在安装任何应用云资源之前被安装,而在部署mesos云资源前应当先安装docker云资源。

第八需求(记为“r8”)描述云资源编排的事件。例如,对云资源的一个操作可能需要在某个事件发生之后被执行(例如,每当一个云资源完成它的部署时,使得计数器加一的操作)。第八需求是云资源编排中的常见需求。满足第八需求允许用户定义例如在所有云资源已被部署时的定制操作。例如,该操作可以是调用webapi以告知部署已完成。

根据本公开的使用面向对象语言的云资源编排技术,可以通过创建模板来描述上述八个需求,并且通过创建编排引擎来执行模板从而实现满足上述八个需求的云资源编排,从而使得所实现的云资源编排能够在部署时和运行时二者中工作,进而支持云资源的部署自动化和生命周期管理。

在环境中,尽管并未必须,但上述八个需求可以均被满足以最大限度提高系统的各种能力。例如,可以尝试从基础结构即服务(iaas)到平台即服务(paas)再到软件即服务(saas)来部署完整的云栈,该部署可以被简述如下:

基础结构即服务层:openstack(即,基础结构即服务)的每个组成部分是较小可重用云资源模板。一个云资源模板可以实例化成用于高可用性(ha)设立(第一需求)的多个运行的实例。许多openstack云资源组成部分需要连接到keystone云资源,从而使得它们包含对keystone云资源的引用(第四需求)。它们一起组成openstack云资源基础结构即服务(第五需求)。每个组成部分具有比如服务ip和端口之类的属性,并且它们经由属性暴露它们的配置的部分,从而使得可以容易地查看它们的状态(第二需求)。

平台即服务层:平台即服务层是cloudfoundry,它的大部分组成部分是可扩展的。它们的资源继承自可扩展资源并且实施必要的操作。编排引擎可以通过调用它们的操作来监控实时工作量并且进行自动扩展(第六需求)。cloudfoundry云资源也可以被分节成一系列较小云资源(第五需求)以减小复杂性。

软件即服务层:软件即服务层由在cloudfoundry中运行的一组应用组成。这些应用可以继承自应用基础资源,该应用基础资源提供操作“check_healthy”(第六属性)。利用这一操作,云资源编排可以提供类属健康监控。如果应用云资源也支持比如排除和加入节点的操作,则可以利用其来构建自动回复框架(第三需求)。同样,这可以通过连续地排除旧节点并且加入新节点来用于轮流升级。可以在开始云应用服务之前先配置外部网络,而这将需要制定云资源操作顺序(第七需求)。

其他:在所有云资源被部署之后,可能会想要知道总云资源计数和流逝的时间。这可以通过在开始和结束事件到达时对计数器进行计算来完成(第八需求)。也可以在事件到达时调用其他系统的webapi(第八需求),这对于不同云资源编排系统的集成有用。

总体而言,上述八个需求是从实际部署自动化和生命周期管理抽象而来,它们组合起来揭露了构建用于构建尤其适用于云环境的功能强大的理想资源编排工具的需求。然而,它们不仅几乎均不能满足抽象的云资源的部署时需求和运行时需求二者,也几乎均不能全面满足上述八个需求。即使某个语言能够满足上述要求,它们也并非由面向对象语言编写,因此具有很大的局限性。以下对一些现有的云资源编排工具进行简要评述:

第一类工具包括puppet、chef、ansible和saltstack等。这些云资源编排工具具有强大的性能,甚至具有比如类和继承之类的一些面向对象概念。然而,这些云资源编排工具仅仅关注于云资源的部署时需求,并且因此缺乏对云资源的运行时需求的支持。一般而言,在部署完成后,它们就将失去对云资源编排的控制。同时,这些云资源编排工具也无法完全支持第一需求、第二需求和第三需求。

第二类工具包括tosca等。tosca更多地是一种规范而不是实现方式,其具有针对云资源关系的复制设计,但是就像第一类一样仍然缺乏对云资源的运行时需求的支持。另一方面,当可以使用面向对象语言来自然地对应于云资源编排的八个需求时,使用比如tosca之类的新语言的好处将是非常有限的。

第三类工具包括hot等。hot即热编排模板(heatorchestrationtemplate),其为openstackheat所提供的云资源编排工具。其允许查看如在第一需求中的云资源实例以及如在第二需求中的运行时属性的一部分。然而,hot并不支持如在第三需求中的在运行时定义或者调用对云资源的操作。同时,hot也不包括如第六需求中的云资源集成。最后,由于hot的编写语言不是面向对象语言,因此将会带来额外的学习开销。

第四类工具包括murano等。murano是用于云资源编排的另一openstack计划,其支持在云资源的部署时和运行时的第一需求至第七需求。然而,murano使用了一种新语言也并不涉及面向对象的概念。例如,在murano所使用的语言中在类与对象之间并没有清晰的划分,没有对对象创建的清晰控制,并且云资源的引用和合成也不像使用面向对象语言时那样灵活。由于murano并没有重复使用现有的、在成熟开发者团队中被广泛采用的面向对象语言,因此具有很大的局限性。反之,当使用面向对象语言来实现云资源编排技术时,由于所使用的面向对象语言更加简明和简单,因此将大幅度减少学习开销,并且容易形成与现有面向对象语言开发者团队之间的桥梁。

综上所述,没有现有云资源编排工具可以全面满足针对云资源编排的八个需求,并且它们无法共享利用面向对象语言来实现云资源编排的优点。根据本公开的实施例,利用面向对象语言中的概念很好地满足了云资源编排的八个需求,从而使得可以使用面向对象语言来实现云资源编排技术。下面将参考图1-图3描述本公开的若干示例实施例。

参照图1,其为根据本公开的实施方式的使用面向对象语言的资源编排方法100的流程图。如图所示,在步骤110中,创建从面向对象语言中的概念到资源编排的需求的对应关系。上述对应关系也可以被称为从面向对象语言中的概念到资源编排的需求的映射。

在一个实施例中,第一需求描述云资源在该云资源的部署时的静态细节和云资源模板。其中,该静态细节可以对应于面向对象语言中的概念“类”。在运行时,一个云资源模板可以被部署在多个运行的“实例”中,从而对应于面向对象语言中的概念“对象”。

在一个实施例中,第二需求描述云资源的属性,其可以对应于面向对象语言中的概念“对象的属性”。其中,输入参数可以对应于面向对象语言中的概念“构造器的参数”并且输出属性可以简单地对应于面向对象语言中的概念“对象的属性”。

在一个实施例中,第三需求描述对云资源执行的操作,其可对应于面向对象语言中的概念“方法”。

在一个实施例中,第四需求描述云资源的引用,其可以对应于面向对象语言中的概念“对象引用”。其中,“对象引用”在“类”中被定义,其对应于部署时的云资源模板。但是,当向“引用”指派值时,保持者(holder)和目标二者都是“对象”,其对应于运行时中一个使用另一个的云资源实例。

在一个实施例中,第五需求描述云资源的合成,其也可以对应于面向对象语言中的概念“对象引用”,但是引用的“对象”或者云资源实例被认为是保持者的一部分。

在一个实施例中,第六需求描述云资源的继承,其可以对应于面向对象语言中的概念“继承”。“类”或者资源可以继承自接口,以声明它们满足被继承者的规范从而提供特定属性或者操作或“方法”。“类”或者资源也可以继承自“类”以重新使用被继承者的代码。

在一个实施例中,第七需求描述云资源的操作的顺序。在面向对象语言中,操作或“方法”在另一操作或“方法”中被调用。因此,“方法”中的语言是必不可少的,这意味着命令按顺序被逐个执行,并且云资源的操作顺序也对应于面向对象语言中的“方法”。

在一个实施例中,第八需求描述事件。在面向对象语言中,可以定义比如“开始执行”、“执行全部完成”、“正进入对象a的方法b”、“完成了对象a的方法b”等。上述内容自然地对应于第八需求所涉及的事件,例如,部署开始,部署结束,进入云资源实例a的操作b、完成了云资源实例a的操作b等。

由此可见,上述八个需求非常自然地与面向对象语言中的概念接近,并且它们之间存在简明的对应关系,从而使得可以基于面向对象语言来实现理想的云资源编排技术。

面向对象语言的种类很多,包括java、c#和c++等。应当理解,本公开是基于广义上的面向对象语言而做出的,而并不是基于某种具体的面向对象语言。因此,本公开的实施并不限于具体的面向对象语言,而是可以在利用一种面向对象语言加以实施的情况下被容易地转译或者实施为其他面向对象语言,因为这些面向对象语言共享相同的面向对象语言方法。

然而,由于java是目前被最为广泛采用并且最经典的面向对象语言,因此在本公开的说明书中以java为例来对具体实施方式进行描述。同时,使用java语言也演示了本公开可以容易地转译为具体面向对象语言或者基于具体面向对象语言来实施。注意,以下使用的具体java语言示例并不必须由java解译器(jvm)执行。尽管以下java语言示例的语法与java相同,但是其也可以由本公开的云资源编排引擎执行。

以下所示的表1是按照java语法的云资源类的示例,其中用具体的评论来演示了java语言中的概念与第一需求到第七需求的对应关系。对于第八需求将在随后进行讨论。云资源类如云资源的部署时需求中展示的那样定义云资源是什么。当类被新建(new)到对象中时,云资源将如云资源的运行时需求中展示的那样被实际部署。

表1:java语言中的云资源类

以下所示的表2是按照java语法的云资源接口的示例。大多数面向对象语言允许从仅一个类但是多个接口继承,其中云资源接口也声明云资源但是不能被实际部署。通过从接口继承,云资源也将声明其满足特定规范。

表2:java语言中的云资源接口

以下所示的表3是按照java语法的云编排的执行的主要入口。在面向对象语言中,这通过使用main()方法来实现。在此,第一云资源实例被新建,而这触发该第一云资源实例的从属云资源实例被递归地实例化。

表3:java语言中的main()入口

以下将具体结合以上表1至表3中所示出的java语言示例来描述从java语言中的概念到云资源编排的八个需求的对应关系如何得以满足以及一些基本函数,其中部分细节已经在以上的表1至表3中的评论中加以描述。

关于第一需求,在上述java语言示例中,使用概念“类”来定义在部署时中的云资源是什么。类可以被新建,即,被实例化为“对象”,以表示该云资源在运行时中被实际创建。在main()中,可以看到一个云资源类可以被实例化成多个云资源实例。

关于第二需求,在上述java语言示例中,云资源属性对应于面向对象语言中的概念“对象属性”。输入参数应当从“类”构造器中进入,因为云资源需要这些参数来开始实际部署。也存在用于集成的云资源和合成的云资源的输入参数。云资源属性可以从公共部分或者操作内部被访问,这也对应于面向对象语言中的概念“对象属性”和“方法”的普通行为。在上述java语言示例中,使用注释来表明是输入参数还是输出属性。

关于第三需求,在上述java语言示例中,对云资源的操作对应于面向对象语言中的概念“方法”。在java语言中,在云资源类内部定义“方法”。存在用于云资源的部署和重新部署的强制方法“安装(install)”和“移除(remove)”。在“方法”或操作中,可以进行各种操作,比如在面向对象语言中可以实现的访问属性和调用其他操作。

关于第四需求,在上述java语言示例中,引用的对象对应于面向对象语言中的概念“对象引用”,其也是“对象属性”。它们是指被新建并且从这一个类的外部进入的云资源对象。因此,可以如在面向对象语言中可以实现的那样访问它们的属性或者调用它们的操作。通过上述java语言示例,用户能够理解何时和何处将引用的云资源实例化并且使它们进入这一个类。在上述java语言示例中,使用注释来表明是引用的云资源还是合成的云资源。

关于第五需求,在上述java语言示例中,合成的资源也对应于面向对象语言中的概念“对象引用”,其也是“对象属性”。它们是指应当在这一个类内被本地创建和管理的云资源对象。不同于从外部进入的引用的资源,合成的资源被认为是这一个类的一部分并且在类内部被管理。这一个类应当在构造器中对合成的资源进行实例化,并且在这一个类调用它们时调用它们的install()和remove()。换言之,引用的资源由用户管理,而合成的资源由这一个类管理。

关于第六需求,在上述java语言示例中,正如“类”可以继承自基类和接口,云资源继承也被如此对应。所允许的继承自仅一个类但是多个接口也适用于大多数面向对象语言。通过继承自基类,必须调用构造器中的它的父构造函数的对等物(也被称为超级通讯员(supercorrespondent)),安装和移除。通过继承自云资源接口,必须在类中提供指定的操作和属性。注意,java并不支持在接口内定义对象属性,但是由于代码实际上由本公开中所定义的编排引擎执行,因此可以允许这种做法。如果想要避免java修改,则可以将属性改变为javagetter方法。

关于第七需求,在上述java语言示例中,面向对象语言的“方法”中的代码被自然地按顺序执行。在main()和云资源操作中,具有用于在其中被执行的任何项目的顺序。实际上,来自以上表1至表3中的java语言模板中的任何元素的执行顺序都是可预测的。在不考虑jvm的内部优化的情况下,java保持相同的语义。

关于第八需求,比如java之类的一些面向对象语言并不具有预先包装的事件(但是c#具有)。但是,这些事件可以被容易地实施,这是因为本公开中所定义的编排引擎执行所有模板。该引擎在何处开始以及在何处结束,何时谁的操作进入或者完成,因此它可以发出事件。可以将云资源操作注册为事件处理器。当事件到达时,可以执行定制的动作。

main():这是上述java语言示例的总体执行的入口。其中,第一云资源对象在此被实例化,并且它的组成云资源被递归地新建。main中的动作被逐个执行,直到全部完成或者抛出异常。资源编排引擎将记录所有创建的云资源对象,以及它们的引用或者合成层级。因此,用户可以随后查看它们的树状列表,检查属性值,调用操作,或者在下一部署中引用现有对象。

auto:在上述java语言示例的代码中,以下各项被标记为“//auto”:调用基础云资源的构建器、将合成的云资源实例化、向对象属性指派输入参数、调用基础云资源的install()和remove()以及调用合成的云资源的install()和remove()等。这些代码是例程并且应当是强制的,因此由本公开的资源编排引擎自动地执行,并且用户实际上无需编写它们。作为备选、可以使用代码生成器来自动地生成这些例程代码。

action:在上述java语言示例的代码中,可以看到在每个操作中都有许多“actions”。actions可以是对指派的属性的读取、新建对象或者调用操作。actions也可以是在现有云资源编排工具中广泛课件的普通云资源编排命令,比如安装rpm包、调用外壳脚本、执行一些操作、开始或停止服务以及编写配置文件等。

尽管以上描述使用了在上述java语言示例的代码中使用的面向对象概念,但是这些面向对象概念并不限于java,而是可以使用普通面向对象方法中的如下概念:“类”、“接口”、“对象”、“对象属性”、“对象引用”、“方法”、“main()”等。“例外(exception)”在比如java、c++、c#和python等中被广泛支持。“注释(annotation)”在比如java、c#和python等中被支持。对于不支持“annotation”的语言,可以直接添加它(因为是由资源编排引擎来实际执行代码),或者可以使用被具体格式化的注释来代替。

概括而言,第一需求至第八需求通过使用普通面向对象方法被满足,并且通过java语言来加以演示,但本公开并不限于使用java语言。同时,本公开可以在无需语法修改的情况下使用比如java语言。

继续参照图1,在步骤115中,创建用于实施资源编排的、基于从面向对象语言中的概念到资源编排的需求的对应关系的工作流。根据以上表1至表3中所示出的内容,可以知道本公开中的由资源编排引擎执行的上述工作流可以与java中的工作流相同。对于其他面向对象语言,由于在它们之中所使用的概念是共同的,因此工作流也可以保持相同。

具体而言,上述工作流可以包括以下两个部分的工作流:

1.部署时工作流。在部署时工作流中,第一个步骤是进入main(),其中逐一执行动作(actions)。当云资源对象被新建时,调用类构建器,输入参数进入其中。首先应当调用基础云资源类的构建器,然后新建合成的云资源并且向对象属性指派输入参数。当合成的云资源被新建时,对云资源对象进行实例化的这一步骤可以被递归地执行,因为合成的云资源可以在其内具有更多合成的云资源。注意,新建云资源对象并不必然代表要对其进行部署。其中,调用install()来进行新建操作。在main()完成之后,应当部署所有云资源。

换言之,云资源编排引擎执行与java的工作流相同的工作流。云资源在被新建时被创建,并且之后将会进入运行时工作流。当install()被调用时,云资源被部署。对上述步骤的执行基于云资源的合成或者层级的关系来递归地创建和部署云资源。被引用的云资源的创建和部署由用户编写的代码管理。这些代码应当在适当时进入它们的持有者(holder)中。

备选地或附加地,在一些实施例中,在运行时中,云资源编排引擎记录创建的所有云资源对象。它们的引用或者合成层级。用户可以查看运行的云资源的树状列表。用户可以读取这些云资源的属性值,或者调用它们的操作。用户可以引用另一部署中的现有对象以读取它的运行时属性。来自分离的部署的引用可以是唯一字符串名或者对象句柄。

继续参照图1,在步骤120中,创建用于资源编排的资源编排模板,该资源编排模板指示步骤110中创建的对应关系以及步骤115中创建的工作流。实际上,以上表1至表3中所示出的java语言示例即为用于云资源编排的资源编排模板。因此,在以上表1至表3中所示出的java代码被编写完成后,即可认为完成了创建资源编排模板这一步骤。

应当理解,步骤120为抽象出的创建资源编排模板的步骤,在资源编排中,实际上仅需要在步骤110中创建的对应关系以及在步骤115中创建的工作流,而在步骤120中创建的资源编排模板是上述对应关系和工作流的载体。因此,步骤120是可省略的,而不会影响本公开的使用面向对象语言的资源编排技术的实现。

继续参照图1,在步骤125中,创建用于根据资源编排模板来实施资源编排的资源编排引擎。根据本公开的实施方式,资源编排引擎是以资源编排模板作为输入的、能够基于资源编排模板来进行资源编排的部件。因此,当以如以上表1至表3中所示出的java代码作为资源编排模板时,资源编排引擎是能够读取资源编排模板中的java代码并根据该java代码来执行资源编排的部件。

应当理解,步骤120为抽象出的创建资源编排引擎的步骤,在资源编排中,实际上仅需要能够基于步骤110中创建的对应关系以及步骤115中创建的工作流来实施资源编排,而在步骤125中创建的资源编排引擎仅是抽象出的、上述资源编排的实施者。因此,步骤125是可省略的,而不会影响本公开的使用面向对象语言的资源编排技术的实现。

接下来,在步骤130中,由资源编排引擎根据资源编排模板来实施资源编排。如在对步骤125的描述中所说明的,资源编排引擎以资源编排模板作为输入的、能够基于资源编排模板来进行资源编排的部件。因此,在步骤130中,资源编排引擎够读取资源编排模板中的java代码并根据该java代码来执行资源编排。

同样,如上所述,由于在本公开的实施方式中,最终目的是根据在步骤110中创建的对应关系以及在步骤115中创建的工作流来实施资源编排,并且因而在资源编排中可以省略创建资源编排模板的步骤120和创建资源编排引擎的步骤125。因此,在步骤120和步骤125被省略的情况下,步骤130可以被简化为根据对应关系和工作流来实施资源编排。

以上参照图1描述了根据本公开的实施方式的使用面向对象语言的资源编排方法100。应当理解,并且如上所述,对这些步骤的描述并非要求或者暗示必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤或者潜在的子步骤,将多个步骤或者潜在的子步骤合并为一个步骤或者子步骤执行,和/或将一个步骤或者潜在的子步骤分解为多个步骤或者子步骤执行。同时,上述步骤中的至少一些步骤可以被乱序执行或者并行执行,例如,在步骤110中创建的对应关系以及在步骤115中创建的工作流。

根据以上参照图1所描述的根据本公开的实施方式的使用面向对象语言的资源编排方法100,从另一视角来分析,利用上述使用面向对象语言的资源编排方法100以及在其中所定义的资源编排引擎,将具有诸多效果。首先,将编排扩展到覆盖部署时和运行时,从而带来操作的连续性。其中在部署时所得到的信息可以被维持和标准化以有助于在运行时管理部署的资源。而且,运行时的资源可以利用面向对象方法而具有用于互操作的标准方式,例如,可以通过调用api、访问属性、使部署的资源具有继承关系或者将部署的资源链接作为引用。

此外,可以获得将对编排的需求连接到任何现有面向对象语言和该语言的成熟开发者团体的桥梁。同时,也获得了连接任何类型的现有资源编排语言的桥梁。这些桥梁可以是互操作的,因为它们都共享相同的面向对象方法。又如,资源编排的需求被清晰地标识为八个需求,从而使得可以容易地在资源编排引擎中实现它们。

参照图2,其为根据本公开的实施方式的用于实现使用面向对象语言的资源编排方法100的计算机设备200的框图。如图2中所示,计算机设备200包括中央处理单元(cpu)201、只读存储器(rom)202、随机存取存储器(ram)203、总线204、i/o接口205、输入单元206、输出单元207、存储单元208以及通信单元209。应当理解,图2所述的框图仅仅为了示例的目的而被示出,而不是对本公开范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。其中,在存储单元208中存储有用于实现使用面向对象语言的资源编排方法100的指令。当该指令被中央处理单元201执行时,计算机设备200执行根据本公开的实施方式的用于实现使用面向对象语言的资源编排方法100。

参照图3,其为根据本公开的实施方式的使用面向对象语言的资源编排设备300的框图。如图3中所示,使用面向对象语言的资源编排设备300包括对应关系创建装置310、工作流创建装置320、资源编排模板创建装置330、资源编排引擎创建装置340以及资源编排实施装置350。具体而言,对应关系创建装置310被配置用于创建从面向对象语言中的概念到资源编排的需求的对应关系;工作流创建装置320被配置用于创建用于实施资源编排的、基于从面向对象语言中的概念到资源编排的需求的对应关系的工作流;资源编排模板创建装置330被配置用于创建用于资源编排的资源编排模板;资源编排引擎创建装置340被配置用于创建用于根据资源编排模板来实施资源编排的资源编排引擎;并且资源编排实施装置350被配置用于由资源编排引擎根据资源编排模板来实施资源编排。

使用面向对象语言的资源编排设备300中的各个装置主要用于实现使用面向对象语言的资源编排方法100的各个步骤。因此,上文针对使用面向对象语言的资源编排方法100所描述的各种特征同样适用于使用面向对象语言的资源编排设备300,在此不再赘述。因此,正如以上针对使用面向对象语言的资源编排方法100所描述的那样,对使用面向对象语言的资源编排设备300中的各个装置的描述并非要求或者暗示必须包括全部所示的装置才能实现期望的结果。附加地或备选地,可以省略某些装置或者潜在的子装置,将多个装置或者潜在的子装置合并为一个装置或者子装置,和/或将一个装置或者潜在的子装置分解为多个装置或者子装置。

另外,根据本公开的实施方式,参考图3描述的使用面向对象语言的资源编排设备300可以利用各种方式实现。例如,在某些实施方式中,该设备可以利用软件来实现。例如,使用面向对象语言的资源编排设备300可以被实现为使用面向对象语言的资源编排应用的一部分或者其可调用的另一软件系统。此时,面向对象语言的资源编排设备300中包含的各个装置可以被实现为软件模块。备选地,面向对象语言的资源编排设备300可以部分地或者完全地基于硬件被实现。例如,面向对象语言的资源编排设备300可以被实现为集成电路(ic)芯片或专用集成电路(asic)、现场可编程门阵列(fpga)、片上系统(soc)等。此时,面向对象语言的资源编排设备300的各个装置可以被实现为基于硬件的模块或元件。现在已知或者将来开发的其他方式也是可行的,本公开的范围在此方面不受限制。

再次,本公开的实施方式也可以通过计算机程序产品的形式被实现。该计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,该机器可执行指令在被执行使得机器执行根据本公开的实施方式的使用面向对象语言的资源编排方法100的各个步骤。

通过上文描述将会理解,面向对象语言中的概念能够完全支持针对云资源编排的八个需求。由于针对云资源编排的八个需求可以自然地对应于面向对象语言中的概念,使用面向对象语言来实现云资源编排可以使得云资源编排模板更加简明和简单。而且,由于几乎没有现有云资源编排工具都利用其自身的模板语言,因此存在过多的类似语言。因此,使它们归为一种面向对象语言将使得云资源编排变得更为简单,并且可以减少学习现有云资源编排工具的特有语言的学习开销。另外,面向对象语言是一种被广泛采用的成熟语言。因此,将面向对象语言用于云资源编排的领域,将能够构建从云资源编排到世界的最大开发者团体的桥梁,从而有可能更好地发展云资源编排技术。综上所述,面向对象语言是用于云资源编排的最佳解决方案。

应当注意,本公开的实施方式也可以通过硬件、软件或者软件和硬件的结合被实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、cd或dvd-rom的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本公开的设备及其模块可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。

虽然已经参考若干具体实施方式描述了本公开,但是应该理解,本公开并不限于所公开的具体实施方式。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1