在基于图的计算中分配服务的制作方法

文档序号:6510495阅读:127来源:国知局
在基于图的计算中分配服务的制作方法
【专利摘要】通过以下步骤,根据与服务相关联的计算图来处理服务请求,所述步骤包括:接收来自服务客户方的用于所述计算图的输入,将所述输入作为数据流的记录提供给所述计算图,接收来自所述计算图的输出,以及将所述输出提供给所述服务客户方。以如下方式在基于图的计算中并行处理数据流:即,其具有这样的潜在能力(potentially),可并行执行不同类型的请求,可并行执行类似的请求类型,和/或可并行执行在请求内的工作元素。
【专利说明】在基于图的计算中分配服务
[0001]本申请是申请号为200780029791.9、申请日为2007年8月9日、发明名称为“在基于图的计算中分配服务”的发明专利申请的分案申请。
[0002]优先权
[0003]本申请要求申请号为60/836,745,申请日为2006年8月10日的美国临时专利申请的优先权,通过参考将其全部内容引入本申请中。
【技术领域】
[0004]本发明涉及在基于图的计算中分配服务(distributing services)。
【背景技术】
[0005]通常,复杂的商业系统以多级方式处理数据,将某一级所产生的数据馈送至下一级中。可通过有向(directed)数据流图来描述流经上述系统的全部信息流,所述图中的顶点表示组元(components)(所述组元可以是数据文件或是处理),并且所述图中的链路或“边”表示组元之间的数据流。
[0006]图还可用于直接调用(invoke)计算。来自公司Ab Initio SoftwareCorporation, Lexington, MA 的带有图形开发环境(GDE)的 “CO > OPERATING SYSTEM?”具体展示(embody) 了这种系统。根据这种系统所制作的图提供了用于获得进出各个处理(所述各个处理由图的组元表示)的信息的方法,提供了用于在所述处理之间移动信息的方法,还提供了用于为所述处理限定运行顺序(running order)的方法。这种系统包括用于选择处理之间(interprocess)的通信方法的算法和用于调度(schedule)处理执行的算法,并且还提供对所述图的执行的监视。
[0007]经分配后的服务机制(architecture)允许计算机程序通过诸如万维网等的网络接口来访问而获得其它程序的功能,而不必将这些其它程序的功能特性(functionality)引入它们自己的运行码(operating code)中。

【发明内容】

[0008]总体而言,一方面,通过执行下述步骤,根据与服务相关联的计算图来处理服务请求,其中所述步骤包括:接收来自服务客户方的用于所述计算图的输入,将所述输入作为数据流的记录提供给所述计算图,接收来自所述计算图的输出,以及将所述输出提供给所述服务客户方。
[0009]所述执行可包括一个或多个下述特征。
[0010]接收所述输入的步骤包括:识别来自所述服务客户方且在服务请求中的所述输入,以及将所述输入提供给所述计算图的步骤包括:使请求识别符与所述服务请求相关联,将包括所述输入的工作元素提供给所述计算图,使所述请求识别符与所述工作元素相关联,以及将所述请求识别符与所述工作元素的关联(association)传送至输出节点。识别所述输入的步骤包括从被封装的(encapsulated)请求提取所述输入。所述被封装的请求包括SOAP请求。接收所述输出的步骤包括:接收包括来自所述计算图的输出的工作元素,以及识别与所述工作元素相关联的请求识别符,以及将所述输出提供给所述服务客户方的步骤包括:产生对应由所述请求识别符所识别的所述服务请求的服务响应,所述服务响应包括包含在所述工作元素中的所述输出。产生所述服务响应的步骤包括:将所述输出嵌入被封装的响应中。所述被封装的响应包括SOAP响应。
[0011]通过下述步骤,根据所述计算图来处理第二服务请求,其中所述步骤包括:接收来自第二服务客户方的用于所述计算图的第二输入,将所述第二输入作为第二数据流的记录提供给所述计算图,接收来自所述计算图的第二输出,以及将所述第二输出提供给所述第二服务客户方;以及在所述计算图中,并行处理所述第一输入和所述第二输入。并行处理所述第一输入和所述第二输入的步骤包括:识别适用于所述第一输入的第一子图,在所述第一子图中处理所述第一输入,识别适用于所述第二输入的第二子图,在所述第二子图中处理所述第二输入,接收来自所述第一子图的第一输出,以及接收来自所述第二子图的第二输出,其中同时执行所述第一子图和所述第二子图。并行处理所述第一输入和所述第二输入的步骤包括:将子图的第一实例识别为可用,在所述子图的第一实例中处理所述第一输入,将所述子图的第二实例识别为可用,在所述子图的第二实例中处理所述第二输入,接收来自所述第一实例的第一输出,以及接收来自所述第二实例的第二输出,其中同时执行所述子图的第一实例和所述子图的第二实例。
[0012]总体而言,一方面,通过执行下述步骤,在基于图的计算中处理数据流,其中所述步骤包括:识别适用于所述数据流中的第一记录的第一图,识别适用于所述第一记录中的第一工作元素的第一子图,在所述第一子图中处理所述第一工作元素,识别适用于所述第一记录中的第二工作元素的第二子图,在所述第二子图中处理所述第二工作元素,接收来自所述第一子图的第一输出工作元素,接收来自所述第二子图的第二输出工作元素,使所述第一输出工作元素与所述第一记录相关联,以及使所述第二输出工作元素与所述第一记录相关联,其中至少部分地同时执行所述第一子图和所述第二子图。
[0013]总体而言,一方面,通过执行下述步骤,在基于图的计算中处理数据流,其中所述步骤包括:识别适用于所述数据流中的第一记录的第一图,将子图的第一实例识别为可用,在所述子图的第一实例中处理所述第一记录中的第一工作元素,将所述子图的第二实例识别为可用,在所述子图的第二实例中处理所述第一记录中的第二工作元素,接收来自所述第一实例的第一输出工作元素,接收来自所述第二实例的第二输出工作元素,使所述第一输出工作元素与所述第一记录相关联,以及使所述第二输出工作元素与所述第一记录相关联,其中至少部分地同时执行所述子图的所述第一实例和所述子图的所述第二实例。
[0014]由说明书及权利要求而使得本发明的其它特征和优点变得明显。
【专利附图】

