一、ؓ什么要中间?/strong>
计算机技术迅速发展。从g技术看QCPU速度来高Q处理能力越来越强;从Y件技术看Q应用程序的规模不断扩大Q特别是Internet及WWW的出玎ͼ使计机的应用范围更为广阔,许多应用E序需在网l环境的异构q_上运行。这一切都Ҏ一代的软g开发提Z新的需求。在q种分布异构环境中,通常存在多种gpȝq_(如PCQ工作站Q小型机{?Q在q些gq_上又存在各种各样的系lY?如不同的操作pȝ、数据库、语a~译器等)Q以及多U风格各异的用户界面Q这些硬件系l^台还可能采用不同的网l协议和|络体系l构q接。如何把q些pȝ集成hq开发新的应用是一个非常现实而困隄问题?br />
二、什么是中间?/strong>
军_布异构问题,Z提出了中间g(middleware)的概c中间g是位于^?g和操作系l?和应用之间的通用服务Q如?所C,q些服务h标准的程序接口和协议。针对不同的操作pȝ和硬件^収ͼ它们可以有符合接口和协议规范的多U实现?br />
? 中间?/p>
? 事务处理监控
也许很难l中间g一个严格的定义Q但中间件应h如下的一些特点:
满大量应用的需?br />
q行于多U硬件和OSq_
支持分布计算Q提供跨|络、硬件和OSq_的透明性的应用或服务的交互
支持标准的协?br />
支持标准的接?br />
׃标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成ؓ许多标准化工作的主要部分。对于应用Y件开发,中间件远比操作系l和|络服务更ؓ重要Q中间g提供的程序接口定义了一个相对稳定的高层应用环境Q不底层的计算机硬件和pȝ软g怎样更新换代Q只要将中间件升U更斎ͼq保持中间g对外的接口定义不变,应用软g几乎不需M修改Q从而保护了企业在应用Y件开发和l护中的重大投资?br />
三、主要中间g的分c?/strong>
中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间g产品。但至今中间件还没有一个比较精的定义Q因此,在不同的角度或不同的层次上,对中间g的分cM会有所不同。由于中间g需要屏蔽分布环境中异构的操作系l和|络协议Q它必须能够提供分布环境下的通讯服务Q我们将q种通讯服务UC为^台。基于目的和实现机制的不同,我们^台分Z下主要几c:
q程q程调用QRemote Procedure CallQ?br />
面向消息的中间gQMessage-Oriented MiddlewareQ?br />
对象h代理QObject Request BrokersQ?br />
它们可向上提供不同Ş式的通讯服务Q包括同步、排队、订阅发布、广播等{,在这些基本的通讯q_之上Q可构筑各种框架Qؓ应用E序提供不同领域内的服务Q如事务处理监控器、分布数据访问、对象事务管理器OTM{。^Cؓ上层应用屏蔽了异构^台的差异Q而其上的框架又定义了相应领域内的应用的系l结构、标准的服务lg{,用户只需告诉框架所兛_的事Ӟ然后提供处理q些事g的代码。当事g发生Ӟ框架则会调用用户的代码。用户代码不用调用框Ӟ用户E序也不必关心框架结构、执行流E、对pȝUAPI的调用等Q所有这些由框架负责完成。因此,Z中间件开发的应用h良好的可扩充性、易理性、高可用性和可移植性?br />
下面Q针对几cM要的中间件分别加以简要的介绍?br />
1、远E过E调?br />
q程q程调用是一U广泛用的分布式应用程序处理方法。一个应用程序用RPC?#8220;q程”执行一个位于不同地址I间里的q程Qƈ且从效果上看和执行本地调用相同。事实上Q一个RPC应用分ؓ两个部分Qserver和client。server提供一个或多个q程q程Qclient向server发出q程调用。server和client可以位于同一台计机Q也可以位于不同的计机Q甚臌行在不同的操作系l之上。它们通过|络q行通讯。相应的stub和运行支持提供数据{换和通讯服务Q从而屏蔽不同的操作pȝ和网l协议。在q里RPC通讯是同步的。采用线E可以进行异步调用?br />
在RPC模型中,client和server只要具备了相应的RPC接口Qƈ且具有RPCq行支持Q就可以完成相应的互操作Q而不必限制于特定的server。因此,RPC为client/server分布式计提供了有力的支持。同Ӟq程q程调用RPC所提供的是Zq程的服务访问,client与serverq行直接q接Q没有中间机构来处理hQ因此也h一定的局限性。比如,RPC通常需要一些网l细节以定位serverQ在client发出h的同Ӟ要求server必须是活动的{等?br />
2、面向消息的中间?br />
MOM指的是利用高效可靠的消息传递机制进行^台无关的数据交流QƈZ数据通信来进行分布式pȝ的集成。通过提供消息传递和消息排队模型Q它可在分布环境下扩展进E间的通信Qƈ支持多通讯协议、语a、应用程序、硬件和软gq_。目前流行的MOM中间件品有IBM的MQSeries、BEA的MessageQ{。消息传递和排队技术有以下三个
主要特点Q?br />
通讯E序可在不同的时间运行程序不在网l上直接怺通话Q而是间接地将消息攑օ消息队列Q因为程序间没有直接的联pR所以它们不必同时运行。消息放入适当的队列时Q目标程序甚x本不需要正在运行;即目标E序在运行,也不意味着要立卛_理该消息?br />
对应用程序的l构没有U束在复杂的应用场合中,通讯E序之间不仅可以是一对一的关p,q可以进行一对多和多对一方式Q甚x上述多种方式的组合。多U通讯方式的构造ƈ没有增加应用E序的复杂性?br />
E序与网l复杂性相隔离
E序消息放入消息队列或从消息队列中取出消息来进行通讯Q与此关联的全部zdQ比如维护消息队列、维护程序和队列之间的关pR处理网l的重新启动和在|络中移动消息等是MOM的Q务,E序不直接与其它E序通话Qƈ且它们不涉及|络通讯的复杂性?br />
3、对象请求代?br />
随着对象技术与分布式计技术的发展Q两者相互结合Ş成了分布对象计算Qƈ发展为当今Y件技术的L方向?990q底Q对象管理集团OMG首次推出对象理l构OMA(Object Management Architecture)Q对象请求代理(Object Request BrokerQ是q个模型的核心组件。它的作用在于提供一个通信框架Q透明地在异构的分布计环境中传递对象请求。CORBA规范包括了ORB的所有标准接口?991q推出的CORBA 1.1 定义了接口描q语aOMG IDL和支持Client/Server对象在具体的ORB上进行互操作的API。CORBA 2.0 规范描述的是不同厂商提供的ORB之间的互操作?br />
对象h代理(ORB)是对象ȝQ它在CORBA规范中处于核心地位,定义异构环境下对象透明地发送请求和接收响应的基本机Ӟ是徏立对象之间client/server关系的中间g。ORB使得对象可以透明地向其他对象发出h或接受其他对象的响应Q这些对象可以位于本C可以位于q程机器。ORB拦截h调用Qƈ负责扑ֈ可以实现h的对象、传送参数、调用相应的Ҏ、返回结果等。client对象q不知道同server对象通讯、激zL存储server对象的机Ӟ也不必知道server对象位于何处、它是用何种语言实现的、用什么操作系l或其他不属于对象接口的pȝ成分?br />
值得指出的是client和server角色只是用来协调对象之间的相互作用,Ҏ相应的场合,ORB上的对象可以是clientQ也可以是serverQ甚臛_有两者。当对象发出一个请求时Q它是处于client角色Q当它在接收hӞ它就处于server角色。大部分的对象都是既扮演client角色又扮演server角色。另外由于ORB负责对象h的传送和server的管理,client和server之间q不直接q接Q因此,与RPC所支持的单U的Client/Serverl构相比QORB可以支持更加复杂的结构?br />
4、事务处理监?br />
事务处理监控QTransaction processing monitorsQ最早出现在大型ZQؓ其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展Q分布应用系l对大规模的事务处理提出了需求,比如商业zd中大量的关键事务处理。事务处理监控界于client和server之间Q进行事务管理与协调、负载^衡、失败恢复等Q以提高pȝ的整体性能。它可以被看作是事务处理应用E序?#8220;操作pȝ”。M上来_事务处理监控有以下功能:
q程理Q包括启动serverq程、ؓ其分配Q务、监控其执行q对负蝲q行q?br />
事务理Q即保证在其监控下的事务处理的原子性、一致性、独立性和持久性?br />
通讯理Qؓclient和server之间提供了多U通讯机制Q包括请求响应、会话、排队、订阅发布和q播{?br />
事务处理监控能够为大量的client提供服务Q比如飞机定系l。如果server为每一个client都分配其所需要的资源的话Q那server不堪重负(如图2所C)。但实际上,在同一时刻q不是所有的client都需要请求服务,而一旦某个clienth了服务,它希望得到快速的响应。事务处理监控在操作pȝ之上提供一l服务,对clienthq行理qؓ其分配相应的服务q程Qserver在有限的pȝ资源下能够高效地为大规模的客h供服务?br />
四、面临的一些问?/strong>
中间件能够屏蔽操作系l和|络协议的差异,为应用程序提供多U通讯机制Qƈ提供相应的^C满不同领域的需要。因此,中间件ؓ应用E序了一个相对稳定的高层应用环境。然而,中间件服务也q“万能?#8221;。中间g所应遵循的一些原则离实际q有很大距离。多数流行的中间件服务用专有的API和专有的协议Q得应用徏立于单一厂家的品,来自不同厂家的实现很难互操作。有些中间g服务只提供一些^台的实现Q从而限制了应用在异构系l之间的UL。应用开发者在q些中间件服务之上徏立自q应用q要承担相当大的风险Q随着技术的发展他们往往q需重写他们的系l。尽中间g服务提高了分布计的抽象化程度,但应用开发者还需面许多艰难的设计选择Q例如,开发者还需军_分布应用在client方和server方的功能分配。通常表C服务放在client以方便用显C备,数据服务放在server以靠q数据库Q但也ƈ非L如此Q何况其它应用功能如何分配也是不Ҏ定的?/p>
]]>