﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Asktalk-文章分类-商业中间件</title><link>http://www.blogjava.net/asktalk/category/31897.html</link><description>&lt;span class="STYLE3"&gt;天行健，君子以自强不息！&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 01 Jun 2008 16:36:31 GMT</lastBuildDate><pubDate>Sun, 01 Jun 2008 16:36:31 GMT</pubDate><ttl>60</ttl><item><title>中间件</title><link>http://www.blogjava.net/asktalk/articles/205226.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sun, 01 Jun 2008 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/articles/205226.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/205226.html</wfw:comment><comments>http://www.blogjava.net/asktalk/articles/205226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/205226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/205226.html</trackback:ping><description><![CDATA[<font face="Verdana">中间件（middleware）是一种独立的系统软件或服务程序，分布式应用软件借助这种软件在不同的技术之间共享资源，中间件位于客户机服务器的操作系统之上，管理计算资源和网络通信。</font>中间件（middleware）是基础软件的一大类，属于可复用软件的范畴。顾名思义，中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上，应用软件的下层，总的作用是为处于自己上层的应用软件提供运行与开发的环境，帮助用户灵活、高效地开发和集成复杂的应用软件。<br />
<br />
<p><font face="Verdana"><strong>一、中间件的历史</strong></font></p>
<p><font face="Verdana">最早具有中间件技术思想及功能的软件是IBM的CICS，但由于CICS不是分布式环境的产物，因此人们一般把Tuxedo作为第一个严格意义上的中间件产品。Tuxedo是1984年在当时属于AT&amp;AMp;&amp;T的贝尔实验室开发完成的，但由于分布式处理当时并没有在商业应用上获得像今天一样的成功，Tuxedo在很长一段时期里只是实验室产品，后来被Novell收购，在经过Novell并不成功的商业推广之后，1995年被现在的BEA公司收购。尽管中间件的概念很早就已经产生，但中间件技术的广泛运用却是在最近10年之中。BEA公司1995年成立后收购Tuxedo才成为一个真正的中间件厂商，IBM的中间件MQSeriES也是90年代的产品，其它许多中间件产品也都是最近几年才成熟起来。</font></p>
<p><strong>二、为什么要中间件</strong></p>
<p>&nbsp;&nbsp;&nbsp; 计算机技术迅速发展。从硬件技术看，CPU速度越来越高，处理能力越来越强；从软件技术看，应用程序的规模不断扩大，特别是Internet及WWW的出现，使计算机的应用范围更为广阔，许多应用程序需在网络环境的异构平台上运行。这一切都对新一代的软件开发提出了新的<a href="http://www.itisedu.com/phrase/200603101518295.html" target="_new">需求</a>。在这种分布异构环境中，通常存在多种硬件系统平台(如PC，工作站，小型机等)，在这些硬件平台上又存在各种各样的系统软件(如不同的操作系统、数据库、语言编译器等)，以及多种风格各异的用户界面，这些硬件系统平台还可能采用不同的网络协议和网络<a href="http://www.itisedu.com/phrase/200603122156385.html" target="_new">体系结构</a>连接。如何把这些系统集成起来并开发新的应用是一个非常现实而困难的问题。<br />
&nbsp;<br />
<strong>三、主要中间件的分类</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Verdana">中间件分类（IDC的分类）：大致可分为六类:终端仿真/屏幕转换中间件、数据访问中间件、<a href="http://www.itisedu.com/phrase/200604241405415.html" target="_new">远程过程调用</a>中间件、<a href="http://www.itisedu.com/phrase/200603090938465.html" target="_new">消息</a>中间件、交易中间件、<a href="http://www.itisedu.com/phrase/200603090845215.html" target="_new">对象</a>中间件。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中间件所包括的范围十分广泛，针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义，因此，在不同的角度或不同的层次上，对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议，它必须能够提供分布环境下的通讯服务，我们将这种通讯服务称之为平台。基于目的和实现机制的不同，我们将平台分为以下主要几类：</p>
<p>&nbsp;&nbsp;&nbsp; 远程过程调用中间件（Remote Procedure Call）<br />
&nbsp;&nbsp;&nbsp; 面向消息的中间件（MesSAge-Oriented Middleware）<br />
&nbsp;&nbsp;&nbsp; 对象请求代理中间件（<a href="http://www.itisedu.com/phrase/200604231338435.html" target="_new">object</a> RequeST Brokers）</p>
<p>&nbsp;&nbsp;&nbsp; 它们可向上提供不同形式的通讯服务，包括同步、排队、订阅发布、广播等等，在这些基本的通讯平台之上，可构筑各种<a href="http://www.itisedu.com/phrase/200603061723295.html" target="_new">框架</a>，为应用程序提供不同领域内的服务，如事务处理监控器、分布数据访问、对象事务管理器OTM等。平台为上层应用屏蔽了异构平台的差异，而其上的框架又定义了相应领域内的应用的系统结构、标准的服务<a href="http://www.itisedu.com/phrase/200603302222545.html" target="_new">组件</a>等，用户只需告诉框架所关心的事件，然后提供处理这些事件的代码。当事件发生时，框架则会调用用户的代码。用户代码不用调用框架，用户程序也不必关心框架结构、执行流程、对系统级<a href="http://www.itisedu.com/phrase/200604241228185.html" target="_new">API</a>的调用等，所有这些由框架负责完成。因此，基于中间件开发的应用具有良好的可扩充性、易管理性、高可用性和可移植性。</p>
<p>&nbsp;&nbsp;&nbsp; 下面，针对几类主要的中间件分别加以简要的介绍。</p>
<p>1、远程过程调用</p>
<p>&nbsp;&nbsp;&nbsp; 远程过程调用是一种广泛使用的分布式应用程序处理方法。一个应用程序使用RPC来&#8220;远程&#8221;执行一个位于不同地址空间里的过程，并且从效果上看和执行本地调用相同。事实上，一个RPC应用分为两个部分：server和<a href="http://www.itisedu.com/phrase/200604231337375.html" target="_new">Client</a>。server提供一个或多个远程过程；client向server发出远程调用。server和client可以位于同一台计算机，也可以位于不同的计算机，甚至运行在不同的操作系统之上。它们通过网络进行通讯。相应的stub和运行支持提供数据转换和通讯服务，从而屏蔽不同的操作系统和网络协议。在这里RPC通讯是同步的。采用<a href="http://www.itisedu.com/phrase/200603091754305.html" target="_new">线程</a>可以进行异步调用。</p>
<p>&nbsp;&nbsp;&nbsp; 在RPC模型中，client和server只要具备了相应的RPC接口，并且具有RPC运行支持，就可以完成相应的互操作，而不必限制于特定的server。因此，RPC为client/server分布式计算提供了有力的支持。同时，远程过程调用RPC所提供的是基于过程的服务访问，client与server进行直接连接，没有中间机构来处理请求，因此也具有一定的局限性。比如，RPC通常需要一些网络细节以定位server；在client发出请求的同时，要求server必须是活动的等等。</p>
<p>2、面向消息的中间件</p>
<p>&nbsp;&nbsp;&nbsp; MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流，并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型，它可在分布环境下扩展进程间的通信，并支持多通讯协议、语言、应用程序、硬件和软件平台。目前流行的MOM中间件产品有IBM的MQSeries、BEA的MessageQ等。消息传递和排队技术有以下三个</p>
<p>&nbsp;&nbsp;&nbsp; 主要特点：<br />
&nbsp;&nbsp;&nbsp; 通讯程序可在不同的时间运行 程序不在网络上直接相互通话，而是间接地将消息放入消息队列，因为程序间没有直接的联系。所以它们不必同时运行。消息放入适当的队列时，目标程序甚至根本不需要正在运行；即使目标程序在运行，也不意味着要立即处理该消息。</p>
<p>&nbsp;&nbsp;&nbsp; 对应用程序的结构没有约束 在复杂的应用场合中，通讯程序之间不仅可以是一对一的关系，还可以进行一对多和多对一方式，甚至是上述多种方式的组合。多种通讯方式的构造并没有增加应用程序的复杂性。</p>
<p>&nbsp;&nbsp;&nbsp; 程序与网络复杂性相隔离<br />
&nbsp;&nbsp;&nbsp; 程序将消息放入消息队列或从消息队列中取出消息来进行通讯，与此关联的全部活动，比如维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务，程序不直接与其它程序通话，并且它们不涉及网络通讯的复杂性。</p>
<p>3、对象请求代理</p>
<p>&nbsp;&nbsp;&nbsp; 随着对象技术与分布式计算技术的发展，两者相互结合形成了分布对象计算，并发展为当今软件技术的主流方向。1990年底，对象管理集团OMG首次推出对象管理结构OMA(ObjECt Management <a href="http://www.itisedu.com/phrase/200604241327575.html" target="_new">Architecture</a>)，对象请求代理（Object Request Broker）是这个模型的核心组件。它的作用在于提供一个通信框架，透明地在异构的分布计算环境中传递对象请求。<a href="http://www.itisedu.com/phrase/200604031336425.html" target="_new">CORBA</a>规范包括了ORB的所有标准接口。1991年推出的CORBA 1.1 定义了接口描述语言OMG IDL和支持Client/Server对象在具体的ORB上进行互操作的API。CORBA 2.0 规范描述的是不同厂商提供的ORB之间的互操作。</p>
<p>&nbsp;&nbsp;&nbsp; 对象请求代理(ORB)是对象总线，它在CORBA规范中处于核心地位，定义异构环境下对象透明地发送请求和接收响应的基本机制，是建立对象之间client/server关系的中间件。ORB使得对象可以透明地向其他对象发出请求或接受其他对象的响应，这些对象可以位于本地也可以位于远程机器。ORB拦截请求调用，并负责找到可以实现请求的对象、传送参数、调用相应的方法、返回结果等。client对象并不知道同server对象通讯、激活或存储server对象的机制，也不必知道server对象位于何处、它是用何种语言实现的、使用什么操作系统或其他不属于对象接口的系统成分。</p>
<p>&nbsp;&nbsp;&nbsp; 值得指出的是client和server角色只是用来协调对象之间的相互作用，根据相应的场合，ORB上的对象可以是client，也可以是server，甚至兼有两者。当对象发出一个请求时，它是处于client角色；当它在接收请求时，它就处于server角色。大部分的对象都是既扮演client角色又扮演server角色。另外由于ORB负责对象请求的传送和server的管理，client和server之间并不直接连接，因此，与RPC所支持的单纯的<a href="http://www.itisedu.com/phrase/200604291147015.html" target="_new">Client/Server结构</a>相比，ORB可以支持更加复杂的结构。</p>
<p>4、事务处理监控</p>
<p>&nbsp;&nbsp;&nbsp; 事务处理监控（Transaction processing monitors）最早出现在大型机上，为其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展，分布应用系统对大规模的事务处理提出了需求，比如商业活动中大量的关键事务处理。事务处理监控界于client和server之间，进行事务管理与协调、负载平衡、失败恢复等，以提高系统的整体性能。它可以被看作是事务处理应用程序的&#8220;操作系统&#8221;。总体上来说，事务处理监控有以下功能：</p>
<p>&nbsp;&nbsp;&nbsp; 进程管理，包括启动server进程、为其分配任务、监控其执行并对负载进行平衡。<br />
&nbsp;&nbsp;&nbsp; 事务管理，即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。<br />
&nbsp;&nbsp;&nbsp; 通讯管理，为client和server之间提供了多种通讯机制，包括请求响应、会话、排队、订阅发布和广播等。<br />
&nbsp;&nbsp;&nbsp; 事务处理监控能够为大量的client提供服务，比如飞机定票系统。如果server为每一个client都分配其所需要的资源的话，那server将不堪重负（如图2所示）。但实际上，在同一时刻并不是所有的client都需要请求服务，而一旦某个client请求了服务，它希望得到快速的响应。事务处理监控在操作系统之上提供一组服务，对client请求进行管理并为其分配相应的服务进程，使server在有限的系统资源下能够高效地为大规模的客户提供服务。&nbsp;<br />
</p>
<br />
<br />
原文参考：<a href="http://www.itisedu.com/phrase/200604241155005.html">http://www.itisedu.com/phrase/200604241155005.html</a><br />
<img src ="http://www.blogjava.net/asktalk/aggbug/205226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2008-06-01 23:46 <a href="http://www.blogjava.net/asktalk/articles/205226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>