中间件

中间件基本概念

一、什么是中间件

  为解决分布异构问题,人们提出了中间件(middleware)的概念。中间件是位于平台(硬件和操作系统)和应用之间的通用服务,如图1所示,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。

  也许很难给中间件一个严格的定义,但中间件应具有如下的一些特点:

  满足大量应用的需要 
  运行于多种硬件和OS平台 
  支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互 
  支持标准的协议 
  支持标准的接口

  由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。对于应用软件开 发,中间件远比操作系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要 将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资。

 

 

二、为什么要中间件

  计算机技术迅速发展。从硬件技术看,CPU速度越来越高,处理能力越来越强;从软件技术看,应用程序的规模不断扩大,特别是Internet及WWW的出现,使计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。这一切都对新一代的软件开发提出了新的需求。在这种分布异构环境中,通常存在多种硬件系统平台(如PC,工作站,小型机等),在这些硬件平台上又存在各种各样的系统软件(如不同的操作系统数据库、语言编译器等),以及多种风格各异的用户界面,这些硬件系统平台还可能采用不同的网络协议和网络体系结构连接。如何把这些系统集成起来并开发新的应用是一个非常现实而困难的问题。

  

三、主要中间件的分类

  中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次上,对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,它必须能够提供分布环境下的通讯服务,我们将这种通讯服务称之为平台。基于目的和实现机制的不同,我们将平台分为以下主要几类:

  远程过程调用(Remote Procedure Call) 
  面向消息的中间件(Message-Oriented Middleware) 
  对象请求代理(Object Request Brokers)

  它们可向上提供不同形式的通讯服务,包括同步、排队、订阅发布、广播等等,在这些基本的通讯平台之上,可构筑各种框架,为应用程序提供不同领域内的服务,如事务处理监控器、分布数据访问、对象事务管理器OTM等。平台为上层应用屏蔽了异构平台的差异,而其上的框架又定义了相应领域内的应用的系统结构、标准的服务组件等,用户只需告诉框架所关心的事件,然后提供处理这些事件的代码。当事件发生时,框架则会调用用户的代码。用户代码不用调用框架,用户程序也不必关心框架结构、执行流程、对系统级API的调用等,所有这些由框架负责完成。因此,基于中间件开发的应用具有良好的可扩充性、易管理性、高可用性和可移植性。

  下面,针对几类主要的中间件分别加以简要的介绍。

  1、远程过程调用

  远程过程调用是一种广泛使用的分布式应用程序处理方法。一个应用程序使用RPC来“远程”执行一个位于不同地址空间里的过程,并且从效果上看和执行本地调用相同。事实上,一个RPC应用分为两个部分:server和client。server提供一个或多个远程过程;client向server发出远程调用。server和client可以位于同一台计算机,也可以位于不同的计算机,甚至运行在不同的操作系统之上。它们通过网络进行通讯。相应的stub和运行支持提供数据转换和通讯服务,从而屏蔽不同的操作系统和网络协议。在这里RPC通讯是同步的。采用线程可以进行异步调用。

  在RPC模型中,client和server只要具备了相应的RPC接口,并且具有RPC运行支持,就可以完成相应的互操作,而不必限制于特定的server。因此,RPC为client/server分布式计算提供了有力的支持。同时,远程过程调用RPC所提供的是基于过程的服务访问,client与server进行直接连接,没有中间机构来处理请求,因此也具有一定的局限性。比如,RPC通常需要一些网络细节以定位server;在client发出请求的同时,要求server必须是活动的等等。

  2、面向消息的中间件

  MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。目前流行的MOM中间件产品有IBM的MQSeries、BEA的MessageQ等。消息传递和排队技术有以下三个主要特点:

  通讯程序可在不同的时间运行:程序不在网络上直接相互通话,而是间接地将消息放入消息队列,因为程序间没有直接的联系。所以它们不必同时运行。消息放入适当的队列时,目标程序甚至根本不需要正在运行;即使目标程序在运行,也不意味着要立即处理该消息。

  对应用程序的结构没有约束:在复杂的应用场合中,通讯程序之间不仅可以是一对一的关系,还可以进行一对多和多对一方式,甚至是上述多种方式的组合。多种通讯方式的构造并没有增加应用程序的复杂性。

  程序与网络复杂性相隔离: 程序将消息放入消息队列或从消息队列中取出消息来进行通讯,与此关联的全部活动,比如维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务,程序不直接与其它程序通话,并且它们不涉及网络通讯的复杂性。

  3、对象请求代理

  随着对象技术与分布式计算技术的发展,两者相互结合形成了分布对象计算,并发展为当今软件技术的主流方向。1990年底,对象管理集团OMG首次推出对象管理结构OMA(Object Management Architecture),对象请求代理(Object Request Broker)是这个模型的核心组件。它的作用在于提供一个通信框架,透明地在异构的分布计算环境中传递对象请求。CORBA规范包括了ORB的所有标准接口。1991年推出的CORBA 1.1 定义了接口描述语言OMG IDL和支持Client/Server对象在具体的ORB上进行互操作的API。CORBA 2.0 规范描述的是不同厂商提供的ORB之间的互操作。

  对象请求代理(ORB)是对象总线,它在CORBA规范中处于核心地位,定义异构环境下对象透明地发送请求和接收响应的基本机制,是建立对象之间client/server关系的中间件。ORB使得对象可以透明地向其他对象发出请求或接受其他对象的响应,这些对象可以位于本地也可以位于远程机器。ORB拦截请求调用,并负责找到可以实现请求的对象、传送参数、调用相应的方法、返回结果等。client对象并不知道同server对象通讯、激活或存储server对象的机制,也不必知道server对象位于何处、它是用何种语言实现的、使用什么操作系统或其他不属于对象接口的系统成分。

  值得指出的是client和server角色只是用来协调对象之间的相互作用,根据相应的场合,ORB上的对象可以是client,也可以是server,甚至兼有两者。当对象发出一个请求时,它是处于client角色;当它在接收请求时,它就处于server角色。大部分的对象都是既扮演client角色又扮演server角色。另外由于ORB负责对象请求的传送和server的管理,client和server之间并不直接连接,因此,与RPC所支持的单纯的Client/Server结构相比,ORB可以支持更加复杂的结构。

  4、事务处理监控

  事务处理监控(Transaction processing monitors)最早出现在大型机上,为其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展,分布应用系统对大规模的事务处理提出了需求,比如商业活动中大量的关键事务处理。事务处理监控界于client和server之间,进行事务管理与协调、负载平衡、失败恢复等,以提高系统的整体性能。它可以被看作是事务处理应用程序的“操作系统”。总体上来说,事务处理监控有以下功能:

  进程管理,包括启动server进程、为其分配任务、监控其执行并对负载进行平衡。 
  事务管理,即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。 
  通讯管理,为client和server之间提供了多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等。 
  事务处理监控能够为大量的client提供服务,比如飞机定票系统。如果server为每一个client都分配其所需要的资源的话,那server将不堪重负(如图2所示)。但实际上,在同一时刻并不是所有的client都需要请求服务,而一旦某个client请求了服务,它希望得到快速的响应。事务处理监控在操作系统之上提供一组服务,对client请求进行管理并为其分配相应的服务进程,使server在有限的系统资源下能够高效地为大规模的客户提供服务。

  四、面临的一些问题

  中间件能够屏蔽操作系统和网络协议的差异,为应用程序提供多种通讯机制;并提供相应的平台以满足不同领域的需要。因此,中间件为应用程序了一个相对稳定的高层应用环境。然而,中间件服务也并非“万能药”。中间件所应遵循的一些原则离实际还有很大距离。多数流行的中间件服务使用专有的API和专有的协议,使得应用建立于单一厂家的产品,来自不同厂家的实现很难互操作。有些中间件服务只提供一些平台的实现,从而限制了应用在异构系统之间的移植。应用开发者在这些中间件服务之上建立自己的应用还要承担相当大的风险,随着技术的发展他们往往还需重写他们的系统。尽管中间件服务提高了分布计算的抽象化程度,但应用开发者还需面临许多艰难的设计选择,例如,开发者还需决定分布应用在client方和server方的功能分配。通常将表示服务放在client以方便使用显示设备,将数据服务放在server以靠近数据库,但也并非总是如此,何况其它应用功能如何分配也是不容易确定的。

