计算机应用软件系统从未像今天这样复杂过:数据被存储在多个相关联或者并不相关联的数据库系统中,分散在不同的地理位置的不同平台的计算机中,通过多种多样的通信协议、方式连接在一起。因此企业信息系统往往建立在多样的计算机技术上,大型主机、中型机、客户机/服务器系统,甚至包括单机数据库系统。这种情况的出现是由于企业的早期各部门独立的信息化需求以及企业的进一步运作如兼并等行为造成的。同时,企业信息系统的这种多样性将很大的限制企业的灵活性,制约企业的进一步发展,降低它在多变的市场的竞争力。
因此,当公司在实现它们的企业计算机系统时,怎样进行全公司范围内的数据访问是一个很重要的问题。为了解决操作异类环境、异类操作系统的复杂性,越来越多的企业开始选择采用中间件的解决方案,集成异构的系统。中间件和企业应用集成已是目前IT业中最频繁出现的词汇。
1 中间件
为解决分布异构问题,人们提出了中间件(middleware)的概念。从计算机软件系统的结构层次来讲,中间件是位于平台(硬件和操作系统)和应用之间的一组通用服务,如图1所示,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。作为应用支撑软件,中间件为分布应用以及应用软件开发提供了跨网络、跨平台(硬件和操作系统)的透明性和互操作,构成应用的基础结构,使得应用可以集成/连接异构的应用和系统,共享重要的应用服务和资源。
虽然中间件不仅在中国,在而且在整个世界范围内都是一个正在蓬勃发展的技术领域,但却很难给中间件一个严格的定义。但无论如何,中间件都是将应用的业务逻辑和应用的基础结构分离,使得应用的开发者可以仅关注应用的业务任务,而不必关注应用的基础结构。一般说来,中间件都具有以下的基本特征:
透明性:现代的分布式应用往往构筑在不同的硬件、操作系统、网络、数据库之上,利用中间件,我们可以透明地进行应用的开发、迁移、部署等工作。
高可用性:中间件通常都是以标准服务的形式提供,设计和实现中均考虑了各种故障情况,具有极强的故障处理和恢复能力。
高性能和伸缩性:分布式应用的客户往往是不可预计的,因此在中间件的设计和实现中,采用了大量的技术和算法以保证中间件能支持不同规模的应用,具有很好的伸缩性,保证构筑其上的分布式应用在任何情况下均具有良好的性能。
互操作性:中间件具有很强的互操作性,通过标准的协议、数据格式和接口规范,提供对多种数据源、其他应用和前端的访问,这种互操作通常远远超出应用的原始需求,因而方便以后的变化和升级;
可移植性:中间件提供了标准的编程接口,屏蔽了网络和平台的差异性,基于中间件开发的应用具有极强的可移植性,极易从一个平台移植到另一个平台上。中间件已成为许多标准化工作的主要部分。对于应用软件开发,中间件远比操作系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资。
2 中间件的分类
根据Standish Group的估计,在应用中基础结构大约占70%,为应用提供了实施业务任务的必要基础。适应不同的需要,有不同类型的服务基础结构,因此有不同类型的中间件,如订阅/发布、数据库复制、远程过程调用、数据库访问、消息排队、消息复制、消息传递、消息交换、事务管理器、事务处理监控器、对象请求代理、对象监控器、应用服务器、流程控制等。
由于中间件所包括的范围十分广泛,而目前对中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次上,对中间件的分类也会有所不同。我们基于不同中间件的目的和实现机制的不同,我们将中间件分为以下主要几类:
远程过程调用(Remote Procedure
Call)
面向消息的中间件(Message-Oriented Middleware)
对象请求代理(Object Request Brokers)
事务处理监控器(Transaction Processing Monitor)
数据访问中间件(Data Access middleware)
工作流中间件(workflow engine)
应用服务器(application server)
WEB服务(web service)
前三类中间件属于通信中间件,它们向上提供了不同形式的通讯服务,包括同步、排队、订阅发布、广播等等,在这些基本的通讯服务之上,可构筑各种平台,为应用程序提供不同领域内的服务,如事务处理监控器、分布数据访问等。
下面,针对上述几类中间件分别加以简要的介绍。
2.1 远程过程调用
远程过程调用是一种最早出现并被广泛使用的分布式应用程序处理方法。一个应用程序使用RPC来“远程”执行一个位于不同地址空间里的过程,并且从效果上看和执行本地调用相同。事实上,一个RPC应用分为两个部分:server和client。server提供一个或多个远程过程;client向server发出远程调用。server和client可以位于同一台计算机,也可以位于不同的计算机,甚至运行在不同的操作系统之上。它们通过网络进行通讯。相应的stub和运行支持提供数据转换和通讯服务,从而屏蔽不同的操作系统和网络协议。RPC通讯是同步的,所提供的是基于过程的服务访问,client与server进行直接连接,没有中间机构来处理请求,因此具有一定的局限性。比如,RPC通常需要一些网络细节以定位server;在client发出请求的同时,要求server必须是活动的等等。现代操作系统通常均提供了RPC机制。
2.2 面向消息的中间件
面向消息的中间件(MOM)指的是利用高效可靠的消息传递机制进行平台无关的数据交换,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。消息中间件通常包括:底层通讯系统、名字和目录服务、消息队列、server注册和管理等,支持同步、异步、订阅/发布等通信模式。目前市场上有许多流行的MOM中间件产品,如IBM的MQSeries。
2.3 对象请求代理
分布对象(或组件)是一些独立的代码封装体,远程client可以通过操作调用来访问它。在分布式环境中的各对象之间通过定义好的接口相互访问,这些接口构成连接client
和server的协议。对象之间实现互操作时,client和server表示对象在具体请求中的角色。client不必关心server对象是如何实现的、位于网络的哪个结点,也不必关心其运行于何种硬件和操作系统平台之上。client只需知道server对象所提供的接口。分布对象是一些灵敏的软件模块,它们可以位置透明、语言独立和平台独立地互相发送消息,实现请求服务。我们称这些独立的对象模块为组件。为了使得不同厂商所提供的组件可以在同一地址空间相互作用,甚至跨越不同地址空间或网络进行交互,必须通过对象请求代理来进行,对象请求代理为对象组件提供了标准底层运行环境的支持,即对象总线和一些系统服务组件。由于对象请求代理负责对象请求的传送和server的管理,client和server之间并不直接连接,因此,与RPC所支持的单纯的Client/Server结构相比,它可以支持更加复杂的结构。
目前,两个最主要的组件标准是OMG的CORBA和Microsoft的COM/DCOM, 它们采用对象总线结构,提供了工业组件标准。这些新的组件标准的出现将会极大地改变软件开发的现状,使应用开发向组合软件的方向发展。
2.4 事务处理监控器
事务处理监控器提供支持大规模事务处理的可靠运行环境,为关键业务应用建立server组件实现的框架,该框架对于client是透明的。事务处理监控器位于client和server之间,进行事务管理与协调、负载平衡、失败恢复等,以提高系统的整体性能。它可以被看作是事务处理应用程序的“操作系统”。 事务处理监控器主要包括:(a)运行控制,与平台的server管理一起,控制应用程序的运行,包括启动server进程、为其分配任务、监控其执行并对负载进行平衡。(b)通讯管理,为client和server之间提供了多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等。(c)事务管理,即保证在其监控下的事务处理的原子性、一致性、独立性和持久性;支持与X/Open
XA接口集成,以方便管理多种异构资源系统(如数据库系统、消息系统等)的分布事务。典型的事务处理中间件是BEA公司的Tuxedo。
2.5 数据访问中间件
数据访问中间件也称数据访问代理,负责连接异构的物理数据源(数据库、文件系统等)、服务请求以及模式转换等,为各物理数据源提供相应的驱动器,提供对异构信息源的高效、一致的访问。通过这样的数据访问代理可以:(a)减少网络通信,远程client通过service来请求数据访问,避免大量SQL语句传送;(b)可集中处理事务管理、安全和性能。核心数据源引擎和本地驱动器可进行集中服务和维护,client端不必安装所请求服务的数据源的“驱动器”,应用逻辑可在应用服务器上有效地管理事务、存取权限和性能等;(c)减低网络负载。本地数据源从server中分离,而通过消息队列等机制保持本地数据源与数据资源服务器的同步;(d)减少数据库的连接,通过共享连接减少同时连接的总数,从而减少开销。典型的数据访问中间件有Intersolv公司SequeLink和中科院软件所的DataAccess。
2.6 工作流服务中间件
工作流针对工作中具有固定程序的常规活动,通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。一个工作流包括一组活动及它们的相互顺序关系,还包括过程及活动的启动和终止条件,以及对每个活动的描述。工作流服务中间件旨在实现企业工作流的自动化,特别是业务处理中各项活动的合作、控制和通讯的自动化。
工作流服务中间件主要包括:(a)工作流模型与语言接口。(b)工作流引擎,主要包括系统的结构、并发控制、恢复、协同工作、代理、脚本(script)、规则和任务自动化的框架。该框架还包括语义消息服务,定义用于面向任务请求的高层消息机制。(c)各种分析、管理工具。
2.7 应用服务器
应用服务器为建立分布式的可伸缩的Internet/Intranet 应用程序提供了一个基于组件的理想的应用程序框架。它为应用提供如连接管理、负载平衡、组件管理和控制等功能,同时提供如资源管理、事务管理、安全管理、通讯管理、与其它应用的集成等标准化服务和接口,保证应用的交易将被完整地、安全地执行,使得应用开发者集中精力于业务逻辑的开发。应用服务器解决的是Internet
/Intranet 的应用开发问题。 典型的应用服务器中间件有IBM的WebSphere和BEA的WebLogic。
2.8 Web服务
Web服务建立在基于XML的SOAP 协议之上、自适应、自我描述、模块化的应用程序并通过Web发布,其它应用程序可以通过
Web 对其进行定位、调用。Web 服务提供的功能可以是从简单的查询请求(如股票报价)到复杂的商业业务逻辑(如订单处理)。Web服务提供者将服务部署在
Web 上,通过使用 Web 服务描述语言(WSDL)来描述给定 Web 服务提供的功能,并将自己向注册UDDI服务器注册。服务请求者使用
API 向UDDI服务器寻求它所需要的服务。UDDI服务器返回结果时,服务请求者将这些结果与特定服务绑定,双方经过适当的商讨之后,请求者就可以访问和调用提供者所提供的服务。XML、SOAP、WSDL、UDDI等与Web服务相关的标准都和平台、实现语言等无关,Web服务为真正垮平台的应用间的互操作提供基础。
3 企业应用集成
企业建立各种计算机应用系统是为了能够提高业务处理的效率、增强企业的竞争能力。但由于如前所述的种种原因,很多企业存在一个个应用孤岛:应用往往为不同的部门而设计开发,不同的应用之间不能共享业务处理流程和信息、不能有效的协同工作,这大大降低了计算机应用系统作用。随着竞争的日益加剧,企业迫切需要消除应用孤岛,使得各应用间既相互独立又能有效协同工作,将不同的应用集成一个完整企业级的计算机应用系统。随着技术的进步、特别是Internet快速发展的普及,不同企业间应用的集成也日益重要。目前,企业应用集成方式主要分为数据集成、功能集成。数据集成方式侧重于实现不同应用间数据的互换;功能集成方式着眼于不同应用间功能层次上的互操作。
下面我们以一个物流应用为例来简要说明各种应用集成方式的应用场合和特点。
3.1 数据集成
如图2所示,数据集成通过应用间的数据交换从而达到集成,主要解决数据的分布性和异构性问题,其前提是被集成应用必须公开数据结构,即必须公开表结构、表间关系、编码的含义等。数据集成的主要技术有数据库访问网关技术和数据复制技术。
3.1.1 数据库访问网关
数据库访问网关技术使应用系统能够统一、透明、高效地访问和操纵位于局域网、Intranet或Internet环境中的各种分布、异构的数据资源,使企业能够方便地管理和访问位于不同硬件平台、操作系统、网络协议和数据管理系统中的数据,快速地将数据资源转化为信息财富。数据库访问网关技术与ODBC、JDBC等技术最大的不同在于:假设不同应用的数据存在ORACLE、Sybase等多种异构数据库中,通过数据库访问网关技术可以将这些异构数据库集成一个逻辑数据库,用户可以如同访问一个数据库一样访问保存在不同的异构数据库中的数据。例如ORACLE中有货物表ware(wno,
name,qty,owner), Sybase中有货物运输表freight(truckno,wno) 以及驾驶员车辆分配表truck(truckno,driver)。如需查找某个货主的货由哪些驾驶员运送,通过数据库访问网关只需一条SQL语句即可完成:
Select truck.driver
from ware,freight,truck
where ware.owner=”张三” and
freight.wno=ware.wno and
freight.truckno=truck.truckno
DataAccess是中科院软件所开发的一个分布数据资源访问中间件产品,其目标是使应用系统能够统一、透明、高效地访问和操纵位于局域网、Intranet或Internet环境中的各种分布、异构的数据资源,使企业能够方便地管理和访问位于不同硬件平台、操作系统、网络协议和数据管理系统中的数据,快速地将数据资源转化为信息财富。
如图4所示,基于DataAccess数据库访问网关技术的物流系统集成每个子系统通过数据库访问网关透明地访问自己和其他系统的数据,而子系统不需知道其他系统的数据在何处。
3.1.2 数据复制
如图5所示,基于数据复制的应用集成通过数据复制中间件将从一个应用中提取数据并进行适当的转换后将数据传输并加载到另一个应用的数据库中,从而另一个应用可以本地数据库中访问其他应用的数据。
中科院软件所开发的数据集成平台中间件DataTrans是在Internet和Intranet环境中进行数据发布、汇总、同步和备份的中间件,为异构数据源之间提供基于消息中间件/ftp/email的、传送双方彼此独立的、用户界面友好的数据传送功能。DataTrans是一种异步数据复制中间件,用户可以自行设定应用间数据复制的频率(可以是按月、按周、按天甚至按分钟、按秒进行复制)。如图6所示,基于数据复制中间件技术的物流系统集成方式通过DataTrans将子系统要求其他子系统提供的数据复制到本子系统的数据库中,从而访问其他子系统的数据。

