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