中间件的历史和演变

从Tuxedo、应用服务器,到EAI、构件、SOA,究竟什么才是中间件

什么是中间件?在一个具体的应用项目之中,到底能不能够不用中间件?这也是中间件厂商经常被问到问题之一。之所以有此一问,说明了用户只是知道了中间件,听说其很重要,但并真正不知道什么是中间件?

我们最早知道的中间件是一个称为Tuxedo的东西,实质上它是一个交易中间件。1998年IDC公司对于中间件有一个定义,并根据用途将其划分为6个类别。如今所保留下来的只有消息中间件和交易中间件,其他的已经被逐步融合到其他产品中了,被包裹进去了,在市场上已经没有单独的产品形态出现了。例如,当时有一个叫屏幕数据转换的中间件,其主要是针对IBM大机终端而设计产品,用于将IBM大机终端的字符界面转化为用户所喜欢的图形界面,类似的东西当时都称为中间件。但随着IBM大机环境越来越少,但是盛行一时的此类中间件如今已经很少再被单独提及。

2000年前后,互联网盛行起来,随之产生了一个新的东西,就是应用服务器。实际上,交易中间件也属于是应用服务器,为了区分,人们传统的交易中间件称为分布交易中间件,因它主要应用在分布式环境下,而将新的应用服务器,称为J2EE中间件,到目前为止,这都是市场上非常热门的产品。