3.2 功能集成

如图7所示,功能集成通过互相调用对方的功能实现应用间的集成,其前提是被集成的应用必须提供功能调用接口。功能集成主要有组件集成、API集成、消息中间件集成、服务集成等。
3.2.1 组件集成

如图8所示,组件集成的前提是应用必须基于组件技术进行开发,即每个应用通过组件组合而成。从而在组装应用时可以将其他应用开发的组件组合到本应用中,因而集成其他应用的功能。

如图9所示,基于组件的物流系统集成方式要求被集成的应用如网式仓储系统提供访问自己功能的组件如货物查询组件并公布接口;其他应用如实时跟踪系统通过网式仓储的货物查询组件查询货物情况。

如图10所示,API 集成指通过传统的API接口如各种数据库提供的开发库等访问其他应用,其前提是被集成的应用必须提供传统的API接口。

如图11所示,基于API的物流系统集成方式要求被集成的应用如网式仓储系统提供访问自己功能的API接口库;其他应用如实时跟踪系统通过网式仓储的API查询货物情况。
3.2.3 消息中间件集成

如图12所示,应用从消息中间件接收消息、根据消息的内容调用特定的功能,如需要则将执行结果打包成消息发送给请求方。可见消息中间件集成通过消息中间件交换信息调用对方的功能而集成其他应用的功能,但要求应用必须能够处理消息并且公布接受的消息格式以及应答的消息格式。
ISMQ是中科院软件所开发的一种面向分布式应用的消息中间件产品,它通过消息队列(Message Queue)为分布式应用提供了一种可靠的信息交换机制:一个应用将消息放到队列中,另一个应用则可以从该队列中获取消息,从而达到通信的目的。这两个应用可以在同一台机器上,也可以在由局域网或广域网所连接的不同的机器上。应用间消息交换的速度取决于网络环境。在局域网内应用件消息可以实时交换。如图13所示,物流管理系统通过ISMQ实现各个子系统间基于消息的信息交换,从而完成子系统的集成。

