摘? 要: 異步方法處理AMH是一種針對(duì)服務(wù)器的新型異步工作模型。本文提出了AMH中間服務(wù)器的邏輯結(jié)構(gòu)和服務(wù)對(duì)象群理論,并給出了AMH/AMI混合服務(wù)器的結(jié)構(gòu)和工作原理。
關(guān)鍵詞: CORBA技術(shù)? 異步方法處理? 多線程? N層體系? 服務(wù)對(duì)象群
?
標(biāo)準(zhǔn)的CORBA遠(yuǎn)程方法激發(fā)是同步執(zhí)行的,客戶(hù)機(jī)在等待應(yīng)答時(shí)發(fā)生阻塞,直到服務(wù)器完成方法的處理并返回結(jié)果。這種分布式對(duì)象通信方式稱(chēng)為同步方法激發(fā)(Synchronous Method Invocation,SMI),SMI模型如圖1所示。在SMI模型中,客戶(hù)機(jī)一旦阻塞就不能執(zhí)行其他任務(wù),這對(duì)于需要實(shí)時(shí)交互的應(yīng)用是不可取的。異步單向激發(fā)(Asynchronous Oneway Invocation,AOI)可以解決客戶(hù)機(jī)同步等待問(wèn)題,它將標(biāo)準(zhǔn)的阻塞調(diào)用分解為一對(duì)單向(oneway)操作??蛻?hù)機(jī)發(fā)起單向請(qǐng)求后可以執(zhí)行其他任務(wù)而不用阻塞,服務(wù)器處理完請(qǐng)求后,通過(guò)另一個(gè)單向方法將結(jié)果返回。AOI模型如圖2所示。
?
真正的異步調(diào)用機(jī)制是CORBA 2.4規(guī)范提出的異步方法激發(fā)(Asynchronous Method Invocation,AMI)。AMI允許客戶(hù)機(jī)發(fā)起請(qǐng)求后不必阻塞即可返回控制,從而極大地提高了系統(tǒng)的吞吐量和反應(yīng)能力,也為客戶(hù)機(jī)在單線程中并發(fā)處理多個(gè)請(qǐng)求提供了可能。AMI模型支持二種異步調(diào)用方法:一種是在AMI Polling模型中,客戶(hù)機(jī)完成請(qǐng)求后可立即返回控制,此后利用Poller對(duì)象檢測(cè)其返回,如圖3所示;另一種是在AMI Callback模型中,客戶(hù)機(jī)發(fā)起請(qǐng)求時(shí)產(chǎn)生一個(gè)ReplyHandler對(duì)象,當(dāng)結(jié)果返回后由ORB回調(diào)該對(duì)象并提示應(yīng)用系統(tǒng),如圖4所示。
?
AMI通過(guò)分離客戶(hù)機(jī)請(qǐng)求的發(fā)送和接收來(lái)提高異步處理能力,進(jìn)而提高客戶(hù)機(jī)的吞吐量。由于AMI對(duì)服務(wù)器是透明的,故當(dāng)多個(gè)客戶(hù)機(jī)同時(shí)發(fā)起請(qǐng)求時(shí),服務(wù)器的處理能力可能成為系統(tǒng)的瓶頸。多線程并發(fā)機(jī)制在增強(qiáng)服務(wù)器處理能力的同時(shí),也存在一些不足:在線程池模型中,當(dāng)并發(fā)請(qǐng)求的數(shù)量大于池內(nèi)線程數(shù)時(shí),系統(tǒng)會(huì)無(wú)法接收新的客戶(hù)機(jī)請(qǐng)求,尤其是當(dāng)請(qǐng)求為長(zhǎng)期事務(wù)時(shí),會(huì)嚴(yán)重影響其服務(wù)能力;在線程請(qǐng)求模型中,系統(tǒng)為每個(gè)請(qǐng)求創(chuàng)建一個(gè)新的線程,當(dāng)大量請(qǐng)求到達(dá)時(shí)會(huì)造成線程創(chuàng)建和撤消的開(kāi)銷(xiāo)過(guò)高,以至降低了服務(wù)器的處理效率。
針對(duì)這種情況,ACE-TAO CORBA平臺(tái)中提出了服務(wù)器端異步模型——異步方法處理(Asynchronous Method Handler,AMH)機(jī)制。
1?異步方法處理規(guī)范
ACE-TAO平臺(tái)采用隱式IDL方法定義AMH的接口,由IDL編譯器將用戶(hù)IDL映射為隱式IDL,進(jìn)而產(chǎn)生客戶(hù)機(jī)存根(stub)和服務(wù)對(duì)象框架(skeleton)。AMH隱式IDL接口采用了與原接口同名的方法,但沒(méi)有返回值。原有方法的返回值類(lèi)型被映射為void,傳遞方向?yàn)閛ut的參數(shù)在映射過(guò)程中被省略,in和inout參數(shù)映射為in參數(shù)。在每個(gè)方法中增加一個(gè)傳遞方向?yàn)閕n的ResponseHandler對(duì)象,用于返回執(zhí)行結(jié)果。
下面的示例說(shuō)明了一個(gè)簡(jiǎn)單接口對(duì)象的AMH隱式IDL語(yǔ)法和映射邏輯。
示例中每個(gè)AMH方法均有一個(gè)AMH_QuoteResponseHandler參數(shù),用于對(duì)客戶(hù)機(jī)發(fā)送返回信息。從邏輯上看,AMH_*ResponseHandler接口對(duì)象是從ResponseHandler繼承的。當(dāng)請(qǐng)求到達(dá)服務(wù)器后,ORB會(huì)創(chuàng)建一個(gè)ResponseHandler接口對(duì)象,將客戶(hù)機(jī)請(qǐng)求信息保存在其中,以返回處理結(jié)果。表1給出了ResponseHandler接口的主要屬性和訪問(wèn)方法。
?
在AMH_*ResponseHandler中,原IDL接口對(duì)象中out、inout參數(shù)和返回值被映射為in參數(shù),原有的in參數(shù)在AMH_QuoterResponseHandler中被忽略,而ResponseHandler及其繼承接口中的方法都返回void類(lèi)型。
服務(wù)器端的用戶(hù)異常和系統(tǒng)異常也進(jìn)行了AMH映射,在示例中為AMH_Quoter ExceptionHolder。原接口中的每個(gè)方法在AMH_*ExceptionHolder中映射成一個(gè)含raise的異常處理方法,如raise_get_quote()。
2? AMH的應(yīng)用設(shè)計(jì)
2.1 多線程AMH設(shè)計(jì)模型
在ACE-TAO的IDL編譯選項(xiàng)中增加-GH即可產(chǎn)生AMH服務(wù)對(duì)象框架,此時(shí)系統(tǒng)為單線程結(jié)構(gòu)。盡管AMH功能允許服務(wù)器無(wú)阻塞地接收客戶(hù)機(jī)并發(fā)請(qǐng)求,但系統(tǒng)的處理仍然要按順序執(zhí)行。要滿(mǎn)足實(shí)時(shí)應(yīng)用對(duì)并發(fā)處理的要求,應(yīng)采用多線程服務(wù)器結(jié)構(gòu)。AMH技術(shù)能夠兼容各種CORBA多線程模型,如線程連接和線程池等。由于一般的CORBA平臺(tái)都提供了對(duì)多線程模型的支持,開(kāi)發(fā)者只要進(jìn)行簡(jiǎn)單的配置即可實(shí)現(xiàn)多線程設(shè)計(jì)。在這種情況下,AMH多線程服務(wù)器與普通多線程服務(wù)器的設(shè)計(jì)和工作原理相同。
另一種多線程設(shè)計(jì)方法采用了AMH線程池結(jié)構(gòu)。AMH服務(wù)器為每個(gè)客戶(hù)機(jī)請(qǐng)求創(chuàng)建了一個(gè)ResponseHandler(實(shí)際為其繼承AMH_*Response Handler)對(duì)象,原有方法中的out、inout參數(shù)及方法的返回值在ResponseHandler中映射為in參數(shù)。開(kāi)發(fā)者可以隨時(shí)調(diào)用活動(dòng)的ResponseHandler對(duì)象,以向客戶(hù)機(jī)返回輸出結(jié)果。
AMH服務(wù)器對(duì)客戶(hù)機(jī)請(qǐng)求的接收、處理和返回是分開(kāi)執(zhí)行的,系統(tǒng)通過(guò)主線程接收請(qǐng)求,通過(guò)工作線程處理請(qǐng)求并返回結(jié)果。與普通CORBA線程池模型相似,應(yīng)用程序需要預(yù)先啟動(dòng)一池的線程,在主線程接收到客戶(hù)機(jī)請(qǐng)求后,將請(qǐng)求的ResponseHandler(簡(jiǎn)稱(chēng)rh)、客戶(hù)機(jī)的輸入?yún)?shù)in及其上下文信息(如時(shí)間戳)保存在請(qǐng)求隊(duì)列中,執(zhí)行入隊(duì)列操作enqueue(rh,in)。此后由工作線程執(zhí)行出隊(duì)列dequeue(rh,in)操作,將數(shù)據(jù)取出并處理。如果需要處理的請(qǐng)求多于正在等待的工作線程,請(qǐng)求將停留在隊(duì)列中,直至有線程為其服務(wù)。在工作線程執(zhí)行出隊(duì)列時(shí),首先執(zhí)行請(qǐng)求的處理,再調(diào)用ResponseHandler將結(jié)果返回客戶(hù)機(jī)。AMH線程的工作模型如圖5所示。
?
在AMH線程池模型中,由于ResponseHandler的加入,使請(qǐng)求的處理和返回變成了一種用戶(hù)可控制的過(guò)程。用戶(hù)可以根據(jù)應(yīng)用的需要決定何時(shí)進(jìn)行處理及何時(shí)返回結(jié)果。而AMH工作線程隊(duì)列也為系統(tǒng)提供了進(jìn)一步的處理能力,如按優(yōu)先級(jí)的處理以及允許客戶(hù)機(jī)進(jìn)行請(qǐng)求的取消等。
2.2 AMH在N層服務(wù)器結(jié)構(gòu)中的應(yīng)用
在二層體系中,AMH服務(wù)器同樣需要利用多線程來(lái)提高系統(tǒng)的處理效率,使異步處理的優(yōu)勢(shì)未得到體現(xiàn)。在三層和N層服務(wù)器體系中,AMH異步服務(wù)器的長(zhǎng)處才真正被體現(xiàn)。
在分布式N層服務(wù)體系中,中間服務(wù)器起到對(duì)象分配和導(dǎo)航等作用。如圖6所示,中間服務(wù)器中用于受理客戶(hù)機(jī)請(qǐng)求的服務(wù)對(duì)象構(gòu)成服務(wù)受理對(duì)象群,其功用是將客戶(hù)機(jī)請(qǐng)求信息中轉(zhuǎn)到終端服務(wù)器進(jìn)行處理的服務(wù)對(duì)象構(gòu)成服務(wù)中轉(zhuǎn)對(duì)象群。根據(jù)業(yè)務(wù)邏輯的要求,中間服務(wù)器中可以設(shè)置多個(gè)服務(wù)中轉(zhuǎn)對(duì)象群,而每個(gè)服務(wù)中轉(zhuǎn)對(duì)象群可以對(duì)應(yīng)多個(gè)終端服務(wù)器,每個(gè)終端服務(wù)器是一個(gè)基本的業(yè)務(wù)處理單元,它提供了最終的服務(wù)處理對(duì)象群,用于處理請(qǐng)求信息。在這種服務(wù)對(duì)象群結(jié)構(gòu)中,請(qǐng)求由中間服務(wù)器均勻分配給終端服務(wù)器,當(dāng)服務(wù)中轉(zhuǎn)對(duì)象群為多個(gè)時(shí),則對(duì)應(yīng)不同的服務(wù)處理對(duì)象群。由服務(wù)對(duì)象群構(gòu)成的分布式N層結(jié)構(gòu)中,可能含有一個(gè)或若干個(gè)業(yè)務(wù)中轉(zhuǎn)單元(中間服務(wù)器),也包含若干組業(yè)務(wù)處理單元(終端服務(wù)器),進(jìn)而構(gòu)成一個(gè)復(fù)雜的服務(wù)網(wǎng)絡(luò)。
在N層結(jié)構(gòu)中,中間服務(wù)器起著在服務(wù)受理對(duì)象群和服務(wù)中轉(zhuǎn)對(duì)象群間進(jìn)行對(duì)象導(dǎo)航的功能。如何有效提高其中轉(zhuǎn)和導(dǎo)航能力,使客戶(hù)機(jī)請(qǐng)求快速分發(fā)到其歸屬服務(wù)中轉(zhuǎn)對(duì)象群,進(jìn)而發(fā)送到相應(yīng)的終端服務(wù)器,以避免處理瓶頸,是中間服務(wù)器設(shè)計(jì)時(shí)需要考慮的重要問(wèn)題。
?
AMH技術(shù)為中間服務(wù)器在單線程中無(wú)阻塞地處理大量客戶(hù)機(jī)請(qǐng)求提供了可能。系統(tǒng)的服務(wù)受理對(duì)象群所接收的請(qǐng)求可以表示為以下集合:
{ (rh1(in1′),in1),(rh2(in2′),in2),……,(rhn(inn′),inn)}
其中:
n為服務(wù)受理對(duì)象群中對(duì)象的個(gè)數(shù);
rh為ResponseHandler;
????in為客戶(hù)機(jī)的輸入?yún)?shù)集合,包括傳遞方向?yàn)閕n、inout的參數(shù);
????out為中間服務(wù)器向客戶(hù)機(jī)輸出參數(shù)集合,包括傳遞方向?yàn)閛ut、inout和方法的返回值;
in′為ResponseHandler的輸入?yún)?shù),與對(duì)客戶(hù)機(jī)的輸出參數(shù)集合相同,即ini′=outi。
當(dāng)請(qǐng)求到達(dá)服務(wù)中轉(zhuǎn)對(duì)象群時(shí),服務(wù)中轉(zhuǎn)對(duì)象負(fù)責(zé)將請(qǐng)求發(fā)送到終端服務(wù)器,由終端服務(wù)器執(zhí)行請(qǐng)求處理,并將結(jié)果返回服務(wù)中轉(zhuǎn)對(duì)象。中間服務(wù)器的服務(wù)中轉(zhuǎn)對(duì)象屬于終端服務(wù)器的客戶(hù)機(jī)。要提高其請(qǐng)求中轉(zhuǎn)效率,可以采用AMI異步處理結(jié)構(gòu),這樣的中間服務(wù)器結(jié)構(gòu)稱(chēng)為AMH/AMI混合服務(wù)器模型。將(rh,in)作為AMI Callback對(duì)象的輸入?yún)?shù),向終端服務(wù)器發(fā)出服務(wù)請(qǐng)求。在終端服務(wù)器完成請(qǐng)求的處理后向中間服務(wù)器返回out參數(shù)。中間服務(wù)器采用out參數(shù)作為ResponseHandler的輸入?yún)?shù)in′調(diào)用rh(in′),將結(jié)果返回客戶(hù)機(jī)。
中間服務(wù)器的這種AMH/AMI混合服務(wù)模型提供了一條暢通的消息傳遞通路,很適合用于N層服務(wù)器體系。在中間服務(wù)器中,輸出請(qǐng)求可以使用AMI從ORB中快速返回控制,在此期間保持ResponseHandler句柄的活動(dòng)性,直到結(jié)果返回客戶(hù)機(jī)。這樣在單個(gè)線程中即完成了大量客戶(hù)機(jī)請(qǐng)求的并發(fā)處理。AMH/AMI混合服務(wù)器模型如圖7所示。
?
對(duì)于需要實(shí)時(shí)響應(yīng)的分布式應(yīng)用來(lái)說(shuō),也可以考慮使用AMI-AMH/AMI模型。在客戶(hù)機(jī)端采用AMI模型,中間服務(wù)器采用AMH/AMI混合模型,并設(shè)置多個(gè)終端服務(wù)器,以提高客戶(hù)機(jī)請(qǐng)求的處理效率。
3? 總? 結(jié)
AMH是一種新型CORBA異步方法處理模型,它提供了客戶(hù)機(jī)的請(qǐng)求與處理分離的機(jī)制,大大提高了系統(tǒng)的吞吐量,使得在多層服務(wù)結(jié)構(gòu)中采用單線程設(shè)計(jì)的服務(wù)器也能實(shí)現(xiàn)并發(fā)處理功能。
本文在分析AMH語(yǔ)法規(guī)范及其在ACE-TAO平臺(tái)的實(shí)現(xiàn)方法基礎(chǔ)上,進(jìn)一步研究了AMH在二層和N層體系中的應(yīng)用。本文提出了AMH中間服務(wù)器的邏輯結(jié)構(gòu)和服務(wù)對(duì)象群理論,并給出AMH/AMI混合服務(wù)器的結(jié)構(gòu)和工作原理。目前,AMH還不是OMG規(guī)定的CORBA標(biāo)準(zhǔn),其規(guī)范和設(shè)計(jì)方法仍處于進(jìn)一步的研究和發(fā)展中。
?
參考文獻(xiàn)
1 ?Slama D,Garbis J,Russell P et al.CORBA企業(yè)解決方案.北京:機(jī)械工業(yè)出版社,2001
2? Object Management Group.The Common Object Request Broker:Architecture and Specification Revision
2.4.http://www.omg.org/cgi-bin/doc?芽formal/01-02-33,2000
3? Brunsch D,O′Ryan C,Schmidt D C.Designing an Efficient and Scalable Server-side Asynchronous Model
for CORBA.University of California,2002
4? Deshpande M,SchmidtD C,O′Ryan C et al.Design and Performance of Asynchronous Method Handler for
CORBA.Distributed Objects and Applications(DOA) conference,2002
5? Object Management Group.CommonObjectRequestBroker Architecture:Core Specifi-cation.http://www.omg.
org/cgi-bin/doc formal/CORBA3.0.2_02-12-02.pdf,2002