EAI概念出来之后,市场上又推出了一些新的软件产品,,例如工作流、Portal等,但从分类上不知道怎么归类,向上不能够划归应用,往下又不能归入操作系统,于是就把它归入了中间件,如此中间件的概念更加扩大了。目前,市场上对于中间件,各家的说法不一,客观上也导致了理解上的复杂性。

如今,市场上又推出了很多新的概念,例如三层结构、构件、Web服务,其中风头最劲的当属SOA(面向服务的架构)。实际上,他们都不是一个产品,而是一种技术的实现方法,是开发一个软件的一种方法论。我们知道,最早软件开发方法就是编程、写代码的,其缺点在于无法复用,为此提出了构件化的软件开发方法,通过把编程中一些常用功能进行封装,并规范统一接口,供其它程序调用,例如我们开发一个新软件,可能要用到构件1、构件2、构件3,那么,我们只要对其进行本地组装,就可以得到我们想要的应用软件。在互联网得到普及重视之后,软件开发方法在构件化基础上又有新发展,核心思想是软件并不需要囊括构件,所需要的仅仅是构件的运行结果,例如编写一个通信传输软件,就可以到网上寻找构件,并提出服务请求,得到结果后返回,而不需要下载构件并打包,这就是现在所说的SOA。想要现实SOA,就要规范构件接口,同时还要规范构件所提交的服务结果,如此,新的软件开发的思想才能够行的通。但SOA并不是一个产品,而是一种思想方法,而实现这种方法的基础,如今看来只有中间件。

那么,到底什么才是中间件,什么不是中间件?从东方通科技的观点看,中间件应该具备两个关键特征:首先要为上层的应用层服务,这是一个基本条件;此外,又必须连接到操作系统的层面,并却保持运行工作状态,具备了这样两个特征才能称为中间件。现在很多人把开发工具也称为中间件是不合适的,因为开发工具开发出来的软件,并不依赖开发工具与底层操作系统连接。

 

中间件的优点及其应用

