ACE简介


(转载自中国互动出版网,http://www.china-pub.com/computers/emook/1111/info.htm)

文章摘要:

ADAPTIVE Communication Environment (ACE) 是一种免费开放原代码的面向对象框架结构,该结构实现了许多并行通信软件的核心设计模式. ACE提供丰富的C++ wrapper facades, 以及可跨平台执行通信软件的基本任务的框架对象。ACE提供的基本任务包括事件分离与事件处理的分发, 信号量处理,服务初始化 , 进程间通信, 共享内存管理, 消息路由, 分布式服务的动态配置, 并发执行与同步。

ADAPTIVE Communication Environment (ACE) 是一种免费开放原代码的面向对象框架结构,该结构实现了许多并行通信软件的核心设计模式. ACE提供丰富的C++ wrapper facades, 以及可跨平台执行通信软件的基本任务的框架对象。ACE提供的基本任务包括事件分离与事件处理的分发, 信号量处理,服务初始化 , 进程间通信, 共享内存管理, 消息路由, 分布式服务的动态配置, 并发执行与同步。
  ACE 的使用对象是面向开发高性能与实时通信服务应用的开发人员。它可以简化实现进程见通信,event demultiplexing , 直接动态链接explicit dynamic linking,以及并发处理功能的面向对象网络应用与服务的开发过程。 同时, ACE 通过在运行过程中动态将服务连接到应用中并在一个或多个进程或线程中执行这些服务这种方式实现了系统的自动配置与重新配置。
  ACE 仍在不断的发展,它的应用前景非常光明。ACE的商业用途的支持由 Riverace 公司使用公开原代码方式进行. 同时,许多ACE 开发小组的成员正在进行 ACE ORB (TAO)的开发工作。

1. 使用ACE的优点

  使用ACE的主要优点包括:
  高可移植性 - ACE部件使书写某一操作系统的并行网络应用和快速移植到许多其他操作系统平台变的非常容易。而且,因为ACE 是开发原代码、免费的软件,你不需担心在特定的操作系统或编译配置时被卡住。 
  增强的软件质量 - ACE部件是使用许多可增强通信软件关键的质量特性(如灵活性、可扩展性、可重用性与模块化等)的重要设计模式来设计的。
  高效率与可预见性predictability - ACE通过小心的设计来支持对于不同应用质量的服务(application quality of service,QoS)的需求,包括对于延迟敏感的应用使用较少的延迟,要求较强通信带宽的应用提供高性能的服务,以及对实时性应用的可预见性等服务。
  可容易的整合为高级的中间件 -- ACE 在TAO提供了可重用的部件与模式。而TAO是一个为高性能与实时系统应用优化过的,通过开放原代码实现了CORBA兼容标准。这样, ACE与TAO被设计用来协同工作来实现复杂的中间件解决方案。

2. ACE的结构与功能

  下图说明了ACE关键的部件以及他们之间的层次关系。

  
                        图表 1
  图中的结构与层次关系在下面描述。

3. ACE接口层(ACE Adapter Layer)

  该层在C编写的本地操作系统API之上。该接口层使在ACE中的其他层与部件与下面的平台相关的操作系统API隔离开来:
  并发与同步 - ACE接口层封装了操作系统的多线程、多进程与同步机制相关的API。
  进程间通信与共享内存-- ACE接口层封装了操作系统的本地与远程进程间通信,和共享内存管理的相关API。
事件分离机制 - ACE的接口层封装了操作系统中,有关同步和异步分离基于I/O、计时器、信号量、和同步事件的部分功能。
  显式动态链接-- ACE接口层封装了操作系统的显式动态链接相关的API,该功能允许应用服务不管在安装与运行时都可被配置。
  文件系统机制 -- ACE接口层封装了操作系统的文件系统API来操作文件与目录。
  ACE操作系统接口层的移植性使它可以在许多不同的操作系统平台上运行。 ACE已经在许多操作系统平台上被移植并被测试 包括Win32 (i.e., WinNT 3.5.x, 4.x, 2000, Win95/98, and WinCE using MSVC++, Borland C++ Builder, and IBM's Visual Age on Intel and Alpha platforms), 许多UNIX的版本 (e.g., Solaris 1.x and 2.x on SPARC and Intel, SGI IRIX 5.x and 6.x, DG/UX, HP-UX 9.x, 10.x, and 11.x, DEC/Compaq UNIX 3.x and 4.x, AIX 3.x and 4.x, DG/UX, UnixWare, SCO, and freely available UNIX implementations, such as Debian Linux 2.x, RedHat Linux 5.2 and 6.0, FreeBSD, and NetBSD), 实时操作系统(e.g., LynxOS, VxWorks, Chorus ClassiX 4.0, QnX Neutrino, and PSoS), MVS OpenEdition, and CRAY UNICOS. 单一的原代码树被用到所有操作系统平台上。
  ACE当前也有JAVA版本。
  因为有ACE操作系统接口平台的抽象,单一的原代码树被用到所有操作系统平台上,该设计简化了ACE的可移植性与可维护性。

4. 操作系统接口的C++包装接口(C++ Wrapper Facades for OS Interfaces)

  我们完全可以直接在ACE操作系统接口层之上开发高移植性的C++程序。但是,更多的开发者选择使用如图所示ACE的C++封装层。C++封装层通过提供封装并增强本地操作系统并发控制、通信、内存管理、事件分离、动态链接,与文件系统API,提供类型安全接口简化应用的开发。应用可通过有选择的继承、聚集或实例化下列对象来使用这些封装:
  并发与同步部件-ACE抽象了本地操作系统的多线程和多进程机制,如互斥,信号量来创建如活动对象(Active Objects)与多态未来(Polymorphic Futures)等高级面向对象并发抽象。
  进程间通信与文件部件 --ACE C++ 包装者封装了本地和远程的进程间通信机制如:接口(sockets), TLI, UNIX FIFOs与STREAM pipes, 以及Win32 的命名管道(Named Pipes). ACE C++ 包装者封装了操作系统当中文件系统的APIs。
  内存管理部件 - ACE的内存管理部件对于管理进程间共享内存和进程外栈内存的动态分配与回收,提供了灵活、可扩展的抽象机制。
  C++包装者提供了许多与操作系统接口层同样的特性。但是,这些特性不是使用单独的C函数构造的,他们是使用C++类与对象来构造的。这些面向对象的包可减少直接学习与使用ACE所花费的精力。
  比如,由于C++包装者是强类型的,所以,使用它可以增强应用的健壮性。因此,编译器可以在编译时间检测到系统类型不匹配而不是在运行时间。相反,对于C级别的操作系统的一些API如,接口、文件系统I/O等,在运行时间之前几乎不能检查到系统类型的不匹配 。
  ACE使用许多技术来减少或最小化执行成本。如ACE通过它的操作系统接口层和C++包装者提供的附加的类型安全性与不同的抽象级别,使用C++扩展的内联性(inlining)减少相关的方法调用的成本。同时,ACE注意避免在关键任务的包装者上使用需方法,如接口与文件I/O的send/recv方法。

5. 框架结构(Frameworks) 

  ACE同时包含了高级网络编程框架,该框架集成且增强了低一级的C++包装接口。该框架支持动态地将并发分布式服务配置成为应用。ACE的框架结构部分包含以下部件:
  事件分离器部件(Event demultiplexing components)--ACE的接收者(Reactor)与超动者(Proactor)是可扩展的、面向对象的事件分离器。这些分离器可以基于各种类型的I/O、计时器、信号量、与同步相关事件来分发各种应用相关的操作句柄。
  服务初始化部件(Service initialization components)--ACE 接收者(Acceptor)和连接者(Connector)部件是分别从特定应用任务中分离出来的,在服务初始化完成后,执行主动与被动初始化角色。
服务配置部件(Service configuration components )-- ACE服务配置管理者可以配置应用,使其可在安装或运行时组装服务。
  分层流部件(Hierarchically-layered stream components) -- ACE流部件简化了通信软件应用的开发过程,比如用户级的协议堆栈,它可由层次结构的服务构成。
  ORB接口部件(ORB adapter components) -- ACE可以通过其ORB接口部件,无缝地集成单线程和多线程的CORBA应用。
  使用ACE框架部件可促进通信软件的开发。使用它,通信软件可以在不用修改、重新编译、重新链接、或是经常重新启动应用程序的情况下,更新或扩展应用。该灵活性在ACE中是通过结合以下方面实现的:
  a) C++语言特性,如模板、继承、和动态帮定。
  b) 设计模式,如抽象类工厂、策略、以及服务配置器等。
  c) 操作系统机制,如显式的动态链接与多线程。

