基于消息驱动的面向对象通用C/S应用框架(五)

1.5 ACE架构

        ACE(Adaptive Communication Environment,自适配通信环境)是一套专门处理多平台差异和编程复杂性的优秀中间件,对网络应用程序的开发具有重要意义,特别是大型服务器程序的开发。ACE已经成为许多网络计算系统的基础,从实时的航空电子应用到CORBA ORB的实现,以及对主机“端到端(Peer-to-Peer)”通信的支持,等等。和其他中间件一样,ACE也将异构环境下的各种复杂性隐藏在底层,例如硬件平台、操作系统以及网络协议等方面的差异;但是和其他众多的基础设施中间件不同的是,ACE能够在程序需要的任何地方提供最大的灵活性,而不会损害系统的性能和可扩展性。

        ACE是一套应用广泛的C++工具包,它汇集了很多常用的模式和抽象,这些模式和抽象在各种极为成功的中间件和网络程序中都得到了广泛的应用。ACE的实现主要运用了C++面向对象程序设计技术,也使用了模版(template)、traits(特征类)等高级语言特性和其他C++技术,此外还运用了大量的设计模式(Design Pattern)。

        ACE的目标用户是高性能实时通信服务类应用软件的开发者。如果需要运用进程间通信机制(IPC)、事件多路分离、显式动态链接和并发访问等技术来开发面向对象的网络应用和服务软件,使用ACE作为基础软件就可以大大简化它们的工作。ACE包含的多种组件可以帮助通信软件获得更好的灵活性、可靠性和可移植性,同时具有更好的效率。ACE的组件主要有以下几种:

  • 多线程、多进程并发以及同步组件;
  • 进程间通信(IPC)组件;
  • 内存管理组件;
  • 定时器、事件和信号组件;
  • 文件系统管理组件;
  • 线程管理组件;
  • 事件多路分离和处理器分派组件;
  • 建立通信连接和服务初始化组件;
  • 软件的静态配置、动态配置和重配置组件;
  • 分布式通信服务组件;等。

        下图显示了ACE架构中的关键组件及其层次关系:

图1-9 ACE的分层体系结构

        ACE由OS(操作系统)适配层、C++封装层、框架层、分布式服务和组件、高级分布式计算中间件(TAO、JAWS)等组成。

1.5.1 OS适配层

        该层对用C写成的本地OS API进行了统一封装,从而向ACE中的其他层和组件提供一致的与OS无关的编程接口,这样就屏蔽了如下与OS API相关的平台专有特性:

  • 多线程、多进程并发及其同步;
  • 进程间通信(IPC)和共享内存;
  • 本地文件系统;
  • 事件多路分离机制:ACE的适配层封装了用于对基于I/O、定时器、信号和同步的事件进行同步和异步多路分离的OS API;
  • 显式动态链接:ACE的适配层封装了用于显式动态链接的OS API。显式动态链接允许在安装时或运行时对应用服务进行配置。

        ACE OS适配层的可移植性使得ACE可运行在许多操作系统上,目前已在广泛的OS平台上移植和测试,包括Win32、Mac OS X、大多数版本的UNIX和Linux、实时操作系统VxWorks等。由于ACE的OS适配层所提供的抽象,所有这些平台使用同一棵代码树,这样的设计极大地增强了ACE的可移植性和可维护性。

1.5.2 C++封装层

        一般来说,可以直接在ACE OS适配层之上编写高度可移植的C++应用,但是大多数ACE开发者使用的是上图中所示的C++封装层。通过提供类型安全的C++接口,ACE简化了应用的开发,应用程序可以通过继承、聚合或者直接实例化等方法来使用这些组件。

        ACE C++封装具有许多与ACE OS适配层一样的特性,但是这些特性源于采用C++面向对象的方法而不是直接采用独立的C函数,从而降低了学习和正确使用ACE的难度。另外C++的强类型安全特性也会提高应用程序的健壮性。

        ACE采用了许多技术来降低或消除额外的性能开销,例如大量使用C++内联函数。此外对于关键性应用比如socket和文件I/O的send/recv方法,ACE避免使用虚函数。