【附图说明】
[0015]图1A和图2示出了用于分配服务的系统的示意图。
[0016]图1B示出了用于调用服务的处理的流程图。
[0017]图3_5b示出了用于提供分配服务的图。
【具体实施方式】[0018]在一些实例中,有两种方式来使基于图的计算与分配服务进行互动。在一些实例中,图用以调用服务且与所述服务相关联(relates to),使得所述服务似乎被当作图中的节点。在其它实例中,将应用(application)与图相关联,使得所述图提供服务。这两种情况可同时实现。例如,正给某个应用提供服务的图其自身可调用其它服务以执行其部分计算。例如,由某个图所调用的服务可由其它图来提供,使得第一图调用第二图,而不是将其包含作为子图。
[0019]在一些实例中,如图1A中所示,基于图的计算100的服务节点102通过调用在分配服务导向机制(distributed service-oriented architecture)中的服务来运行。也就是说,当执行服务节点102时,调用图100外部的服务108,作为所述服务的客户方。例如,服务节点102可使用S0AP、HTTP、XML以及WSDL等中的一种或多种的组合,与宿驻(hosted)在应用服务器106上的web服务插件104进行通信,以到达外部服务108,从而可使服务节点102访问web服务。如下所述,外部服务108自身可以是基于图的计算。可以某种分配方式来执行所述服务,其中所述分配方式使用各种用于分配计算任务的方法中的任意一种。
[0020]服务节点102以基于图的计算100的本地格式(native format)来接收来自其它图的节点(例如,节点112)的输入110,例如是以与Ab Initio的DML类似的数据描述语言来描述的记录。然后,节点102将其输入110格式化成适用于其使用的web服务类型的格式(例如SOAP或其它类型的基于被封装的请求),并将服务请求114传送给应用服务器106。请求114中的URL指示出将所述请求发送给应用服务器106、插件104以及服务108中的哪一个。请求114能以各种方式发送,包括通过HTTP和RPC (远程过程调用)来发送。在服务器106上的插件104把输进来的请求114重新格式化成合适的格式,且将合适的调用116传送给外部服务108。
[0021]当服务108执行了其所调用的任意运行之后,所述服务108将输出118返回给插件104。插件104将服务108的输出118重新格式化成合适的服务响应120,以返回至服务节点102。服务节点102将服务响应120再重新格式化成合适的输出格式,并将输出121传递至下游的图的节点(例如,节点122)。从其它的图的节点112、122、124及126来看,经分配后的服务节点102可以和其它任何节点一样参与(participate in)图的计算100。只要服务节点102接收的是其预期的响应120类型,则服务器106的机制和安排(诸如插件104的性质以及其如何与服务108通信(或者,例如,是否使用插件104)之类)就与图节点无关。如下所述,服务器106、插件104以及服务108自身可以分别是基于图的计算服务器、插件以及图。
[0022]在一些实例中,图100被管路化(pipelined),这意味着,每个节点是以管路化的顺序阶段(sequential phases)方式对大流量输入记录的单个记录或记录的集合进行处理。在给定阶段中,各后继(subsequent)节点在其所接收的来自在前(previous)节点的记录或记录的集合上工作,而各在前节点对输入流中的下一记录或记录的集合进行处理工作。服务节点102可通过以下方式来调整上述运行:即,在对应于在前服务请求的响应被接收到之前,服务节点102接收附加记录,并且将各所述附加记录所请求的工作分配给服务108。例如,如果服务108能够处理多重并行请求(multiple concurrent request),那么上述方式就能够在此实现。记录可由分散的(separate)或可分散的(separable)工作元素组成,可以用如针对记录所述的这种管路化阶段(pipelined stages)方式来处理所述工作元素。
[0023]如果对不同的请求114花费不同的时间量来处理,那么,与接收其输入110的次序相比较,服务节点102可以依照不同的次序(order)来接收响应。这就允许由单个节点102访问具有不同处理时间的多重服务。可以选择性地配置诸如服务节点102之类的服务节点,使服务节点依照与接收其输入110的次序不同的次序提供其输出121。为了允许这种并行处理而不使用用于服务节点102的多线程处理(multiple threaded process),并且在各请求114中均不包括描述图100的整个状态的数据(这样就能基于其返回而使用各请求114),服务节点102跟踪(keeps track of )待完成的(outstanding)请求114并且将其与输进来的响应120进行匹配。在一些实例中,图被管路化,以便一次一个节点地处理各个记录或工作元素,并且分散的节点处理分散的记录或工作元素,但是可在任意给定时间点将多个(multiple)记录或工作元素分派给单个服务节点102。
[0024]在被管路化的图中,服务节点102将每个记录(例如,数据流的每个记录)作为单个事务(transaction)来对待。基于单个输入记录中的域(fields)来产生对应的请求。一些域可定义请求的属性(例如,URL),而其它域被作为嵌入数据来传递。
[0025]在一些实例中,如图1B中的处理150中所示,在可由服务节点102访问的存储器中跟踪请求114与响应120之间的关系。所述存储器可以是向量、表、文件或其它此类数据结构。当输入记录110被接收时,如步骤152,该记录110的副本存储至存储器151,如步骤154。然后,服务节点102产生请求114,如步骤156,将所述请求发送至服务,如步骤158,以及将所请求的ID写入存储器,如步骤160,并使其与所存储的记录110的副本相关联。响应120被接收时,如步骤162,其包括与其中一个待完成的请求相对应的ID。服务节点102将该ID与存储器中的ID进行匹配,如步骤164,并且检索(retrieve)对应的输出记录110的副本,如步骤166。所述记录根据响应120进行更新,如步骤168,并产生输出121。如果将服务节点102配置为依照输出变为可用的次序来产生所述输出(不必与输入的接收具有同样的次序),则将输出121提供给下一节点122,如步骤170。如果将服务节点102配置为依照与其输入次序相同的次序来产生结果,则在存储器中保留输出直到所有对应于在前记录的输出已写为输出121,此时才可将所述输出121写入,如步骤171。
[0026]在一些实例中,将基于图的计算作为网络服务来提供。我们将提供网络服务的图称为供应方图(provider graph)。如图2中所示,运行在客户方系统202上的处理200将请求204(用于请求使用供应方图206的计算)发送给应用服务器208,其中所述处理200可以是图的计算,但也可以是任意类型的应用。所述请求204以适用于基于web的或其它网络服务的格式(例如SOAP、HTTP或RPC请求)来发送。根据运行在应用服务器208上的web服务插件210的指令(对于SOAP或HTTP请求),在应用服务器208的服务接口( interface)中接收请求204。
[0027]所述web服务插件210是这样一种应用,其能够处理在web服务客户方和提供服务的图之间的请求和响应。所述插件210在应用服务器208上安装并执行。web服务插件可与多个web服务供应方图的集合进行通信。每个图都被包含在由插件访问的服务列表中。例如,插件使用客户方HTTP请求消息中的URL,以将请求指向具体的图。
[0028]插件210将服务请求格式化成适用于图的处理的请求212 (例如,RPC请求),并且将此请求212转发至宿驻有图206的图服务器214。在一些实例中,使RPC调用能够从客户方200直达供应方图206。在图服务器214处,将包含在请求212中的输入216提供给图206,并对图206进行处理以产生输出218。图服务器214将输出218按照图的输出220(例如RPC响应)的适宜格式发送至应用服务器208及其web服务插件210。插件210将图的输出220重新格式化成具有与原始请求204互补的(compIementary)格式的web服务响应222。所述输出被返回给客户方或返回给调用了该服务的其它实体,其中所述实体以适用于网络服务的常规方式调用该服务。然后,客户方系统202上的处理将所述响应当作任意其它基于web的响应或网络服务响应来处理。
[0029]所述图可以使用管路的并行性、组元的并行性以及数据的并行性中的任一或全部来处理输入。也即是说,可以接收多组输入,可以在被管路化的阶段中交织(interleave)多组输入,或者,也许在进行划分(partitioning)之后,可以由不同组元的集合来并行处理多组输入。
[0030]在一些实例中,通过WSDL (web服务描述语言)文件来定义连接到供应方图的公共或外部接口。WSDL文件包含对需要与供应方图交互动作的所有消息和运行所进行的基于XML的描述。WSDL文件可由组织、产业或任意其它实体来定义,以用于访问与所述实体相关的web服务。还可将WSDL文件客制化(customized)以用于执行特定操作(implementation)。在一些实例中,WSDL文件根据与供应方图相关的子图中的组元的记录格式和类型定义来产生。在一些实例中,单个供应方图包括执行各自服务的多个子图。从此类子图产生的WSDL文件允许客户方访问由供应方图的子图所提供的每一个服务。
[0031 ] 在供应方图中,将输进来的服务请求输入转换成提供服务的子图的内部语言。例如,如图3中所示,输进来的请求306 (例如,SOAP请求)包括数据有效载荷308 (payload),其中所述有效载荷308通过由消息指定的动作(actions)来请求处理。例如,有效载荷308可以是在动作处理器300a和300b中将要由图处理的记录(该记录以DML描述)。无论输进来的消息为何种格式,接口层301都将它们进行解析(parse),并且将合适的消息以任何由它们所请求的格式提供给图的节点。在输出端,接口层301以相反方式工作。
[0032]—旦所述消息306得以转换,动作划分(partition)类型节点302解释在消息306中指定的动作,并且将数据有效载荷中的记录308发送至合适的动作处理器300a或300b。在一些实例中,直到汇集(gather)节点304通知划分节点302在前记录308的工作已经从动作处理器300a或300b输出之后,划分节点302才接收随后输进来的消息307。
[0033]在一些实例中,为了实现对诸如服务请求等消息的并行处理,划分节点302被配置为将对应于服务请求的动作记录进行划分。如果多个请求不是请求相同的动作处理器,则上述方式就能够同时处理多个请求。例如,如果第一记录308请求动作处理器300a,并且第二记录310请求动作处理器300b,则划分节点302将第二记录310发送至动作处理器300b,而不需要等待汇集节点304报告所述第一记录308已经完成其处理。
[0034]汇集节点304从动作处理器300a和300b接收经处理的记录308和记录310,并且将它们打包到响应消息312和响应消息313中,其中所述响应消息312和响应消息313包含经处理的记录308’和记录310’以作为数据有效载荷。如果划分节点302正在划分的是事务(transactions),这样就可一次处理多个记录,那么汇集节点304在接收经处理的记录308’和记录310’时,就能够依照与接收请求消息306和请求消息307不同的次序来进行。划分节点302和汇集节点304之间的接口 315允许汇集节点将输出记录308’和310’与对应的输入308和输入310相关联,从而将回复消息312和313发回至正确的客户方。
[0035]动作处理器300a和300b可采用任意形式。如上所述,记录308和记录310可具有任意格式,例如以DML描述的格式。在这种情况中,接口层301将输进来的语言(例如SOAP)转换成动作处理器所使用的DML格式。在一些实例中,可使用中间语言来表达在接口层301与划分节点302和汇集节点304之间的输入。
[0036]在一些实例中,当汇集节点304被配置为依照记录308’和记录310’的到达次序来接收它们时,可以在动作处理器内进一步划分动作的处理,如图3b中针对动作处理器300b所示。动作类型划分节点302接收请求消息306和307,并且将它们的记录308和记录310发送(route)给合适的动作处理器300a或300b。在动作处理器300b中,通过另一划分节点352接收记录,该划分节点352在共享(pool)中对所述记录进行划分。多个共享归属于子图350的多个实例350a、350b和350c,其中子图350实现动作处理器300b的处理。每个实例可以与其它实例一起并行处理不同的记录。通过将不同的记录308和320划分给不同的实例,动作处理器300b可并行处理多个记录,允许划分节点302在在前记录308处理完成之前将下一记录320发送至动作处理器。汇集节点354与划分节点352配对,使得节点能够跟踪实例350a、350b和350c中有哪些是正在使用中的,并且在可能时使用空闲实例,以便提高并行性(concurrency)和性能。汇集节点304也会接收动作处理器300a和300b的输出308’和310’,并且通过接口层301将合适的输出消息312和313返回给客户方。
[0037]输出记录308’和310’以及输出消息312和313可以依照与输入请求306和307被接收的次序不同的次序来返回。例如,如果输入记录310包含的工作元素(如下所述)少于记录308,那么即使输出响应313对应于随后接收的请求307,也可以首先返回输出响应313。如果动作处理器300a和300b按照下述方式运作,即根据记录的复杂度或其它因素,可以不依照次序或以不同的速率来对记录进行处理,那么,输出次序还可以基于输入数据的复杂度而改变。
[0038]在一些实例中,如图4中所示,单个服务请求的记录406包括作为数据流而由供应方图进行处理的数据,即所述数据作为多个工作元素408a-408e,其中所述工作元素408a-408e挨个经过图。动作处理器300a (如果记录不须进一步划分)或子图350 (如果记录须进一步划分)包括拆解(unwrap)节点402,其中所述拆解节点402将输入记录406分解(decompose)成其各个工作元素408a_408e,并将各工作元素适当地发送至提供服务的子图400之中。对应的打包(wrap)节点404将输出工作元素408a’-408e’的流重新组合成单个响应412,以返回给发送请求406的客户方。
[0039]在一些实例中,如图5a中所示,一旦各动作被划分且被拆解成工作元素时,各工作元素也被并行处理。像针对图3a中的记录那样,划分节点502根据工作元素的类型来划分工作元素408a-408e,其中所述工作元素的类型即,对每一个工作元素进行处理时,其请求的是工作元素处理器500a或500b中的哪一个。如果处理工作元素的次序很重要,那么,待汇集节点504通知其接收到了每个输出工作元素408’之后,划分节点502 —次只将一个工作元素408发送至处理器500a和500b(很可能每个工作元素被划分为使用两个处理器)。在一些实例中,如果处理的次序并不重要,假设各工作元素需要不同的处理器时,划分节点则将一个工作元素发送至每个处理器500a和500b。
[0040]当工作元素408a’ _408e’离开处理器500a和500b时,通过汇集节点504将它们进行积聚(accumulated)。只要来自一个记录406的所有工作元素已被收集,就将它们合并回(combined back into)输出记录412。在划分节点502与汇集节点504之间的通信515允许划分节点502跟踪可将哪些工作元素处理器用于附加的工作元素。
[0041]用于处理多重并行数据流的技术也在2003年6月24日公开的美国专利6,584,581和2003年11月25日公开的美国专利6,654,907中得到描述,在此通过参考将其内容引入本申请中。
[0042]图5b详细示出了工作元素处理器500b如何运行,以及图5a的子图如何与图3a、图3b和图4的某些更高级别的节点相联系,以形成供应方图501。在一些实例中,如图5b中所示,工作元素处理器500b以子图550的多个实例550a、550b和550c来对将要运行的工作元素进一步划分。实例550a从处理的可用实例的共享中选出,其中所述处理与子图550内各图的节点相关联。最初,由划分节点552接收工作元素408i。所述节点552已访问了子图550的多个实例550a、550b和550c。通过汇集节点554接收各实例的输出。对于会放缓由这些节点进行的工作处置的外部处理(例如服务或其它子图),子图550可以轮流调用这些外部处理。
[0043]在前述系统中,与节点552类似的划分组元可能已经将单个工作元素514划分成分散的组元,并将一个组元发送至实例550i (其中i为a、b或c)中的每一个。为消除可能的并行情形,在将多个输出合并成针对所述工作元素的单个输出之前,汇集节点554会一直等待,直到每个实例都返回了一个输出为止。为了维持管路化,划分节点可能已经在工作元素后面经由每个实例而发送分隔符(delimiter),使得当从每个实例接收到所述分隔符时,汇集组元就可以知道工作元素已被完成。在一些实例中,在管路化的给定阶段中,在由给定节点处理多个工作元素的集合之后会发送分隔符。
[0044]作为对照,共享划分节点552将整个工作元素408a发送至单个实例550a以进行处理。汇集节点554被配置为等待(expect)与仅来自一个实例550a的工作元素相关的输出408a’。当接收到所等待的输出408a’(在一些实例中,其后伴随有一个分隔符)时,汇集节点544将输出提供至下一节点504。汇集节点544不用等待来自其它实例550b和550c的工作元素组元或分隔符。这就允许工作元素处理器500b仅使用给定工作元素真正需要的实例550i。与图3b中对事务记录(transactional records)的共享划分一样,对工作元素的共享划分也允许并行处理多个工作元素。与等待第一工作元素408a完成处理并从其实例550a显现出来的方式不同,划分节点552接收来自上游(upstream)节点502的另一个工作元素输入408c,且将其发送至下一个可用实例500b。以此方式,可同时处理多个工作元素408a和408b,而不必对划分节点552进行多线程化(multithreaded)。在一些实例中,划分节点552经由通信链路560通知汇集节点554在每个实例中有哪些工作元素,使得汇集节点554知道等待的是什么,并能使输出元素408a’、408c’与输入工作元素408a、408c相关联。
[0045]在共享之间划分工作元素也允许输出408a’、408b’和408c’能够不依照与输入408a、408b和408c相关的顺序(out of order)返回。例如,如果工作元素408a中的数据造成实例550a处理所述工作元素的时间长于实例550b处理工作元素408c的时间,那么汇集节点554将在其接收输出408a’之前接收输出408c’。由于两个工作元素408a和408c彼此相互独立,因此汇集节点554能够将输出408c’发送至下一节点504而不必等待输出408a’。这里假定将其它阶段(例如,划分/汇集对502/504和打包/拆解对402/404)配置为在工作元素处理器500b内调节(accommodate)工作元素顺序的改变。在一些实例中,可能会需要或想要保持所述顺序,那么汇集节点554将保留输出408c’直到接收到输出408a’,并且将它们按顺序释放给下一节点504。在这种计算中,还有一个优势就是实例550a、550b和550c能够同时处理多个工作元素。例如,如果子图550的处理时间长于其它节点或子图的处理时间,那么这种计算将很有用。
[0046]对事务处理的动作类型划分和共享划分以及对工作元素的类型划分和共享划分都允许所述图按照内在的并行性运行,即由不同的处理元素同时处理相关的或不相关的工作元素。
[0047]共享划分、类型划分、和对请求及其工作元素进行并行处理的其它方法都可以在供应方图中实现,使得由图提供的服务其自身能够处理并行输入。例如,在附图5b中的图501就是作为供应方图来运行的,此时第一节点570为预订节点(subscribe node),且最终节点572为与预订节点570配对的发布节点(publish node)。预订节点570接收包括输入406的请求574,并将所述输入406发送至划分节点402。预订节点570与发布节点572配合,以使输出412与输入406匹配,并将它们封包(package)成合适的响应576 (B卩,确保每个响应到达发出调用的客户方)。因为图501处理的是并行记录和并行工作元素,所以预订节点570可以连续接收输入请求574,而无需等待发布节点572接收到输出412。使用对请求进行动作类型划分的子图,就允许单个供应方图501提供多个服务。
[0048]在一些实例中,预订节点570和发布节点572假设单个请求574是独立的,且请求576的返回顺序是无关紧要的,因此将图501中的划分节点402和汇集节点404配置为不按顺序执行。如果顺序很重要,那么预订节点570和发布节点572的任何一个或两者都可以确保响应576的返回顺序与对应的输出574的接收顺序相同。
[0049]其它实施方式也落在所附权利要求和授权给 申请人:的其它权利要求的范围内。
【权利要求】
1.一种在基于图的计算中分配服务的系统,通过以下装置,根据与服务相关联的计算图来处理服务请求,所述计算图包括由以下链路连接的节点,所述链路表示在所述节点之间经过的记录的数据流,其中所述系统包括: 用于接收来自服务客户方的用于所述计算图的输入的装置, 用于将所述输入作为数据流的记录提供给所述计算图的装置,其中所述数据流的记录包括多个工作元素, 用于基于对给定组中工作元素执行的动作类型将所述多个工作元素划分成多个组的装置, 用于将每个组分配给所述计算图的不同子图的装置, 用于将所述多个组中的一个或多个的每一个划分成所述多个工作元素的多个子组的装置, 用于将给定组的每个子组分配给为所述给定组分配的所述子图的不同实例的装置, 用于接收来自所述计算图的所述子图的输出的装置,以及 用于将所述输出提供给所述服务客户方的装置, 其中,所述接收所述输入的装置包括识别来自所述服务客户方的在服务请求中的所述输入的装置,以及 将所述输入提供给所述计算图的装置包括: 使请求识别符与所述服务请求相关联的装置, 将包括所述输入的工作元素提供给所述计算图的装置, 使所述请求识别符与所述工作元素相关联的装置,以及 将所述请求识别符与所述工作元素的关联传送至输出节点的装置。
2.如权利要求1所述的系统,其中所述识别所述输入的装置包括从被封装的请求提取所述输入的装置。
3.如权利要求2所述的系统,其中所述被封装的请求包括SOAP请求。
4.如权利要求1所述的系统,其中 所述接收所述输出的装置包括: 接收来自所述计算图的包括输出的工作元素的装置,以及 识别与所述工作元素相关联的请求识别符的装置,以及 将所述输出提供给所述服务客户方的装置包括: 产生对应于由所述请求识别符所识别的所述服务请求的服务响应的装置,其中所述服务响应包括包含在所述工作元素中的所述输出。
5.如权利要求4所述的系统,其中产生所述服务响应包括:将所述输出嵌入被封装的响应中。
6.如权利要求5所述的系统,其中所述被封装的响应包括SOAP响应。
7.如权利要求1所述的系统,还包括: 接收来自第二服务客户方的用于所述计算图的第二输入的装置, 将所述第二输入作为第二数据流的记录提供给所述计算图的装置,其中所述第二数据流的记录包括多个工作元素, 接收来自所述计算图的所述子图的第二输出的装置,以及将所述第二输出提供给所述第二服务客户方的装置;以及 在所述计算图中并行处理所述第一输入和所述第二输入的装置。
8.如权利要求7所述的系统,其中所述并行处理所述第一输入和所述第二输入的装置包括: 识别适用于所述第一输入的第一子图的装置, 在所述第一子图中处理所述第一输入的装置, 识别适用于所述第二输入的第二子图的装置, 在所述第二子图中处理所述第二输入的装置, 接收来自所述第一子图的第一输出的装置,以及 接收来自所述第二子图的第二输出的装置, 其中同时执行所述第一子图和所述第二子图。
9.如权利要求7所述的系统,其中所述并行处理所述第一输入和所述第二输入的装置包括: 将子图的第一实例识别为可用的装置, 在所述子图的第一实例中处理所述第一输入的装置, 将所述子图的第二实例识别为可用的装置, 在所述子图的第二实例中处理所述第二输入的装置, 接收来自所述第一实例的第一输出的装置,以及 接收来自所述第二实例的第二输出`的装置, 其中同时执行所述子图的第一实例和所述子图的第二实例。
10.一种用于根据与服务相关联的计算图来处理服务请求的系统,所述计算图包括由表示在节点之间经过的记录的数据流的链路所连接的节点,所述系统包括: 计算机系统,被配置为通过下述步骤根据与所述服务相关联的计算图来处理服务请求,所述计算图包括由表示在节点之间经过的记录的数据流的链路所连接的节点: 接收来自服务客户方的用于所述计算图的输入, 将所述输入作为数据流的记录提供给所述计算图,其中所述数据流的记录包括多个工作元素, 基于对给定组中工作元素执行的动作类型,将所述多个工作元素划分成多个组, 将每个组分配给所述计算图的不同子图, 将所述多个组中的一个或多个的每一个划分成所述多个工作元素的多个子组, 将给定组的每个子组分配给为所述给定组分配的所述子图的不同实例, 接收来自所述计算图的所述子图的输出,以及 将所述输出提供给所述服务客户方。
11.如权利要求10所述的系统,其中 所述计算机系统被配置为接收所述输入,包括所述计算机系统被配置为识别来自所述服务客户方的在服务请求中的所述输入,以及 所述计算机系统被配置为将所述输入提供给所述计算图,包括所述计算机系统被配置为: 使请求识别符与所述服务请求相关联,将包括所述输入的工作元素提供给所述计算图, 使所述请求识别符与所述工作元素相关联,以及 将所述请求识别符与所述工作元素的关联传送至输出节点。
12.如权利要求11所述的系统,其中所述计算机系统被配置为识别所述输入,包括所述计算机系统被配置为从被封装的请求提取所述输入。
13.如权利要求12所述的系统,其中所述被封装的请求包括SOAP请求。
14.如权利要求10所述的系统,其中 所述计算机系统被配置为接收所述输出,包括所述计算机系统被配置为: 接收来自所述计算图的包括输出的工作元素,以及 识别与所述工作元素相关联的请求识别符,以及 所述计算机系统被配置为将所述输出提供给所述服务客户方,包括所述计算机系统被配置为: 产生对应于由所述请求识别符所识别的所述服务请求的服务响应,所述服务响应包括包含在所述工作元素中的所述输出。
15.如权利要求14所述的系统,其中所述计算机系统被配置为产生所述服务响应,包括所述计算机系统被配置为将所述输出嵌入被封装的响应中。
16.如权利要求15所述的系统,其中所述被封装的响应包括SOAP响应。
17.如权利要求10所述的系统,还包括所述计算机系统被配置为: 根据所述计算图来处理第二服务请求,其中所述步骤包括: 接收来自第二服务客户方的用于所述计算图的第二输入, 将所述第二输入作为第二数据流的记录提供给所述计算图,其中所述第二数据流的记录包括多个工作元素, 接收来自所述计算图的所述子图的第二输出,以及 将所述第二输出提供给所述第二服务客户方;以及 在所述计算图中,并行处理所述第一输入和所述第二输入。
18.如权利要求17所述的系统,其中,所述计算机系统被配置为并行处理所述第一输入和所述第二输入,包括所述计算机系统被配置为: 识别适用于所述第一输入的第一子图, 在所述第一子图中处理所述第一输入, 识别适用于所述第二输入的第二子图, 在所述第二子图中处理所述第二输入, 接收来自所述第一子图的第一输出,以及 接收来自所述第二子图的第二输出, 其中同时执行所述第一子图和所述第二子图。
19.如权利要求17所述的系统,其中,所述计算机系统被配置为并行处理所述第一输入和所述第二输入,包括所述计算机系统被配置为: 将子图的第一实例识别为可用, 在所述子图的第一实例中处理所述第一输入, 将所述子图的第二实例识别为可用,在所述子图的第二实例中处理所述第二输入, 接收来自所述第一实例的第一输出,以及 接收来自所述第二实例的第二输出, 其中同时执行所述子图的第一实例和所述子图的第二实例。
20.如权利要求10所述的系统,其中,所述计算图包括第一图、所述第一图的第一子图和所述第一图的第二子图,并且所述计算机系统被配置为将所述输入作为数据流的多个工作元素提供给所述计算图的步骤,包括所述计算机被配置为: 识别适用于所述数据流中的第一记录的第一图, 识别适用于所述第一记录中的第一工作元素的第一子图, 在所述第一子图中处理所述第一工作元素, 识别适用于所述第一 记录中的第二工作元素的第二子图, 在所述第二子图中处理所述第二工作元素, 接收来自所述第一子图的第一输出工作元素, 接收来自所述第二子图的第二输出工作元素, 使所述第一输出工作元素与所述第一记录相关联,以及 使所述第二输出工作元素与所述第一记录相关联, 其中至少部分地同时执行所述第一子图和所述第二子图。
21.如权利要求10所述的系统,其中,所述计算图包括第一图、所述第一图的一个子图的第一实例和所述第一图的所述子图的第二实例,并且所述计算机系统被配置为将所述输入作为数据流的多个工作元素提供给所述计算图的步骤,包括所述计算机系统被配置为: 识别适用于所述数据流中的第一记录的第一图, 将子图的第一实例识别为可用, 在所述子图的第一实例中处理所述第一记录中的所述第一工作元素, 将所述子图的第二实例识别为可用, 在所述子图的第二实例中处理所述第一记录中的所述第二工作元素, 接收来自所述第一实例的第一输出工作元素, 接收来自所述第二实例的第二输出工作元素, 使所述第一输出工作元素与所述第一记录相关联,以及 使所述第二输出工作元素与所述第一记录相关联, 其中至少部分地同时执行所述子图的所述第一实例和所述子图的所述第二实例。
【文档编号】G06F15/16GK103729330SQ201310403428
【公开日】2014年4月16日 申请日期:2007年8月9日 优先权日:2006年8月10日
【发明者】伊戈尔·舍尔布, 约瑟夫·斯凯芬顿·沃莱三世, 拉里·W·艾伦 申请人:起元科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1