3.2.4 服务集成

如图14所示,应用将自己对外提供的功能通过Web Services发布并在UDDI中注册,其他应用通过从UDDI中查找到所需的服务,并通过SOAP调用所需的服务,从而集成其他应用功能。

如图15所示,基于服务的物流系统集成方式要求被集成的应用如网式仓储系统提供访问自己功能的Web
Services并向UDDI注册;其他应用如实时跟踪系统通过UDDI查找网式仓储的Web Services描述,通过SOAP调用网式仓储的Web
Services查询货物情况。
3.3 各种集成方式比较
| 集成方式 |
优点 |
缺点 |
| 基于数据的集成 |
数据库访问网关 |
●实现全局访问
●位置透明
●统一的数据操作
●实时检测更新
|
●必须知道数据库结构
●降低访问速度
●网络状态的影响大
|
| 数据复制 |
●位置透明
●数据透明
●访问速度快
|
●必须知道数据库结构
●数据延迟
|
| 基于功能的集成 |
组件集成 |
●易于与其他应用集成
●易于根据客户需求定制
●可以实时检测最新信息
●标准化 |
●开发者必须知道其他应用的组件接口
●访问速度受网络状态的影响大
|
| API集成 |
●易于与其他应用集成
●实时检测更新
|
●须知道其他应用的API
●网络状态的影响大
|
| 消息中间件集成 |
●易于与其他应用集成
●实时检测更新
●信息可靠传输
|
●须知道其他应用的消息格式 |
| 服务集成 |
●标准化
●平台无关
●松散耦合
●语言无关
●协议无关
●易于与其他应用集成
●可以实时检测最新信息
|
●网络状态的影响大 |