《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > CORBA异步方法处理及其应用模型研究

CORBA异步方法处理及其应用模型研究

2009-08-20
作者:林 勇 吕述望

  摘  要: 异步方法处理AMH是一种针对服务器的新型异步工作模型。本文提出了AMH中间服务器的逻辑结构和服务对象群理论,并给出了AMH/AMI混合服务器的结构和工作原理

  关键词: CORBA技术  异步方法处理  多线程  N层体系  服务对象群

 

  标准的CORBA远程方法激发是同步执行的,客户机在等待应答时发生阻塞,直到服务器完成方法的处理并返回结果。这种分布式对象通信方式称为同步方法激发(Synchronous Method Invocation,SMI),SMI模型如图1所示。在SMI模型中,客户机一旦阻塞就不能执行其他任务,这对于需要实时交互的应用是不可取的。异步单向激发(Asynchronous Oneway Invocation,AOI)可以解决客户机同步等待问题,它将标准的阻塞调用分解为一对单向(oneway)操作。客户机发起单向请求后可以执行其他任务而不用阻塞,服务器处理完请求后,通过另一个单向方法将结果返回。AOI模型如图2所示。

 

  真正的异步调用机制是CORBA 2.4规范提出的异步方法激发(Asynchronous Method Invocation,AMI)。AMI允许客户机发起请求后不必阻塞即可返回控制,从而极大地提高了系统的吞吐量和反应能力,也为客户机在单线程中并发处理多个请求提供了可能。AMI模型支持二种异步调用方法:一种是在AMI Polling模型中,客户机完成请求后可立即返回控制,此后利用Poller对象检测其返回,如图3所示;另一种是在AMI Callback模型中,客户机发起请求时产生一个ReplyHandler对象,当结果返回后由ORB回调该对象并提示应用系统,如图4所示。

 

  AMI通过分离客户机请求的发送和接收来提高异步处理能力,进而提高客户机的吞吐量。由于AMI对服务器是透明的,故当多个客户机同时发起请求时,服务器的处理能力可能成为系统的瓶颈。多线程并发机制在增强服务器处理能力的同时,也存在一些不足:在线程池模型中,当并发请求的数量大于池内线程数时,系统会无法接收新的客户机请求,尤其是当请求为长期事务时,会严重影响其服务能力;在线程请求模型中,系统为每个请求创建一个新的线程,当大量请求到达时会造成线程创建和撤消的开销过高,以至降低了服务器的处理效率。

  针对这种情况,ACE-TAO CORBA平台中提出了服务器端异步模型——异步方法处理(Asynchronous Method Handler,AMH)机制。

1 异步方法处理规范

  ACE-TAO平台采用隐式IDL方法定义AMH的接口,由IDL编译器将用户IDL映射为隐式IDL,进而产生客户机存根(stub)和服务对象框架(skeleton)。AMH隐式IDL接口采用了与原接口同名的方法,但没有返回值。原有方法的返回值类型被映射为void,传递方向为out的参数在映射过程中被省略,in和inout参数映射为in参数。在每个方法中增加一个传递方向为in的ResponseHandler对象,用于返回执行结果。

  下面的示例说明了一个简单接口对象的AMH隐式IDL语法和映射逻辑。

  示例中每个AMH方法均有一个AMH_QuoteResponseHandler参数,用于对客户机发送返回信息。从逻辑上看,AMH_*ResponseHandler接口对象是从ResponseHandler继承的。当请求到达服务器后,ORB会创建一个ResponseHandler接口对象,将客户机请求信息保存在其中,以返回处理结果。表1给出了ResponseHandler接口的主要属性和访问方法。

 

  在AMH_*ResponseHandler中,原IDL接口对象中out、inout参数和返回值被映射为in参数,原有的in参数在AMH_QuoterResponseHandler中被忽略,而ResponseHandler及其继承接口中的方法都返回void类型。

  服务器端的用户异常和系统异常也进行了AMH映射,在示例中为AMH_Quoter ExceptionHolder。原接口中的每个方法在AMH_*ExceptionHolder中映射成一个含raise的异常处理方法,如raise_get_quote()。

2  AMH的应用设计

2.1 多线程AMH设计模型

  在ACE-TAO的IDL编译选项中增加-GH即可产生AMH服务对象框架,此时系统为单线程结构。尽管AMH功能允许服务器无阻塞地接收客户机并发请求,但系统的处理仍然要按顺序执行。要满足实时应用对并发处理的要求,应采用多线程服务器结构。AMH技术能够兼容各种CORBA多线程模型,如线程连接和线程池等。由于一般的CORBA平台都提供了对多线程模型的支持,开发者只要进行简单的配置即可实现多线程设计。在这种情况下,AMH多线程服务器与普通多线程服务器的设计和工作原理相同。