6. 分布式服务与部件(Distributed Services and Components)

  除了它的操作系统接口层,C++封装层和各种框架部件外,ACE同时提供一套分布式服务标准库,这些库被分成可自含的包。尽管这些服务部件不是严格的ACE框架库,但这些部件在ACE中有以下角色:
  给出可重用的应用代码片段-这些服务部件提供了如命名、事件路由、日志、时间同步与网络封锁等一般分布式应用任务的可重用实现。
  给出ACE部件的基本用例的示范--这些分布式服务同时证明了如何使用象 反应者(Reactors),服务配置( Service Configurators),接收者与连接者( Acceptors and Connectors),活动对象(Active Objects),以及进程间通信的封装(IPC wrappers) 等ACE部件,有效开发灵活、高效和可靠的通信软件。

7. 高级分布式计算中间件对象(Higher-level Distributed Computing Middleware Components)

 即使使用象ACE这样的通信框架,开发健壮的、可扩展并且高效的通信程序是非常有挑战性的工作。开发人员必须掌握大量的复杂操作系统与通信概念,比如:
网络寻址与服务识别
  描述转换, 如在异构系统间和不同处理器的字节循序间的加密、压缩与网络字节顺序转换。
  进程与线程的创建与同步。
  系统调用和对于本地与远程的进程间通信机制的类库常规接口。
  通过使用如CORBA,DCOM或JAVA RMI等高级的分布计算中间件,有可能减轻部分开发通信应用的复杂程度。高级分布计算中间件包含有服务器端与客户端两部分,并自动完成许多繁杂且易于出错的分布式应用开发工作,比如:
  验证,授权与数据安全。
  服务的查找与帮定。
  服务的注册与激活。
  对于事件的分离与发送。
  在面向字节流通信协议之上实现如TCP协议的消息框架。
  如网络字节码转换或参数排列等的描述转换问题处理。
  为了给通信软件开发者提供这些特性,在ACE中打包了下面的高级中间件应用:
  ACE ORB (TAO) - TAO是使用ACE中提供的框架结构对象与模式实现的针对高效与实时系统的CORBA应用。TAO中包含了网络接口,操作系统,通信协议以及CORBA中间件对象与相关特性。TAO基于标准的OMG的CORBA参考模型, 并且针对传统ORBS对于高效和实时应用系统的缺点,加入了相应的改善设计。TAO,与 ACE一样,都是免费的开放原代码的软件。
  JAWS -- JAWS TAO是使用ACE中提供的框架结构对象与模式实现的针对高效与实时系统的可适应性的WEB服务器。JAWS 被设计为框架的框架。JAWS的总体框架包含以下部件与框架: 一个事件调配者,并发策略 ,I/O 策略,协议管道 , 协议处理者,以及缓冲的虚拟文件系统。通过结合与扩展ACE中的部件,每种框架被设计为一套可协作的对象。JAW也是免费的开放原代码的软件。