1中间件及其应用泰州电信分公司通建部陈晴2003.3.31摘要:随着计算机应用范围的不断扩大,中间件技术已成为计算机应用的一个热点话题。本文细述了中间件的概念以及各种类型中间件的技术特性,并对中间件在客户/服务结构的应用进行了讨论,最后介绍了一个中间件应用的一个实例。关键词:中间件应用1.中间件的概念计算机硬件、软件技术的迅速发展,使计算机应用不断渗透到各个领域,特别是随着LAN技术的发展应用、Inrenet的普及、计算机应用范围的不断扩大、以及企业的跨区域运营,急切需要建立由若干个子系统组成集成计算机信息系统,以期待完成更复杂、更高级的功能。但是,已有的计算机信息系统是异构的,普遍存在着严重的信息孤岛问题,即每个子系统之间是独立的、不能有效地进行信息交换和共享。于是,现代企业管理向人们提出了建立一个基于不同数据库、不同主机平台、不同应用范围、不同人机界面、不同网路类型的综合应用系统的需求,如何把这些不同类型的设备、数据库、软件和网络集成起来开发出新的应用,是我们目前亟待解决的难题。一个较好的解决方法便是采用中间件技术。中间件的概念是随着多层应用模式和分布式计算技术的发展逐渐形成的,主要为解决异构问题。对于中间件目前还没有统一的定义,总的来说,中间件是一种软件总线,不同的主机平台、数据库和应用被按照规范制作成插件安装在总线上,实现异构系统的信息共享,又被描述为软件“粘合剂”,将不能交互的应用系统间粘在一起。它是一软件集合,提供了独立系统间通信的函数和对异构系统进行应用集成的工具,并具有如下的一些特点:满足综合应用的需要运行于多种主机和OS平台支持分布计算,提供跨网络、硬件和OS的透明性的应用或服务的交互支持标准的协议和接口图1示意了中间件在系统中所处层次,从体系结构上看,中间件是位于操作系统和应用软件之间的通用服务,它的主要作用是用来屏蔽网络硬件平台的差异性和操作系统、数据库以及网络协议的异构性,使应用软件能够比较平滑地运行于不同平台上。同时中间件在负载平衡、连接管理和调度方面起了很大的作用,使企业级应用的性能得到大幅提升,满足了关键业务的需求。22.中间件的分类从概念上讲,中间件的雏形早在70年代就出现了,消息通信和事务管理是其最初具有的功能。到了90年代,随着互联网的普及和企业管理的需要,对于中间件的需求也逐渐多样化,从而促使中间件技术进一步细分,产生了不同类别的中间件产品。根据应用编程接口功能和应用的不同,传统上将中间件分为5大类,分别是数据库中间件(DatabaseMiddleware)、基于远程过程调用中间件(RPC-basedMiddelware)、面向消息中间件(Message-orientedMiddleware)、分布事务处理中间件(DistributedtransactionprocessingmonitorMiddleware)和对象请求代理中间件(ObjectrequestbrokerMiddelware)。2.1.数据库中间件数据库中间件是所有中间件中最普遍、最成熟的一种。它提供了一系列应用程序接口API,通过中间层而不考虑操作系统及网络来访问本地或异地的数据库,提供了良好的数据库独立性。ODBC就是一种基于数据库的中间件,它提供了一组对数据库访问的标准API,通过SQL来完成其大部分任务。一个完整的ODBC由下列几个部件组成:应用程序(Application)、ODBC管理器(Administrator)、驱动程序管理器(DriverManager)、ODBC驱动程序和数据源。各部件之间的关系如图2图所示:3应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。在ODBC中,ODBCAPI不直接访问数据库,必须通过驱动程序管理器与数据库交换信息,驱动程序管理器负责将应用程序对ODBCAPI的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作均由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBCAPI进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。但是,在基于数据库的中间件模型中,数据库作为信息的中心存储单元,中间件负责数据间的同步及点到点通信,系统的灵活性提高是以处理性能的降低为代价的。这种方式不适合于高性能应用处理,因为它需要大量的数据通信,同时,当网络发生故障时,系统将不能正常工作。2.2.基于RPC中间件远程过程调用是一种广泛使用的分布式应用程序处理方法,是面向过程和函数的中间件,提供的是基于过程的服务访问。它沿用了大多数程序员都非常熟悉4的编程模式,程序员就像调用本地过程一样在程序中调用远程过程,启动远程过程的运行,然后将运行结果返回给本地程序。不但如此,远过程调用还可以将程序的控制传递到远端的服务器当中去。在RPC模型中,client和server只要具备了相应的RPC接口,并且具有RPC运行支持,就可以完成相应的互操作,而不必限制于特定的server。因此,RPC为client/server分布式计算提供了有力的支持。同时RPC也有一些缺点,主要是因为RPC一般用于应用程序之间的通信,而且采用的是同步通信方式,因此对于比较小型的简单应用还是比较适合的。但是对于一些大型的应用,这种方式就不是很适合了,因为此时程序员需要考虑网络或者系统故障,处理并发操作、缓冲、流量控制以及进程同步等一系列复杂问题。2.3.面向消息中间件面向消息的中间件为SERVER、CLIENT间提供了异步的可靠的数据传输方式,使得数据可间断地来往传递,就如同我们通过e-mail传递消息,它支持多种通讯协议、编程语言、应用程序、硬件和软件平台。目前流行的MOM中间件产品有IBM的MQSeries、BEA的MessageQ等。消息中间件提供的服务主要有以下几类。1)存储转发服务:消息的发起者使用该服务识别接收地点,如果接收者不可达,消息便被储存在队列或存储器中,消息的传递可以堆积并延迟到某一事件的触发(如:接收者可达)。EMAIL应用便是一种消息的存储转发模式。2)广播/订购中间件服务:消息产生者通过广播/订购中间件服务将消息公布到消息中心(代理),消息中心根据所有订购该消息的程序清单分发消息。3)事件登记服务:对任何消息系统,在消息的异步传送和同步传送过程中有许多不同的事件发生,消息系统必须对这些事件进行识别管理来控制消息的传送。4)智能路由服务:智能路由中间件服务确保消息以正确的序列传递到目的地。消息中间件有以下三个主要特点:A.通讯程序可在不同的时间运行。B.对应用程序的结构没有约束。在复杂的应用场合中,通讯程序之间不仅可以是一对一的关系,还可以进行一对多和多对一方式,甚至是上述多种方式的组合。多种通讯方式的构造并没有增加应用程序的复杂性。C.程序与网络复杂性相隔离。52.4.分布式事务处理(DTP)中间件事务处理监控(Transactionprocessingmonitors)最早出现在大型机上,为其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展,分布应用系统对大规模的事务处理提出了需求,比如商业活动中大量的关键事务处理。它确保事务处理的完整性,提高系统的处理能力,可以被看作是分布式事务处理应用程序的“操作系统”。总体上来说,事务处理监控提供以下功能:两阶段提交:其含义是对一个涉及多张表(table)或多个系统的事务提交进行监控管理,确保所有数据的一致性和完整性。失败恢复:事务监视器为所有事务记录日志,日志中记录事务的每个步骤,利用日志,可对失败的事务进行回滚或重新计算。系统同步:TPM使用事务日志使不同的系统保持同步。事务调度:对事务的执行进行调度,将低效率或实时性低的事务安排在空闲时段执行,以提高系统的运行效率。消息队列管理:保证应用系统提交的请求和数据可在网络故障或目的服务器瘫痪等情况下也能递交到目的服务器。全局事务工作流管理负载均衡:保证大量事务在众多不同系统中快速准确执行。2.5.对象请求代理(ORB)中间件随着对象技术与分布式计算技术的发展,两者相互结合形成了分布对象计算,并发展为当今软件技术的主流方向——对象请求代理中间件。ORB中间件采用面向对象的技术,将分布计算同面向对象的概念相互结合,可以看作是与编程语言无关的面向对象的RPC应用。目前,ORB主要存在两个标准:CORBA和DCOM,且两种标准存在了较大差异。6CORBA(CommonObjectRequestBrokerArchitecture)是由OMG组织制订的一种标准的面向对象应用程序体系规范,ORB是CORBA平台的核心。图3所示是基于ORB的结构,箭头方向表示了ORB的调用关系。图3:ORB结构示意图DCOM(Distributedcomponentobjectmodel)是微软提出的分布式对象技术,从OLE(Objectlinkingandembedding)和COM(Componentobjectmodel)演变而来,DCOM采用ORPC(ObjectRemoteProcedureCall)作为它的基本协议,并通过SCM(ServiceControlMananger)实现对象实体的操作。图4所示是DCOM的结构。图4:DCOM体系结构73.中间件在客户/服务结构中的应用客户/服务的概念最早在80年代提出,并在80年代后期开始被广泛采用。在这之前,基于网络的计算机应用系统主要文件共享模式为主流,随着计算机应用范围的扩大,文件共享的局限性也暴露出来,为了解决这些局限性,产生了客户/服务体系结构,并且由于这种结构的诸多优点,使分层模式得到了广泛应用,从而推动了中间件技术的发展。传统的客户/服务器模式是一种双层的结构,通常是一台个人计算机做客户机使用(运行客户端程序),另外一台服务器用于存放后台的数据库系统,应用程序与客户端直接相连,中间没有其他的层次。这种方式的数据库应用系统其优势在于,开发周期较短,能够适应大部分中小型数据库应用系统的要求(当客户端数量少于50时)。但随着数据库应用的日渐发展,这种结构的应用系统显现出诸多缺陷,主要有:对于数据库服务器端,每当建立一个数据连接,就会占用一些系统资源以确保与客户机之间的连接,当数据连接达到一定数量时,数据库服务器的响应速度与处理速度将大打折扣;程序的业务逻辑存在于前台的应用程序中,或者存在于后台数据库中以触发器(trigger)的方式实现,一旦客户的业务逻辑有所改变的话,应用程序以及后台触发器都需做相应的修改;由于客户端应用程序的开发直接与DBMS连接,易受制与数据库软件供应商;这种结构将用户界面、业务逻辑以及数据源绑定在一起,会消耗客户机的大量资源,对客户机来说是一个很大的负担。正是由于双层结构的局限性,人们提出了三层结构模式。三层客户/服务结构中,在客户端和数据库管理系统间加入了一个中间层。图5显示了一个三层体8系结构,三个层次自上而下分别是用户应用层、业务层和数据层,通过中间层对外部数据库进行数据访问。中间件技术是三层结构的重点,可以使用不同的中间件技术实现业务层功能,如消息队列、事务处理监控、过程调用和对象代理等,同时在业务层可采用多个中间件技术。不同的中间件技术提供了三层结构的相应优势,但总体上讲与二层结构相比三层结构有大处理能力、异构性、业务灵活、可维护管理和可重用等特性。泰州电信本地网“计费帐务系统”中销帐子系统便采用了三层结构,该系统采用了BEA公司的TUXEDO中间件产品。Tuxedo是基于分布式事务处理的中间件,由服务器端的事务管理器(/T-TransactionCore)、客户端的工作站(/