传统的客户/服务器模式是一种双层的结构,通常是一台个人计算机做客户机使用(运行客户端程序),另外一台服务器用于存放后台的数据库系统,应用程序可客户端直接相连,中间没有其他的逻辑。程序的业务逻辑则一般存在于前台的应用程序中,即程序员根据客户的业务要求定制客户端程序,这种定制的程序没有通用性。或者业务逻辑也存在于后台数据库中,以触发器(trigger)的方式实现。这种方式有一个很大的缺点,就是一旦客户的业务逻辑有所改变的话,将引起应用程序的修改以及后台触发器的修改,将所有程序模块都重新修改、编译、连接的工作量是相当大的。另外由于这种结构将用户界面和业务逻辑以及数据源绑定在一起,会消耗客户机的大量资源,对客户机来说是一个很大的负担。

  为了克服由于传统客户/服务器模型的这些缺陷给系统应用带来的影响,一种新的结构出现了,这就是三层(N层)客户/服务器模型。三层客户/服务器结构构建了一种分割式的应用程序。系统对应用程序进行分割后,划分成不同的逻辑组件,主要分为三层:

  用户服务层:提供信息浏览,服务定位。主要是实现用户界面,并保证用户界面的友好性、统一性。

  业务处理层:实现客户的全部业务逻辑。

  数据服务层:实现数据定义、存储、备份、检索等功能,主要有数据库系统实现。

这三个层次共同组成应用系统。使用这种模型,可以将系统需求划分成可以明确定义的服务,例如事务服务、名字服务等。将这些服务以组件的形式实现,一个组件可以实现系统中的一种或者多种服务,是这些服务的物理封装。根据系统的功能、性能等各方面的需求,系统管理员可以在网络上灵活的部署这些组件。并且根据业务的改动可以灵活的对这些服务组件进行修改,而不影响其它的组件,从而降低维护的费用。

  另外,这些组件应该做成通用的,基于某一标准接口的,所以它们可以被重用,其他应用程序可以使用它们提供的应用程序接口调用组件,完成所需的操作。

  这就是基于ORB的中间件模型。这种模型完全克服了传统的客户/服务器模型的缺点,具有可重用性、灵活性、可管理性、易维护性等一系列优良的特性。目前对ORB及其支撑环境--应用程序服务器的研究正是如火如荼,感兴趣的朋友想进一步了解,可以查阅相关文献和资料。

  基于ORB的中间件模型虽然在性能上非常优异,但是目前在国内的应用远远没有达到普及的程度,应用最广泛的是基于Web数据库的中间件技术。下面进行一些探讨。

  数据库中间件的工作原理示意图如下: 

中间件的优点及其应用(图一)

数据库中间件连接客户端程序(通常是应用程序)可数据库,为用户提供可靠便捷的数据库访问。举一个简单的例子:在一个局域网环境下,使用Delphi编写客户端应用程序,后台数据库使用Ms NT4 +SQL Server,在Delphi中,通过ODBC或者BDE连接到后台数据库。在此ODBC就是一种标准的数据库中间件,它是Windows操作系统自带的服务。BDE(Borland Database Engine)不是中间件,因为程序员虽然可以通过BDE和后台数据库相连,但是实际上BDE还是要通过ODBC的。后面提到的Web环境下的JDBC和ODBC类似,也是操作系统提供的标准数据库中间件。


  这是一种传统的结构,这种结构有很多不足之处,例如有很"胖"的客户端,从而造成系统的可扩展性差等。我们要重点介绍的是基于Web的数据库中间件。下面是它的工作原理图:

中间件的优点及其应用(图二)

这是目前得到广泛应用的一种标准结构。在这种结构中,用户使用标准的浏览器(如微软公司的IE)通过Internet和http协议访问服务方提供的Web服务器,Web服务器分析用户浏览器提出的请求,如果是页面请求,则直接用http协议向用户返回要浏览的页面。如果有数据库查询操作的请求(当然也包括修改、添加记录等),则将这个需求传递给Web服务器和数据库之间的中间件,这个中间件当然不是odbc了,由中间件再向数据库系统提出操作请求,得到结果后再返回给Web服务器,Web服务器把数据库操作的结果形成html页面,再返回给浏览器。




 

附录:

部分实现了中间件的公司,有兴趣要研究一下:

http://www.qqread.com/other-devtool/g882104002.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值