在基于圖的計算中分配服務(wù)的制作方法
【專利摘要】通過以下步驟,根據(jù)與服務(wù)相關(guān)聯(lián)的計算圖來處理服務(wù)請求,所述步驟包括:接收來自服務(wù)客戶方的用于所述計算圖的輸入,將所述輸入作為數(shù)據(jù)流的記錄提供給所述計算圖,接收來自所述計算圖的輸出,以及將所述輸出提供給所述服務(wù)客戶方。以如下方式在基于圖的計算中并行處理數(shù)據(jù)流:即,其具有這樣的潛在能力(potentially),可并行執(zhí)行不同類型的請求,可并行執(zhí)行類似的請求類型,和/或可并行執(zhí)行在請求內(nèi)的工作元素。
【專利說明】在基于圖的計算中分配服務(wù)
[0001]本申請是申請?zhí)枮?00780029791.9、申請日為2007年8月9日、發(fā)明名稱為“在基于圖的計算中分配服務(wù)”的發(fā)明專利申請的分案申請。
[0002]優(yōu)先權(quán)
[0003]本申請要求申請?zhí)枮?0/836,745,申請日為2006年8月10日的美國臨時專利申請的優(yōu)先權(quán),通過參考將其全部內(nèi)容引入本申請中。
【技術(shù)領(lǐng)域】
[0004]本發(fā)明涉及在基于圖的計算中分配服務(wù)(distributing services)。
【背景技術(shù)】
[0005]通常,復雜的商業(yè)系統(tǒng)以多級方式處理數(shù)據(jù),將某一級所產(chǎn)生的數(shù)據(jù)饋送至下一級中??赏ㄟ^有向(directed)數(shù)據(jù)流圖來描述流經(jīng)上述系統(tǒng)的全部信息流,所述圖中的頂點表示組元(components)(所述組元可以是數(shù)據(jù)文件或是處理),并且所述圖中的鏈路或“邊”表示組元之間的數(shù)據(jù)流。
[0006]圖還可用于直接調(diào)用(invoke)計算。來自公司Ab Initio SoftwareCorporation, Lexington, MA 的帶有圖形開發(fā)環(huán)境(GDE)的 “CO > OPERATING SYSTEM?”具體展示(embody) 了這種系統(tǒng)。根據(jù)這種系統(tǒng)所制作的圖提供了用于獲得進出各個處理(所述各個處理由圖的組元表示)的信息的方法,提供了用于在所述處理之間移動信息的方法,還提供了用于為所述處理限定運行順序(running order)的方法。這種系統(tǒng)包括用于選擇處理之間(interprocess)的通信方法的算法和用于調(diào)度(schedule)處理執(zhí)行的算法,并且還提供對所述圖的執(zhí)行的監(jiān)視。
[0007]經(jīng)分配后的服務(wù)機制(architecture)允許計算機程序通過諸如萬維網(wǎng)等的網(wǎng)絡(luò)接口來訪問而獲得其它程序的功能,而不必將這些其它程序的功能特性(functionality)引入它們自己的運行碼(operating code)中。
【發(fā)明內(nèi)容】
[0008]總體而言,一方面,通過執(zhí)行下述步驟,根據(jù)與服務(wù)相關(guān)聯(lián)的計算圖來處理服務(wù)請求,其中所述步驟包括:接收來自服務(wù)客戶方的用于所述計算圖的輸入,將所述輸入作為數(shù)據(jù)流的記錄提供給所述計算圖,接收來自所述計算圖的輸出,以及將所述輸出提供給所述服務(wù)客戶方。
[0009]所述執(zhí)行可包括一個或多個下述特征。
[0010]接收所述輸入的步驟包括:識別來自所述服務(wù)客戶方且在服務(wù)請求中的所述輸入,以及將所述輸入提供給所述計算圖的步驟包括:使請求識別符與所述服務(wù)請求相關(guān)聯(lián),將包括所述輸入的工作元素提供給所述計算圖,使所述請求識別符與所述工作元素相關(guān)聯(lián),以及將所述請求識別符與所述工作元素的關(guān)聯(lián)(association)傳送至輸出節(jié)點。識別所述輸入的步驟包括從被封裝的(encapsulated)請求提取所述輸入。所述被封裝的請求包括SOAP請求。接收所述輸出的步驟包括:接收包括來自所述計算圖的輸出的工作元素,以及識別與所述工作元素相關(guān)聯(lián)的請求識別符,以及將所述輸出提供給所述服務(wù)客戶方的步驟包括:產(chǎn)生對應(yīng)由所述請求識別符所識別的所述服務(wù)請求的服務(wù)響應(yīng),所述服務(wù)響應(yīng)包括包含在所述工作元素中的所述輸出。產(chǎn)生所述服務(wù)響應(yīng)的步驟包括:將所述輸出嵌入被封裝的響應(yīng)中。所述被封裝的響應(yīng)包括SOAP響應(yīng)。
[0011]通過下述步驟,根據(jù)所述計算圖來處理第二服務(wù)請求,其中所述步驟包括:接收來自第二服務(wù)客戶方的用于所述計算圖的第二輸入,將所述第二輸入作為第二數(shù)據(jù)流的記錄提供給所述計算圖,接收來自所述計算圖的第二輸出,以及將所述第二輸出提供給所述第二服務(wù)客戶方;以及在所述計算圖中,并行處理所述第一輸入和所述第二輸入。并行處理所述第一輸入和所述第二輸入的步驟包括:識別適用于所述第一輸入的第一子圖,在所述第一子圖中處理所述第一輸入,識別適用于所述第二輸入的第二子圖,在所述第二子圖中處理所述第二輸入,接收來自所述第一子圖的第一輸出,以及接收來自所述第二子圖的第二輸出,其中同時執(zhí)行所述第一子圖和所述第二子圖。并行處理所述第一輸入和所述第二輸入的步驟包括:將子圖的第一實例識別為可用,在所述子圖的第一實例中處理所述第一輸入,將所述子圖的第二實例識別為可用,在所述子圖的第二實例中處理所述第二輸入,接收來自所述第一實例的第一輸出,以及接收來自所述第二實例的第二輸出,其中同時執(zhí)行所述子圖的第一實例和所述子圖的第二實例。
[0012]總體而言,一方面,通過執(zhí)行下述步驟,在基于圖的計算中處理數(shù)據(jù)流,其中所述步驟包括:識別適用于所述數(shù)據(jù)流中的第一記錄的第一圖,識別適用于所述第一記錄中的第一工作元素的第一子圖,在所述第一子圖中處理所述第一工作元素,識別適用于所述第一記錄中的第二工作元素的第二子圖,在所述第二子圖中處理所述第二工作元素,接收來自所述第一子圖的第一輸出工作元素,接收來自所述第二子圖的第二輸出工作元素,使所述第一輸出工作元素與所述第一記錄相關(guān)聯(lián),以及使所述第二輸出工作元素與所述第一記錄相關(guān)聯(lián),其中至少部分地同時執(zhí)行所述第一子圖和所述第二子圖。
[0013]總體而言,一方面,通過執(zhí)行下述步驟,在基于圖的計算中處理數(shù)據(jù)流,其中所述步驟包括:識別適用于所述數(shù)據(jù)流中的第一記錄的第一圖,將子圖的第一實例識別為可用,在所述子圖的第一實例中處理所述第一記錄中的第一工作元素,將所述子圖的第二實例識別為可用,在所述子圖的第二實例中處理所述第一記錄中的第二工作元素,接收來自所述第一實例的第一輸出工作元素,接收來自所述第二實例的第二輸出工作元素,使所述第一輸出工作元素與所述第一記錄相關(guān)聯(lián),以及使所述第二輸出工作元素與所述第一記錄相關(guān)聯(lián),其中至少部分地同時執(zhí)行所述子圖的所述第一實例和所述子圖的所述第二實例。
[0014]由說明書及權(quán)利要求而使得本發(fā)明的其它特征和優(yōu)點變得明顯。
【專利附圖】
【附圖說明】
[0015]圖1A和圖2示出了用于分配服務(wù)的系統(tǒng)的示意圖。
[0016]圖1B示出了用于調(diào)用服務(wù)的處理的流程圖。
[0017]圖3_5b示出了用于提供分配服務(wù)的圖。
【具體實施方式】[0018]在一些實例中,有兩種方式來使基于圖的計算與分配服務(wù)進行互動。在一些實例中,圖用以調(diào)用服務(wù)且與所述服務(wù)相關(guān)聯(lián)(relates to),使得所述服務(wù)似乎被當作圖中的節(jié)點。在其它實例中,將應(yīng)用(application)與圖相關(guān)聯(lián),使得所述圖提供服務(wù)。這兩種情況可同時實現(xiàn)。例如,正給某個應(yīng)用提供服務(wù)的圖其自身可調(diào)用其它服務(wù)以執(zhí)行其部分計算。例如,由某個圖所調(diào)用的服務(wù)可由其它圖來提供,使得第一圖調(diào)用第二圖,而不是將其包含作為子圖。
[0019]在一些實例中,如圖1A中所示,基于圖的計算100的服務(wù)節(jié)點102通過調(diào)用在分配服務(wù)導向機制(distributed service-oriented architecture)中的服務(wù)來運行。也就是說,當執(zhí)行服務(wù)節(jié)點102時,調(diào)用圖100外部的服務(wù)108,作為所述服務(wù)的客戶方。例如,服務(wù)節(jié)點102可使用S0AP、HTTP、XML以及WSDL等中的一種或多種的組合,與宿駐(hosted)在應(yīng)用服務(wù)器106上的web服務(wù)插件104進行通信,以到達外部服務(wù)108,從而可使服務(wù)節(jié)點102訪問web服務(wù)。如下所述,外部服務(wù)108自身可以是基于圖的計算。可以某種分配方式來執(zhí)行所述服務(wù),其中所述分配方式使用各種用于分配計算任務(wù)的方法中的任意一種。
[0020]服務(wù)節(jié)點102以基于圖的計算100的本地格式(native format)來接收來自其它圖的節(jié)點(例如,節(jié)點112)的輸入110,例如是以與Ab Initio的DML類似的數(shù)據(jù)描述語言來描述的記錄。然后,節(jié)點102將其輸入110格式化成適用于其使用的web服務(wù)類型的格式(例如SOAP或其它類型的基于被封裝的請求),并將服務(wù)請求114傳送給應(yīng)用服務(wù)器106。請求114中的URL指示出將所述請求發(fā)送給應(yīng)用服務(wù)器106、插件104以及服務(wù)108中的哪一個。請求114能以各種方式發(fā)送,包括通過HTTP和RPC (遠程過程調(diào)用)來發(fā)送。在服務(wù)器106上的插件104把輸進來的請求114重新格式化成合適的格式,且將合適的調(diào)用116傳送給外部服務(wù)108。
[0021]當服務(wù)108執(zhí)行了其所調(diào)用的任意運行之后,所述服務(wù)108將輸出118返回給插件104。插件104將服務(wù)108的輸出118重新格式化成合適的服務(wù)響應(yīng)120,以返回至服務(wù)節(jié)點102。服務(wù)節(jié)點102將服務(wù)響應(yīng)120再重新格式化成合適的輸出格式,并將輸出121傳遞至下游的圖的節(jié)點(例如,節(jié)點122)。從其它的圖的節(jié)點112、122、124及126來看,經(jīng)分配后的服務(wù)節(jié)點102可以和其它任何節(jié)點一樣參與(participate in)圖的計算100。只要服務(wù)節(jié)點102接收的是其預(yù)期的響應(yīng)120類型,則服務(wù)器106的機制和安排(諸如插件104的性質(zhì)以及其如何與服務(wù)108通信(或者,例如,是否使用插件104)之類)就與圖節(jié)點無關(guān)。如下所述,服務(wù)器106、插件104以及服務(wù)108自身可以分別是基于圖的計算服務(wù)器、插件以及圖。
[0022]在一些實例中,圖100被管路化(pipelined),這意味著,每個節(jié)點是以管路化的順序階段(sequential phases)方式對大流量輸入記錄的單個記錄或記錄的集合進行處理。在給定階段中,各后繼(subsequent)節(jié)點在其所接收的來自在前(previous)節(jié)點的記錄或記錄的集合上工作,而各在前節(jié)點對輸入流中的下一記錄或記錄的集合進行處理工作。服務(wù)節(jié)點102可通過以下方式來調(diào)整上述運行:即,在對應(yīng)于在前服務(wù)請求的響應(yīng)被接收到之前,服務(wù)節(jié)點102接收附加記錄,并且將各所述附加記錄所請求的工作分配給服務(wù)108。例如,如果服務(wù)108能夠處理多重并行請求(multiple concurrent request),那么上述方式就能夠在此實現(xiàn)。記錄可由分散的(separate)或可分散的(separable)工作元素組成,可以用如針對記錄所述的這種管路化階段(pipelined stages)方式來處理所述工作元素。
[0023]如果對不同的請求114花費不同的時間量來處理,那么,與接收其輸入110的次序相比較,服務(wù)節(jié)點102可以依照不同的次序(order)來接收響應(yīng)。這就允許由單個節(jié)點102訪問具有不同處理時間的多重服務(wù)??梢赃x擇性地配置諸如服務(wù)節(jié)點102之類的服務(wù)節(jié)點,使服務(wù)節(jié)點依照與接收其輸入110的次序不同的次序提供其輸出121。為了允許這種并行處理而不使用用于服務(wù)節(jié)點102的多線程處理(multiple threaded process),并且在各請求114中均不包括描述圖100的整個狀態(tài)的數(shù)據(jù)(這樣就能基于其返回而使用各請求114),服務(wù)節(jié)點102跟蹤(keeps track of )待完成的(outstanding)請求114并且將其與輸進來的響應(yīng)120進行匹配。在一些實例中,圖被管路化,以便一次一個節(jié)點地處理各個記錄或工作元素,并且分散的節(jié)點處理分散的記錄或工作元素,但是可在任意給定時間點將多個(multiple)記錄或工作元素分派給單個服務(wù)節(jié)點102。
[0024]在被管路化的圖中,服務(wù)節(jié)點102將每個記錄(例如,數(shù)據(jù)流的每個記錄)作為單個事務(wù)(transaction)來對待?;趩蝹€輸入記錄中的域(fields)來產(chǎn)生對應(yīng)的請求。一些域可定義請求的屬性(例如,URL),而其它域被作為嵌入數(shù)據(jù)來傳遞。
[0025]在一些實例中,如圖1B中的處理150中所示,在可由服務(wù)節(jié)點102訪問的存儲器中跟蹤請求114與響應(yīng)120之間的關(guān)系。所述存儲器可以是向量、表、文件或其它此類數(shù)據(jù)結(jié)構(gòu)。當輸入記錄110被接收時,如步驟152,該記錄110的副本存儲至存儲器151,如步驟154。然后,服務(wù)節(jié)點102產(chǎn)生請求114,如步驟156,將所述請求發(fā)送至服務(wù),如步驟158,以及將所請求的ID寫入存儲器,如步驟160,并使其與所存儲的記錄110的副本相關(guān)聯(lián)。響應(yīng)120被接收時,如步驟162,其包括與其中一個待完成的請求相對應(yīng)的ID。服務(wù)節(jié)點102將該ID與存儲器中的ID進行匹配,如步驟164,并且檢索(retrieve)對應(yīng)的輸出記錄110的副本,如步驟166。所述記錄根據(jù)響應(yīng)120進行更新,如步驟168,并產(chǎn)生輸出121。如果將服務(wù)節(jié)點102配置為依照輸出變?yōu)榭捎玫拇涡騺懋a(chǎn)生所述輸出(不必與輸入的接收具有同樣的次序),則將輸出121提供給下一節(jié)點122,如步驟170。如果將服務(wù)節(jié)點102配置為依照與其輸入次序相同的次序來產(chǎn)生結(jié)果,則在存儲器中保留輸出直到所有對應(yīng)于在前記錄的輸出已寫為輸出121,此時才可將所述輸出121寫入,如步驟171。
[0026]在一些實例中,將基于圖的計算作為網(wǎng)絡(luò)服務(wù)來提供。我們將提供網(wǎng)絡(luò)服務(wù)的圖稱為供應(yīng)方圖(provider graph)。如圖2中所示,運行在客戶方系統(tǒng)202上的處理200將請求204(用于請求使用供應(yīng)方圖206的計算)發(fā)送給應(yīng)用服務(wù)器208,其中所述處理200可以是圖的計算,但也可以是任意類型的應(yīng)用。所述請求204以適用于基于web的或其它網(wǎng)絡(luò)服務(wù)的格式(例如SOAP、HTTP或RPC請求)來發(fā)送。根據(jù)運行在應(yīng)用服務(wù)器208上的web服務(wù)插件210的指令(對于SOAP或HTTP請求),在應(yīng)用服務(wù)器208的服務(wù)接口( interface)中接收請求204。
[0027]所述web服務(wù)插件210是這樣一種應(yīng)用,其能夠處理在web服務(wù)客戶方和提供服務(wù)的圖之間的請求和響應(yīng)。所述插件210在應(yīng)用服務(wù)器208上安裝并執(zhí)行。web服務(wù)插件可與多個web服務(wù)供應(yīng)方圖的集合進行通信。每個圖都被包含在由插件訪問的服務(wù)列表中。例如,插件使用客戶方HTTP請求消息中的URL,以將請求指向具體的圖。
[0028]插件210將服務(wù)請求格式化成適用于圖的處理的請求212 (例如,RPC請求),并且將此請求212轉(zhuǎn)發(fā)至宿駐有圖206的圖服務(wù)器214。在一些實例中,使RPC調(diào)用能夠從客戶方200直達供應(yīng)方圖206。在圖服務(wù)器214處,將包含在請求212中的輸入216提供給圖206,并對圖206進行處理以產(chǎn)生輸出218。圖服務(wù)器214將輸出218按照圖的輸出220(例如RPC響應(yīng))的適宜格式發(fā)送至應(yīng)用服務(wù)器208及其web服務(wù)插件210。插件210將圖的輸出220重新格式化成具有與原始請求204互補的(compIementary)格式的web服務(wù)響應(yīng)222。所述輸出被返回給客戶方或返回給調(diào)用了該服務(wù)的其它實體,其中所述實體以適用于網(wǎng)絡(luò)服務(wù)的常規(guī)方式調(diào)用該服務(wù)。然后,客戶方系統(tǒng)202上的處理將所述響應(yīng)當作任意其它基于web的響應(yīng)或網(wǎng)絡(luò)服務(wù)響應(yīng)來處理。
[0029]所述圖可以使用管路的并行性、組元的并行性以及數(shù)據(jù)的并行性中的任一或全部來處理輸入。也即是說,可以接收多組輸入,可以在被管路化的階段中交織(interleave)多組輸入,或者,也許在進行劃分(partitioning)之后,可以由不同組元的集合來并行處理多組輸入。
[0030]在一些實例中,通過WSDL (web服務(wù)描述語言)文件來定義連接到供應(yīng)方圖的公共或外部接口。WSDL文件包含對需要與供應(yīng)方圖交互動作的所有消息和運行所進行的基于XML的描述。WSDL文件可由組織、產(chǎn)業(yè)或任意其它實體來定義,以用于訪問與所述實體相關(guān)的web服務(wù)。還可將WSDL文件客制化(customized)以用于執(zhí)行特定操作(implementation)。在一些實例中,WSDL文件根據(jù)與供應(yīng)方圖相關(guān)的子圖中的組元的記錄格式和類型定義來產(chǎn)生。在一些實例中,單個供應(yīng)方圖包括執(zhí)行各自服務(wù)的多個子圖。從此類子圖產(chǎn)生的WSDL文件允許客戶方訪問由供應(yīng)方圖的子圖所提供的每一個服務(wù)。
[0031 ] 在供應(yīng)方圖中,將輸進來的服務(wù)請求輸入轉(zhuǎn)換成提供服務(wù)的子圖的內(nèi)部語言。例如,如圖3中所示,輸進來的請求306 (例如,SOAP請求)包括數(shù)據(jù)有效載荷308 (payload),其中所述有效載荷308通過由消息指定的動作(actions)來請求處理。例如,有效載荷308可以是在動作處理器300a和300b中將要由圖處理的記錄(該記錄以DML描述)。無論輸進來的消息為何種格式,接口層301都將它們進行解析(parse),并且將合適的消息以任何由它們所請求的格式提供給圖的節(jié)點。在輸出端,接口層301以相反方式工作。
[0032]—旦所述消息306得以轉(zhuǎn)換,動作劃分(partition)類型節(jié)點302解釋在消息306中指定的動作,并且將數(shù)據(jù)有效載荷中的記錄308發(fā)送至合適的動作處理器300a或300b。在一些實例中,直到匯集(gather)節(jié)點304通知劃分節(jié)點302在前記錄308的工作已經(jīng)從動作處理器300a或300b輸出之后,劃分節(jié)點302才接收隨后輸進來的消息307。
[0033]在一些實例中,為了實現(xiàn)對諸如服務(wù)請求等消息的并行處理,劃分節(jié)點302被配置為將對應(yīng)于服務(wù)請求的動作記錄進行劃分。如果多個請求不是請求相同的動作處理器,則上述方式就能夠同時處理多個請求。例如,如果第一記錄308請求動作處理器300a,并且第二記錄310請求動作處理器300b,則劃分節(jié)點302將第二記錄310發(fā)送至動作處理器300b,而不需要等待匯集節(jié)點304報告所述第一記錄308已經(jīng)完成其處理。
[0034]匯集節(jié)點304從動作處理器300a和300b接收經(jīng)處理的記錄308和記錄310,并且將它們打包到響應(yīng)消息312和響應(yīng)消息313中,其中所述響應(yīng)消息312和響應(yīng)消息313包含經(jīng)處理的記錄308’和記錄310’以作為數(shù)據(jù)有效載荷。如果劃分節(jié)點302正在劃分的是事務(wù)(transactions),這樣就可一次處理多個記錄,那么匯集節(jié)點304在接收經(jīng)處理的記錄308’和記錄310’時,就能夠依照與接收請求消息306和請求消息307不同的次序來進行。劃分節(jié)點302和匯集節(jié)點304之間的接口 315允許匯集節(jié)點將輸出記錄308’和310’與對應(yīng)的輸入308和輸入310相關(guān)聯(lián),從而將回復消息312和313發(fā)回至正確的客戶方。
[0035]動作處理器300a和300b可采用任意形式。如上所述,記錄308和記錄310可具有任意格式,例如以DML描述的格式。在這種情況中,接口層301將輸進來的語言(例如SOAP)轉(zhuǎn)換成動作處理器所使用的DML格式。在一些實例中,可使用中間語言來表達在接口層301與劃分節(jié)點302和匯集節(jié)點304之間的輸入。
[0036]在一些實例中,當匯集節(jié)點304被配置為依照記錄308’和記錄310’的到達次序來接收它們時,可以在動作處理器內(nèi)進一步劃分動作的處理,如圖3b中針對動作處理器300b所示。動作類型劃分節(jié)點302接收請求消息306和307,并且將它們的記錄308和記錄310發(fā)送(route)給合適的動作處理器300a或300b。在動作處理器300b中,通過另一劃分節(jié)點352接收記錄,該劃分節(jié)點352在共享(pool)中對所述記錄進行劃分。多個共享歸屬于子圖350的多個實例350a、350b和350c,其中子圖350實現(xiàn)動作處理器300b的處理。每個實例可以與其它實例一起并行處理不同的記錄。通過將不同的記錄308和320劃分給不同的實例,動作處理器300b可并行處理多個記錄,允許劃分節(jié)點302在在前記錄308處理完成之前將下一記錄320發(fā)送至動作處理器。匯集節(jié)點354與劃分節(jié)點352配對,使得節(jié)點能夠跟蹤實例350a、350b和350c中有哪些是正在使用中的,并且在可能時使用空閑實例,以便提高并行性(concurrency)和性能。匯集節(jié)點304也會接收動作處理器300a和300b的輸出308’和310’,并且通過接口層301將合適的輸出消息312和313返回給客戶方。
[0037]輸出記錄308’和310’以及輸出消息312和313可以依照與輸入請求306和307被接收的次序不同的次序來返回。例如,如果輸入記錄310包含的工作元素(如下所述)少于記錄308,那么即使輸出響應(yīng)313對應(yīng)于隨后接收的請求307,也可以首先返回輸出響應(yīng)313。如果動作處理器300a和300b按照下述方式運作,即根據(jù)記錄的復雜度或其它因素,可以不依照次序或以不同的速率來對記錄進行處理,那么,輸出次序還可以基于輸入數(shù)據(jù)的復雜度而改變。
[0038]在一些實例中,如圖4中所示,單個服務(wù)請求的記錄406包括作為數(shù)據(jù)流而由供應(yīng)方圖進行處理的數(shù)據(jù),即所述數(shù)據(jù)作為多個工作元素408a-408e,其中所述工作元素408a-408e挨個經(jīng)過圖。動作處理器300a (如果記錄不須進一步劃分)或子圖350 (如果記錄須進一步劃分)包括拆解(unwrap)節(jié)點402,其中所述拆解節(jié)點402將輸入記錄406分解(decompose)成其各個工作元素408a_408e,并將各工作元素適當?shù)匕l(fā)送至提供服務(wù)的子圖400之中。對應(yīng)的打包(wrap)節(jié)點404將輸出工作元素408a’-408e’的流重新組合成單個響應(yīng)412,以返回給發(fā)送請求406的客戶方。
[0039]在一些實例中,如圖5a中所示,一旦各動作被劃分且被拆解成工作元素時,各工作元素也被并行處理。像針對圖3a中的記錄那樣,劃分節(jié)點502根據(jù)工作元素的類型來劃分工作元素408a-408e,其中所述工作元素的類型即,對每一個工作元素進行處理時,其請求的是工作元素處理器500a或500b中的哪一個。如果處理工作元素的次序很重要,那么,待匯集節(jié)點504通知其接收到了每個輸出工作元素408’之后,劃分節(jié)點502 —次只將一個工作元素408發(fā)送至處理器500a和500b(很可能每個工作元素被劃分為使用兩個處理器)。在一些實例中,如果處理的次序并不重要,假設(shè)各工作元素需要不同的處理器時,劃分節(jié)點則將一個工作元素發(fā)送至每個處理器500a和500b。
[0040]當工作元素408a’ _408e’離開處理器500a和500b時,通過匯集節(jié)點504將它們進行積聚(accumulated)。只要來自一個記錄406的所有工作元素已被收集,就將它們合并回(combined back into)輸出記錄412。在劃分節(jié)點502與匯集節(jié)點504之間的通信515允許劃分節(jié)點502跟蹤可將哪些工作元素處理器用于附加的工作元素。
[0041]用于處理多重并行數(shù)據(jù)流的技術(shù)也在2003年6月24日公開的美國專利6,584,581和2003年11月25日公開的美國專利6,654,907中得到描述,在此通過參考將其內(nèi)容引入本申請中。
[0042]圖5b詳細示出了工作元素處理器500b如何運行,以及圖5a的子圖如何與圖3a、圖3b和圖4的某些更高級別的節(jié)點相聯(lián)系,以形成供應(yīng)方圖501。在一些實例中,如圖5b中所示,工作元素處理器500b以子圖550的多個實例550a、550b和550c來對將要運行的工作元素進一步劃分。實例550a從處理的可用實例的共享中選出,其中所述處理與子圖550內(nèi)各圖的節(jié)點相關(guān)聯(lián)。最初,由劃分節(jié)點552接收工作元素408i。所述節(jié)點552已訪問了子圖550的多個實例550a、550b和550c。通過匯集節(jié)點554接收各實例的輸出。對于會放緩由這些節(jié)點進行的工作處置的外部處理(例如服務(wù)或其它子圖),子圖550可以輪流調(diào)用這些外部處理。
[0043]在前述系統(tǒng)中,與節(jié)點552類似的劃分組元可能已經(jīng)將單個工作元素514劃分成分散的組元,并將一個組元發(fā)送至實例550i (其中i為a、b或c)中的每一個。為消除可能的并行情形,在將多個輸出合并成針對所述工作元素的單個輸出之前,匯集節(jié)點554會一直等待,直到每個實例都返回了一個輸出為止。為了維持管路化,劃分節(jié)點可能已經(jīng)在工作元素后面經(jīng)由每個實例而發(fā)送分隔符(delimiter),使得當從每個實例接收到所述分隔符時,匯集組元就可以知道工作元素已被完成。在一些實例中,在管路化的給定階段中,在由給定節(jié)點處理多個工作元素的集合之后會發(fā)送分隔符。
[0044]作為對照,共享劃分節(jié)點552將整個工作元素408a發(fā)送至單個實例550a以進行處理。匯集節(jié)點554被配置為等待(expect)與僅來自一個實例550a的工作元素相關(guān)的輸出408a’。當接收到所等待的輸出408a’(在一些實例中,其后伴隨有一個分隔符)時,匯集節(jié)點544將輸出提供至下一節(jié)點504。匯集節(jié)點544不用等待來自其它實例550b和550c的工作元素組元或分隔符。這就允許工作元素處理器500b僅使用給定工作元素真正需要的實例550i。與圖3b中對事務(wù)記錄(transactional records)的共享劃分一樣,對工作元素的共享劃分也允許并行處理多個工作元素。與等待第一工作元素408a完成處理并從其實例550a顯現(xiàn)出來的方式不同,劃分節(jié)點552接收來自上游(upstream)節(jié)點502的另一個工作元素輸入408c,且將其發(fā)送至下一個可用實例500b。以此方式,可同時處理多個工作元素408a和408b,而不必對劃分節(jié)點552進行多線程化(multithreaded)。在一些實例中,劃分節(jié)點552經(jīng)由通信鏈路560通知匯集節(jié)點554在每個實例中有哪些工作元素,使得匯集節(jié)點554知道等待的是什么,并能使輸出元素408a’、408c’與輸入工作元素408a、408c相關(guān)聯(lián)。
[0045]在共享之間劃分工作元素也允許輸出408a’、408b’和408c’能夠不依照與輸入408a、408b和408c相關(guān)的順序(out of order)返回。例如,如果工作元素408a中的數(shù)據(jù)造成實例550a處理所述工作元素的時間長于實例550b處理工作元素408c的時間,那么匯集節(jié)點554將在其接收輸出408a’之前接收輸出408c’。由于兩個工作元素408a和408c彼此相互獨立,因此匯集節(jié)點554能夠?qū)⑤敵?08c’發(fā)送至下一節(jié)點504而不必等待輸出408a’。這里假定將其它階段(例如,劃分/匯集對502/504和打包/拆解對402/404)配置為在工作元素處理器500b內(nèi)調(diào)節(jié)(accommodate)工作元素順序的改變。在一些實例中,可能會需要或想要保持所述順序,那么匯集節(jié)點554將保留輸出408c’直到接收到輸出408a’,并且將它們按順序釋放給下一節(jié)點504。在這種計算中,還有一個優(yōu)勢就是實例550a、550b和550c能夠同時處理多個工作元素。例如,如果子圖550的處理時間長于其它節(jié)點或子圖的處理時間,那么這種計算將很有用。
[0046]對事務(wù)處理的動作類型劃分和共享劃分以及對工作元素的類型劃分和共享劃分都允許所述圖按照內(nèi)在的并行性運行,即由不同的處理元素同時處理相關(guān)的或不相關(guān)的工作元素。
[0047]共享劃分、類型劃分、和對請求及其工作元素進行并行處理的其它方法都可以在供應(yīng)方圖中實現(xiàn),使得由圖提供的服務(wù)其自身能夠處理并行輸入。例如,在附圖5b中的圖501就是作為供應(yīng)方圖來運行的,此時第一節(jié)點570為預(yù)訂節(jié)點(subscribe node),且最終節(jié)點572為與預(yù)訂節(jié)點570配對的發(fā)布節(jié)點(publish node)。預(yù)訂節(jié)點570接收包括輸入406的請求574,并將所述輸入406發(fā)送至劃分節(jié)點402。預(yù)訂節(jié)點570與發(fā)布節(jié)點572配合,以使輸出412與輸入406匹配,并將它們封包(package)成合適的響應(yīng)576 (B卩,確保每個響應(yīng)到達發(fā)出調(diào)用的客戶方)。因為圖501處理的是并行記錄和并行工作元素,所以預(yù)訂節(jié)點570可以連續(xù)接收輸入請求574,而無需等待發(fā)布節(jié)點572接收到輸出412。使用對請求進行動作類型劃分的子圖,就允許單個供應(yīng)方圖501提供多個服務(wù)。
[0048]在一些實例中,預(yù)訂節(jié)點570和發(fā)布節(jié)點572假設(shè)單個請求574是獨立的,且請求576的返回順序是無關(guān)緊要的,因此將圖501中的劃分節(jié)點402和匯集節(jié)點404配置為不按順序執(zhí)行。如果順序很重要,那么預(yù)訂節(jié)點570和發(fā)布節(jié)點572的任何一個或兩者都可以確保響應(yīng)576的返回順序與對應(yīng)的輸出574的接收順序相同。
[0049]其它實施方式也落在所附權(quán)利要求和授權(quán)給 申請人:的其它權(quán)利要求的范圍內(nèi)。
【權(quán)利要求】
1.一種在基于圖的計算中分配服務(wù)的系統(tǒng),通過以下裝置,根據(jù)與服務(wù)相關(guān)聯(lián)的計算圖來處理服務(wù)請求,所述計算圖包括由以下鏈路連接的節(jié)點,所述鏈路表示在所述節(jié)點之間經(jīng)過的記錄的數(shù)據(jù)流,其中所述系統(tǒng)包括: 用于接收來自服務(wù)客戶方的用于所述計算圖的輸入的裝置, 用于將所述輸入作為數(shù)據(jù)流的記錄提供給所述計算圖的裝置,其中所述數(shù)據(jù)流的記錄包括多個工作元素, 用于基于對給定組中工作元素執(zhí)行的動作類型將所述多個工作元素劃分成多個組的裝置, 用于將每個組分配給所述計算圖的不同子圖的裝置, 用于將所述多個組中的一個或多個的每一個劃分成所述多個工作元素的多個子組的裝置, 用于將給定組的每個子組分配給為所述給定組分配的所述子圖的不同實例的裝置, 用于接收來自所述計算圖的所述子圖的輸出的裝置,以及 用于將所述輸出提供給所述服務(wù)客戶方的裝置, 其中,所述接收所述輸入的裝置包括識別來自所述服務(wù)客戶方的在服務(wù)請求中的所述輸入的裝置,以及 將所述輸入提供給所述計算圖的裝置包括: 使請求識別符與所述服務(wù)請求相關(guān)聯(lián)的裝置, 將包括所述輸入的工作元素提供給所述計算圖的裝置, 使所述請求識別符與所述工作元素相關(guān)聯(lián)的裝置,以及 將所述請求識別符與所述工作元素的關(guān)聯(lián)傳送至輸出節(jié)點的裝置。
2.如權(quán)利要求1所述的系統(tǒng),其中所述識別所述輸入的裝置包括從被封裝的請求提取所述輸入的裝置。
3.如權(quán)利要求2所述的系統(tǒng),其中所述被封裝的請求包括SOAP請求。
4.如權(quán)利要求1所述的系統(tǒng),其中 所述接收所述輸出的裝置包括: 接收來自所述計算圖的包括輸出的工作元素的裝置,以及 識別與所述工作元素相關(guān)聯(lián)的請求識別符的裝置,以及 將所述輸出提供給所述服務(wù)客戶方的裝置包括: 產(chǎn)生對應(yīng)于由所述請求識別符所識別的所述服務(wù)請求的服務(wù)響應(yīng)的裝置,其中所述服務(wù)響應(yīng)包括包含在所述工作元素中的所述輸出。
5.如權(quán)利要求4所述的系統(tǒng),其中產(chǎn)生所述服務(wù)響應(yīng)包括:將所述輸出嵌入被封裝的響應(yīng)中。
6.如權(quán)利要求5所述的系統(tǒng),其中所述被封裝的響應(yīng)包括SOAP響應(yīng)。
7.如權(quán)利要求1所述的系統(tǒng),還包括: 接收來自第二服務(wù)客戶方的用于所述計算圖的第二輸入的裝置, 將所述第二輸入作為第二數(shù)據(jù)流的記錄提供給所述計算圖的裝置,其中所述第二數(shù)據(jù)流的記錄包括多個工作元素, 接收來自所述計算圖的所述子圖的第二輸出的裝置,以及將所述第二輸出提供給所述第二服務(wù)客戶方的裝置;以及 在所述計算圖中并行處理所述第一輸入和所述第二輸入的裝置。
8.如權(quán)利要求7所述的系統(tǒng),其中所述并行處理所述第一輸入和所述第二輸入的裝置包括: 識別適用于所述第一輸入的第一子圖的裝置, 在所述第一子圖中處理所述第一輸入的裝置, 識別適用于所述第二輸入的第二子圖的裝置, 在所述第二子圖中處理所述第二輸入的裝置, 接收來自所述第一子圖的第一輸出的裝置,以及 接收來自所述第二子圖的第二輸出的裝置, 其中同時執(zhí)行所述第一子圖和所述第二子圖。
9.如權(quán)利要求7所述的系統(tǒng),其中所述并行處理所述第一輸入和所述第二輸入的裝置包括: 將子圖的第一實例識別為可用的裝置, 在所述子圖的第一實例中處理所述第一輸入的裝置, 將所述子圖的第二實例識別為可用的裝置, 在所述子圖的第二實例中處理所述第二輸入的裝置, 接收來自所述第一實例的第一輸出的裝置,以及 接收來自所述第二實例的第二輸出`的裝置, 其中同時執(zhí)行所述子圖的第一實例和所述子圖的第二實例。
10.一種用于根據(jù)與服務(wù)相關(guān)聯(lián)的計算圖來處理服務(wù)請求的系統(tǒng),所述計算圖包括由表示在節(jié)點之間經(jīng)過的記錄的數(shù)據(jù)流的鏈路所連接的節(jié)點,所述系統(tǒng)包括: 計算機系統(tǒng),被配置為通過下述步驟根據(jù)與所述服務(wù)相關(guān)聯(lián)的計算圖來處理服務(wù)請求,所述計算圖包括由表示在節(jié)點之間經(jīng)過的記錄的數(shù)據(jù)流的鏈路所連接的節(jié)點: 接收來自服務(wù)客戶方的用于所述計算圖的輸入, 將所述輸入作為數(shù)據(jù)流的記錄提供給所述計算圖,其中所述數(shù)據(jù)流的記錄包括多個工作元素, 基于對給定組中工作元素執(zhí)行的動作類型,將所述多個工作元素劃分成多個組, 將每個組分配給所述計算圖的不同子圖, 將所述多個組中的一個或多個的每一個劃分成所述多個工作元素的多個子組, 將給定組的每個子組分配給為所述給定組分配的所述子圖的不同實例, 接收來自所述計算圖的所述子圖的輸出,以及 將所述輸出提供給所述服務(wù)客戶方。
11.如權(quán)利要求10所述的系統(tǒng),其中 所述計算機系統(tǒng)被配置為接收所述輸入,包括所述計算機系統(tǒng)被配置為識別來自所述服務(wù)客戶方的在服務(wù)請求中的所述輸入,以及 所述計算機系統(tǒng)被配置為將所述輸入提供給所述計算圖,包括所述計算機系統(tǒng)被配置為: 使請求識別符與所述服務(wù)請求相關(guān)聯(lián),將包括所述輸入的工作元素提供給所述計算圖, 使所述請求識別符與所述工作元素相關(guān)聯(lián),以及 將所述請求識別符與所述工作元素的關(guān)聯(lián)傳送至輸出節(jié)點。
12.如權(quán)利要求11所述的系統(tǒng),其中所述計算機系統(tǒng)被配置為識別所述輸入,包括所述計算機系統(tǒng)被配置為從被封裝的請求提取所述輸入。
13.如權(quán)利要求12所述的系統(tǒng),其中所述被封裝的請求包括SOAP請求。
14.如權(quán)利要求10所述的系統(tǒng),其中 所述計算機系統(tǒng)被配置為接收所述輸出,包括所述計算機系統(tǒng)被配置為: 接收來自所述計算圖的包括輸出的工作元素,以及 識別與所述工作元素相關(guān)聯(lián)的請求識別符,以及 所述計算機系統(tǒng)被配置為將所述輸出提供給所述服務(wù)客戶方,包括所述計算機系統(tǒng)被配置為: 產(chǎn)生對應(yīng)于由所述請求識別符所識別的所述服務(wù)請求的服務(wù)響應(yīng),所述服務(wù)響應(yīng)包括包含在所述工作元素中的所述輸出。
15.如權(quán)利要求14所述的系統(tǒng),其中所述計算機系統(tǒng)被配置為產(chǎn)生所述服務(wù)響應(yīng),包括所述計算機系統(tǒng)被配置為將所述輸出嵌入被封裝的響應(yīng)中。
16.如權(quán)利要求15所述的系統(tǒng),其中所述被封裝的響應(yīng)包括SOAP響應(yīng)。
17.如權(quán)利要求10所述的系統(tǒng),還包括所述計算機系統(tǒng)被配置為: 根據(jù)所述計算圖來處理第二服務(wù)請求,其中所述步驟包括: 接收來自第二服務(wù)客戶方的用于所述計算圖的第二輸入, 將所述第二輸入作為第二數(shù)據(jù)流的記錄提供給所述計算圖,其中所述第二數(shù)據(jù)流的記錄包括多個工作元素, 接收來自所述計算圖的所述子圖的第二輸出,以及 將所述第二輸出提供給所述第二服務(wù)客戶方;以及 在所述計算圖中,并行處理所述第一輸入和所述第二輸入。
18.如權(quán)利要求17所述的系統(tǒng),其中,所述計算機系統(tǒng)被配置為并行處理所述第一輸入和所述第二輸入,包括所述計算機系統(tǒng)被配置為: 識別適用于所述第一輸入的第一子圖, 在所述第一子圖中處理所述第一輸入, 識別適用于所述第二輸入的第二子圖, 在所述第二子圖中處理所述第二輸入, 接收來自所述第一子圖的第一輸出,以及 接收來自所述第二子圖的第二輸出, 其中同時執(zhí)行所述第一子圖和所述第二子圖。
19.如權(quán)利要求17所述的系統(tǒng),其中,所述計算機系統(tǒng)被配置為并行處理所述第一輸入和所述第二輸入,包括所述計算機系統(tǒng)被配置為: 將子圖的第一實例識別為可用, 在所述子圖的第一實例中處理所述第一輸入, 將所述子圖的第二實例識別為可用,在所述子圖的第二實例中處理所述第二輸入, 接收來自所述第一實例的第一輸出,以及 接收來自所述第二實例的第二輸出, 其中同時執(zhí)行所述子圖的第一實例和所述子圖的第二實例。
20.如權(quán)利要求10所述的系統(tǒng),其中,所述計算圖包括第一圖、所述第一圖的第一子圖和所述第一圖的第二子圖,并且所述計算機系統(tǒng)被配置為將所述輸入作為數(shù)據(jù)流的多個工作元素提供給所述計算圖的步驟,包括所述計算機被配置為: 識別適用于所述數(shù)據(jù)流中的第一記錄的第一圖, 識別適用于所述第一記錄中的第一工作元素的第一子圖, 在所述第一子圖中處理所述第一工作元素, 識別適用于所述第一 記錄中的第二工作元素的第二子圖, 在所述第二子圖中處理所述第二工作元素, 接收來自所述第一子圖的第一輸出工作元素, 接收來自所述第二子圖的第二輸出工作元素, 使所述第一輸出工作元素與所述第一記錄相關(guān)聯(lián),以及 使所述第二輸出工作元素與所述第一記錄相關(guān)聯(lián), 其中至少部分地同時執(zhí)行所述第一子圖和所述第二子圖。
21.如權(quán)利要求10所述的系統(tǒng),其中,所述計算圖包括第一圖、所述第一圖的一個子圖的第一實例和所述第一圖的所述子圖的第二實例,并且所述計算機系統(tǒng)被配置為將所述輸入作為數(shù)據(jù)流的多個工作元素提供給所述計算圖的步驟,包括所述計算機系統(tǒng)被配置為: 識別適用于所述數(shù)據(jù)流中的第一記錄的第一圖, 將子圖的第一實例識別為可用, 在所述子圖的第一實例中處理所述第一記錄中的所述第一工作元素, 將所述子圖的第二實例識別為可用, 在所述子圖的第二實例中處理所述第一記錄中的所述第二工作元素, 接收來自所述第一實例的第一輸出工作元素, 接收來自所述第二實例的第二輸出工作元素, 使所述第一輸出工作元素與所述第一記錄相關(guān)聯(lián),以及 使所述第二輸出工作元素與所述第一記錄相關(guān)聯(lián), 其中至少部分地同時執(zhí)行所述子圖的所述第一實例和所述子圖的所述第二實例。
【文檔編號】G06F15/16GK103729330SQ201310403428
【公開日】2014年4月16日 申請日期:2007年8月9日 優(yōu)先權(quán)日:2006年8月10日
【發(fā)明者】伊戈爾·舍爾布, 約瑟夫·斯凱芬頓·沃萊三世, 拉里·W·艾倫 申請人:起元科技有限公司