另一种多线程设计方法采用了AMH线程池结构。AMH服务器为每个客户机请求创建了一个ResponseHandler(实际为其继承AMH_*Response Handler)对象,原有方法中的out、inout参数及方法的返回值在ResponseHandler中映射为in参数。开发者可以随时调用活动的ResponseHandler对象,以向客户机返回输出结果。

  AMH服务器对客户机请求的接收、处理和返回是分开执行的,系统通过主线程接收请求,通过工作线程处理请求并返回结果。与普通CORBA线程池模型相似,应用程序需要预先启动一池的线程,在主线程接收到客户机请求后,将请求的ResponseHandler(简称rh)、客户机的输入参数in及其上下文信息(如时间戳)保存在请求队列中,执行入队列操作enqueue(rh,in)。此后由工作线程执行出队列dequeue(rh,in)操作,将数据取出并处理。如果需要处理的请求多于正在等待的工作线程,请求将停留在队列中,直至有线程为其服务。在工作线程执行出队列时,首先执行请求的处理,再调用ResponseHandler将结果返回客户机。AMH线程的工作模型如图5所示。

 

  在AMH线程池模型中,由于ResponseHandler的加入,使请求的处理和返回变成了一种用户可控制的过程。用户可以根据应用的需要决定何时进行处理及何时返回结果。而AMH工作线程队列也为系统提供了进一步的处理能力,如按优先级的处理以及允许客户机进行请求的取消等。

2.2 AMH在N层服务器结构中的应用

  在二层体系中,AMH服务器同样需要利用多线程来提高系统的处理效率,使异步处理的优势未得到体现。在三层和N层服务器体系中,AMH异步服务器的长处才真正被体现。

  在分布式N层服务体系中,中间服务器起到对象分配和导航等作用。如图6所示,中间服务器中用于受理客户机请求的服务对象构成服务受理对象群,其功用是将客户机请求信息中转到终端服务器进行处理的服务对象构成服务中转对象群。根据业务逻辑的要求,中间服务器中可以设置多个服务中转对象群,而每个服务中转对象群可以对应多个终端服务器,每个终端服务器是一个基本的业务处理单元,它提供了最终的服务处理对象群,用于处理请求信息。在这种服务对象群结构中,请求由中间服务器均匀分配给终端服务器,当服务中转对象群为多个时,则对应不同的服务处理对象群。由服务对象群构成的分布式N层结构中,可能含有一个或若干个业务中转单元(中间服务器),也包含若干组业务处理单元(终端服务器),进而构成一个复杂的服务网络。

  在N层结构中,中间服务器起着在服务受理对象群和服务中转对象群间进行对象导航的功能。如何有效提高其中转和导航能力,使客户机请求快速分发到其归属服务中转对象群,进而发送到相应的终端服务器,以避免处理瓶颈,是中间服务器设计时需要考虑的重要问题。

 

  AMH技术为中间服务器在单线程中无阻塞地处理大量客户机请求提供了可能。系统的服务受理对象群所接收的请求可以表示为以下集合:

  { (rh1(in1′),in1),(rh2(in2′),in2),……,(rhn(inn′),inn)}

  其中:

  n为服务受理对象群中对象的个数;

  rh为ResponseHandler;

    in为客户机的输入参数集合,包括传递方向为in、inout的参数;

    out为中间服务器向客户机输出参数集合,包括传递方向为out、inout和方法的返回值;

  in′为ResponseHandler的输入参数,与对客户机的输出参数集合相同,即ini′=outi。

  当请求到达服务中转对象群时,服务中转对象负责将请求发送到终端服务器,由终端服务器执行请求处理,并将结果返回服务中转对象。中间服务器的服务中转对象属于终端服务器的客户机。要提高其请求中转效率,可以采用AMI异步处理结构,这样的中间服务器结构称为AMH/AMI混合服务器模型。将(rh,in)作为AMI Callback对象的输入参数,向终端服务器发出服务请求。在终端服务器完成请求的处理后向中间服务器返回out参数。中间服务器采用out参数作为ResponseHandler的输入参数in′调用rh(in′),将结果返回客户机。

  中间服务器的这种AMH/AMI混合服务模型提供了一条畅通的消息传递通路,很适合用于N层服务器体系。在中间服务器中,输出请求可以使用AMI从ORB中快速返回控制,在此期间保持ResponseHandler句柄的活动性,直到结果返回客户机。这样在单个线程中即完成了大量客户机请求的并发处理。AMH/AMI混合服务器模型如图7所示。

 

  对于需要实时响应的分布式应用来说,也可以考虑使用AMI-AMH/AMI模型。在客户机端采用AMI模型,中间服务器采用AMH/AMI混合模型,并设置多个终端服务器,以提高客户机请求的处理效率。

3  总  结

  AMH是一种新型CORBA异步方法处理模型,它提供了客户机的请求与处理分离的机制,大大提高了系统的吞吐量,使得在多层服务结构中采用单线程设计的服务器也能实现并发处理功能。

  本文在分析AMH语法规范及其在ACE-TAO平台的实现方法基础上,进一步研究了AMH在二层和N层体系中的应用。本文提出了AMH中间服务器的逻辑结构和服务对象群理论,并给出AMH/AMI混合服务器的结构和工作原理。目前,AMH还不是OMG规定的CORBA标准,其规范和设计方法仍处于进一步的研究和发展中。

 

参考文献

1  Slama D,Garbis J,Russell P et al.CORBA企业解决方案.北京:机械工业出版社,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

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。