1.5.3 框架层

        ACE还包含一个高级的网络编程框架,它集成并增强了较低层次的C++封装类。利用该框架可以把并发的分布式服务动态配置到应用中。ACE的框架层包含以下组件:

  • 事件多路分离组件。ACE Reactor(反应堆)和Proactor(前摄器)是可扩展的面向对象多路分离器组件,它们分派应用专有的处理器,以响应多种类型的基于I/O、定时器、信号和同步的事件;
  • 服务初始化组件。ACE Acceptor(接受器)和Connector(连接器)组件分别使它们的初始化工作与上层应用相关的工作解耦。
  • 服务配置组件。ACE Service Configurator(服务配置器)支持应用的配置和重配置,即可以在应用服务安装时或运行时进行动态装配;
  • ORB适配器组件。通过ORB适配器,ACE可以与单线程和多线程CORBA系统无缝集成。

        ACE框架层组件方便了通信软件的开发,使用它们开发的软件无需修改、无需重新编译链接甚至不需要在运行时频繁地重启,就可以实现升级和扩展。

1.5.4 分布式服务和组件

        除了OS适配层、C++封装层和框架组件,ACE还提供了标准的分布式服务库,但是它们并非ACE框架严格意义上的组成部分。这些组件可作为分布式应用的基本组件,它们提供了通用的分布式应用任务的可重用实现,比如名字服务、事件路由、日志、时间同步等。此外,它们还演示了常用的ACE组件的使用方法,比如怎样用Reactor、Service Configurator、Acceptor/Connector、Active Object以及IPC等组件来开发灵活、高效和可靠的通信软件。

1.5.5 高级分布式计算中间件

        开发健壮的、可扩展的和高效的通信类应用软件本身具有很大的挑战性,即便是使用ACE这样的通信框架作为基础。特别是开发者需要掌握许多操作系统和网络通信方面的知识,比如网络寻址、多字节数据的字节序转换、加解密、压缩解压、多进程和多线程及其同步、IPC等等。

        通过采用像CORBA、DCOM或Java RMI这样的高级分布式计算中间件,可能会降低开发通信类应用软件的复杂性。高级分布式计算中间件通常位于客户端和服务器之间,主要完成以下工作:

  • 认证、授权和数据安全服务;
  • 服务的注册和激活;
  • 服务的定位和绑定;
  • 事件多路分离以及事件分发;
  • 在像TCP这样的面向字节流的通信协议之上实现标准化消息传递;
  • 完成字节序转换和参数编组(marshaling)。

        为此,在ACE的基础上提供了如下的高级中间件:

  • ACE ORB(TAO)。TAO是使用ACE提供的框架组件和模式来构建的CORBA实时实现,包含网络接口、OS、通信协议和CORBA中间件组件等特性。TAO基于标准的OMG CORBA参考模型,但是进行了增强设计,以克服传统CORBA用于高性能和实时应用环境时的缺点;
  • JAWS。JAWS是高性能、自适配的Web服务器,也是使用ACE提供的框架组件和模式来构建。JAWS被构造为“框架的框架”,所以包含以下组件和框架:事件多路分发器、并发策略、I/O策略、协议管道、协议处理器和缓存虚拟文件系统等,而且每个框架都包含一组协作对象,通过组合和扩展ACE中的组件来实现。

1.5.6 ACE的优点和缺点

        在ACE组件的帮助下,可以先在任一种OS平台上编写并发网络应用程序,然后很容易地移植到各种其他的OS平台上。由于ACE是开放源码的自由软件,所以不必担心会与特定的操作系统平台和编译器绑定过死。这些都极大地保证了ACE的可移植性。ACE的设计和实现使用了大量设计模式,这无疑会提高软件的灵活性、可扩展性、可重用性和模块性。如果你的网络程序是用ACE作为基础来开发的,那么很容易转换为标准的中间件架构如CORBA。TAO使用了ACE提供的可重用组件和模式,它是CORBA的开放源码实现,并且完全遵循CORBA标准,同时为高性能和实时应用系统作了优化。

        因为ACE涉及的内容非常全面,包含了众多的抽象概念和模式,学习、掌握并能熟练运用其设计思想和组件需要花费很长的学习时间,而且需要具备一定的面向对象思维和程序设计功底,即使是专门的培训也要经历陡峭的曲线,所以门槛儿很高。不过现在ACE也在考虑拆分成小库的可能性。

        ACE正在进行持续的改进。Riverace公司(http://www.riverace.com)采用开放源码的商业模式对ACE进行商业支持。此外ACE开发组的许多成员目前正在积极投入TAO的开发工作中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值