1、为何要中间件
计算机技术迅速发展。从硬件技术看,CPU速度愈来愈高,处理能力愈来愈强;从软件技术看,应用程序的规模不断扩大,特别是Internet及WWW的出现,使计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。这一切都对新一代的软件开发提出了新的需求。在这种分布异构环境中,一般存在多种硬件系统平台(如PC,工做站,小型机等),在这些硬件平台上又存在各类各样的系统软件(如不一样的操做系统、数据库、语言编译器等),以及多种风格各异的用户界面,这些硬件系统平台还可能采用不一样的网络协议和网络体系结构链接。如何把这些系统集成起来并开发新的应用是一个很是现实而困难的问题。
2、什么是中间件
为解决分布异构问题,人们提出了中间件(middleware)的概念。中间件是位于平台(硬件和操做系统)和应用之间的通用服务,如图1所示,这些服务具备标准的程序接口和协议。针对不一样的操做系统和硬件平台,它们能够有符合接口和协议规范的多种实现。
图1 中间件
也许很难给中间件一个严格的定义,但中间件应具备以下的一些特色:
知足大量应用的须要
运行于多种硬件和OS平台
支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互
支持标准的协议
支持标准的接口
因为标准接口对于可移植性和标准协议对于互操做性的重要性,中间件已成为许多标准化工做的主要部分。对于应用软件开发,中间件远比操做系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,无论底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资。
3、主要中间件的分类
中间件所包括的范围十分普遍,针对不一样的应用需求涌现出多种各具特点的中间件产品。但至今中间件尚未一个比较精确的定义,所以,在不一样的角度或不一样的层次上,对中间件的分类也会有所不一样。因为中间件须要屏蔽分布环境中异构的操做系统和网络协议,它必须可以提供分布环境下的通信服务,咱们将这种通信服务称之为平台。基于目的和实现机制的不一样,咱们将平台分为如下主要几类:
远程过程调用(Remote Procedure Call)
面向消息的中间件(Message-Oriented Middleware)
对象请求代理(Object Request Brokers)
它们可向上提供不一样形式的通信服务,包括同步、排队、订阅发布、广播等等,在这些基本的通信平台之上,可构筑各类框架,为应用程序提供不一样领域内的服务,如事务处理监控器、分布数据访问、对象事务管理器OTM等。平台为上层应用屏蔽了异构平台的差别,而其上的框架又定义了相应领域内的应用的系统结构、标准的服务组件等,用户只需告诉框架所关心的事件,而后提供处理这些事件的代码。当事件发生时,框架则会调用用户的代码。用户代码不用调用框架,用户程序也没必要关心框架结构、执行流程、对系统级API的调用等,全部这些由框架负责完成。所以,基于中间件开发的应用具备良好的可扩充性、易管理性、高可用性和可移植性。
下面,针对几类主要的中间件分别加以简要的介绍。
一、远程过程调用
远程过程调用是一种普遍使用的分布式应用程序处理方法。一个应用程序使用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必须是活动的等等。
二、面向消息的中间件
MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通讯来进行分布式系统的集成。经过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通讯,并支持多通信协议、语言、应用程序、硬件和软件平台。目前流行的MOM中间件产品有IBM的MQSeries、BEA的MessageQ等。消息传递和排队技术有如下三个
主要特色:
通信程序可在不一样的时间运行程序不在网络上直接相互通话,而是间接地将消息放入消息队列,由于程序间没有直接的联系。因此它们没必要同时运行。消息放入适当的队列时,目标程序甚至根本不须要正在运行;即便目标程序在运行,也不意味着要当即处理该消息。
对应用程序的结构没有约束在复杂的应用场合中,通信程序之间不只能够是一对一的关系,还能够进行一对多和多对一方式,甚至是上述多种方式的组合。多种通信方式的构造并无增长应用程序的复杂性。
程序与网络复杂性相隔离
程序将消息放入消息队列或从消息队列中取出消息来进行通信,与此关联的所有活动,好比维护消息队列、维护程序和队列之间的关系、处理网络的从新启动和在网络中移动消息等是MOM的任务,程序不直接与其它程序通话,而且它们不涉及网络通信的复杂性。
三、对象请求代理
随着对象技术与分布式计算技术的发展,二者相互结合造成了分布对象计算,并发展为当今软件技术的主流方向。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能够支持更加复杂的结构。
四、事务处理监控
事务处理监控(Transaction processing monitors)最先出如今大型机上,为其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展,分布应用系统对大规模的事务处理提出了需求,好比商业活动中大量的关键事务处理。事务处理监控界于client和server之间,进行事务管理与协调、负载平衡、失败恢复等,以提升系统的总体性能。它能够被看做是事务处理应用程序的“操做系统”。整体上来讲,事务处理监控有如下功能:
进程管理,包括启动server进程、为其分配任务、监控其执行并对负载进行平衡。
事务管理,即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。
通信管理,为client和server之间提供了多种通信机制,包括请求响应、会话、排队、订阅发布和广播等。
事务处理监控可以为大量的client提供服务,好比飞机定票系统。若是server为每个client都分配其所须要的资源的话,那server将不堪重负(如图2所示)。但实际上,在同一时刻并非全部的client都须要请求服务,而一旦某个client请求了服务,它但愿获得快速的响应。事务处理监控在操做系统之上提供一组服务,对client请求进行管理并为其分配相应的服务进程,使server在有限的系统资源下可以高效地为大规模的客户提供服务。
图2 事务处理监控
4、面临的一些问题 中间件可以屏蔽操做系统和网络协议的差别,为应用程序提供多种通信机制;并提供相应的平台以知足不一样领域的须要。所以,中间件为应用程序了一个相对稳定的高层应用环境。然而,中间件服务也并不是“万能药”。中间件所应遵循的一些原则离实际还有很大距离。多数流行的中间件服务使用专有的API和专有的协议,使得应用创建于单一厂家的产品,来自不一样厂家的实现很难互操做。有些中间件服务只提供一些平台的实现,从而限制了应用在异构系统之间的移植。应用开发者在这些中间件服务之上创建本身的应用还要承担至关大的风险,随着技术的发展他们每每还需重写他们的系统。尽管中间件服务提升了分布计算的抽象化程度,但应用开发者还需面临许多艰难的设计选择,例如,开发者还需决定分布应用在client方和server方的功能分配。一般将表示服务放在client以方便使用显示设备,将数据服务放在server以靠近数据库,但也并不是老是如此,况且其它应用功能如何分配也是不容易肯定的。