应用中间件(Application Middleware),又名
中间件,一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
软件简介
中间件(middleware)一词每天都被不同的人群所提及,中间件的产品也大量出现在软件市场,但中间件的定义却一直比较模糊,导致中间件的分类也不很统一。也许正因为如此,才使人们不断地设计和开发新的产品,并冠以中间件的标签,推动着中间件的内涵和市场不断地向前发展。
我们试图给出中间件的一个定义。所谓中间件,就是位于操作系统和应用软件之间的一个软件层,它向各种应用软件提供服务,使不同的应用进程能在屏蔽掉平台差异的情况下,通过网络互相通信。通常,在实际使用中,把一组中间件集成在一起构成一个平台(包括开发平台和运行平台),其中必须要有一个通信中间件完成中间件之间的通信。从这个意义上讲,中间件应包括平台和通信两个部分。
中间件的思想其实并不复杂。假设我们有n个应用,m个操作系统,为了使所有的应用在所有的操作系统上都能工作,就可能需要n×m个接口。而且,每引入一个新的操作系统,就要重新改写n个应用的源代码;每开发一个新的应用,就要考虑实现m个不同的版本,以工作于m个操作系统之上。
中间件使这一切变得简单。开发应用程序时不必再关心底层操作系统的类型,而只需专心于应用的逻辑处理(当然,这只是一种理想状况)。
中间件的引入使原来的网状接口类型变成了沙漏状接口类型。接口数目从n×m降到了n+m。当n和m都很小的情况下,这种差异并不明显,但随着n和m不断地增大(正如现实世界正在发生的那样),这种差异将极大地增加开发应用软件的困难,并降低系统整体运行的效率和性能。因此,中间件的出现是分布式系统发展的产物,是软件构架演进的必然。
发展历程
80年代后期基于客户/服务器的系统设计理念的出现为多用户系统提供了前所未有的双向交互性和灵活性。客户/服务器系统结构是把
图形用户界面和大部分应用逻辑放在客户机上运行,通过将SQL请求送往运行在服务器上的数据库,对数据进行访问。其最大的优点在于系统结构简单;只要将客户机和服务器通过网络联通,利用一些快速应用开发工具就可以很快地开发出一些部门级的小规模应用。但是,随着信息技术的发展,这种系统结构的缺陷也逐渐显现出来。
首先,进入90年代中期,信息技术迅猛发展,CPU的处理能力越来越强,网络的应用日益普及,软件应用的规模和范围无限拓展,许多应用程序需在网络环境的异构平台上运行。在这种异构的环境中,不但存在多种硬件系统平台,而且包括运行在这些硬件平台上的各种系统软件以及风格迥异的用户界面,这些硬件系统平台还可能采用不同的网络协议和网络体系结构连接。由此带来的问题也越来越明显,如不同硬件平台、不同网络环境、不同数据库之间的互操作问题,多种应用模式并存、系统效率过低、传输不可靠、数据加密、开发周期过长等等。单纯依赖传统的系统软件或工具软件提供的功能已无法满足要求。
其次,当客户/服务器方式应用逐渐推广到企业级的关键任务(Mission-Critical)环境,便出现了一些’lde题,如系统可扩展性差、解析度低、可管理性差、维护代价高、安全性差、系统间通讯功能较弱。
为了解决两层结构遇到的问题,人们提出了三层结构的系统设计概念。它把应用逻辑划分为三个部分;第一层是用户界面,提供用户与系统的友好交互;第二层是应用服务器,专司业务逻辑的实现;第三层是数据服务器,负责数据信息的存储、访问及其优化。其主要目的是产生一套切实可行的解决方案,把客户/服务器结构下的应用可靠地推广到企业级的关键任务环境中,并利用这一技术所带来的高效率、多功能与灵活性,增强企业在市场上的竞争能力。而中间件正是构造这种三层结构的基础。
所谓中间件就是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机/服务器的操作系统之上,管理计算资源和网络通信。我们可以将中间件理解成是处于应用软件和系统软件之间的一类软件,或者是独立于硬件或数据库厂商(处于其产品的中间,实现其互连)的一类软件,或者是客户方与服务器方之间的连接件,或者是需要进行二次开发的中间产品。其特点是能够满足大量应用的需要,可以运行于多种硬件和OS平台,支持分布计算,提供跨网络、硬件和OS平台的透明性。
中间件软件管理着客户端程序和数据库或者早期应用软件之间的通讯。中间件在分布式的客户和服务之间扮演着承上启下的角色,如事务管理、负荷平衡以及基于Web的计算等。利用这些技术有助于减轻应用软件开发者的负担,使他们在利用现有的硬件设备、操作系统、网络、数据库管理系统以及对象模型创建分布式应用软件时更加得心应手。
由于中间件产品在很大程度上简化了一个由不同硬件构成的分布式处理环境的复杂性,所以它正在日益引起用户的注意。面对广阔的市场,各个软件厂商纷纷推出自己的产品,群雄逐鹿的市场竞争局面逐渐形成。
早在1969年IBM就推出了专门用于事务处理的平台软件中间件技术作为软件行业新崛起的一个崭新的分支,正在全球范围内迅猛发展。
IDC的研究报告表明,1997年全球中间件市场的综合增长率为28%,销售额达到了17.16亿美元。到2002年,全球中间件产品市场的营业额将超过70亿美元。从市场情况看,到2000年,面向消息的中间件产品有望取代用于数据访问的中间件产品,而成为该市场最大的一部分,其次是分布式交易处理中间件产品,依旧牢牢地占据着主流的地位,IDC预测基于桌面访问的中间件产品的市场增长将在1999年达到最高峰-CICS,并将其很快推广到了许多操作系统平台,其服务器版本可运行在OS/390、MVS/ESA、VSE/ESA、OS/400、OS/2、Windows NT、Windows 95、Apple Mac、AlX、Solaris、HP-UX和Digital Unix上。
CICS经过了近30年的发展历史,其稳定性和可靠性早已千锤百炼,而且CICS几乎每年根据客户的需求变化和新技术的出现均有重大发展,例如CICS在1978年就支持了分布式
联机事务处理,CICS在近年来发展了对MQ Series、Lotus Notes、Internet和Java的支持。
CICS已经在金融、财税、运输、商业、服务、电力、电话等行业中得到广泛应用和推广,统计表明,在《幸福》杂志(Fortune)中排列世界前500家的公司,约有97%采用CICS作为其业务运行系统的平台。凭借多年的开发经验和对市场敏锐的洞察力,IBM公司在90年代及时调整其产品策略,将中间件产品作为其今后开发的重点之重点,并推出了面向消息的中间件产品—MQ Series,它能够保证数据稳定可靠传输而且无丢失或重发,可谓是工B冈“看家本领”之一。MQSeries是商业通讯中间件。它由一个信息传输系统和一个
应用程序接口组成,其资源是信息和队列(Messogjng and Queueing)。MQ应用程序可以通过使用一个简单而一致的应用程序编程接口来相互通信跨越具有不同处理器、操作系统、子系统和通讯协议的网络。它的功能是控制和管理一个集成的商业应用,使得组成这个商业应用的多个分支程序(模块)之间通过传递信息完成整个工作流程。
特点
中间件有几个非常重要的特征是必须具备的:
应用支撑
中间件的最终目的是解决上层应用系统的问题,而且也是软件技术发展到今天对应用软件提供最完善彻底的解决方案。现代面向服务的中间件在4个方面形成了很高地应用支撑能力,分别为软件的结构、模型、开发方法以及互操作,而要最终解决软件的灵活应变问题、效率问题、质量问题、互操作问题这四大问题,需要在软件技术的内在结构、架构层面进行思考。
耦合关系
中间件基于
SOA架构,在松耦和解耦过程中演变成了境界。而传统软件将软件之中核心三部分数据转换、网络连接和业务逻辑所有的都耦合在一个整体,产生为铁板一块的软件,然后动一点而动全身,这样的软件就很难适应市场的需求。而分布式对象技术可以分离连接逻辑,消息中间件异步处理连接逻辑,形成了很大的灵活性。中间件分离分布式对象与消息代理的数据转换。SOA架构以服务的封装,解耦实现了业务逻辑、数据转换与网络连接等。
互操作性
传统中间件在软件的互操作方面,通过标准化的API完成了同类系统之间的调用互操作,但是连接互操作离不开原有的特定的访问协议,比如CORBA用于的IIOP,JAVA用于的RMI等。而SOA以支持Internet、标准化及操作系统无关的SOAP协议完成了连接互操作。并且服务的封装一般使用XML协议,它有自定义及自解析的特性,因此基于SOA的中间件能够完成语义互操作。
软件复用
软件复用也称为软件的重用,是指在一定范围内不修改或者略有修改都属于重复使用。其实说白了其意思就是不断提升抽象级别,然后扩展复用的范围。最早使用的复用技术一般是子程序,自从发明子程序之后,人们就可以在不同系统之间进行软件复用。但子程序只是最原始的复用,因为这种复用范围只是在一个可执行程序内中的复用,静态开发期的复用,一旦子程序被修改,那么就需要重新对所有调用这个子程序的程序进行编译、测试以及发布。
平台化
我们所说的平台是指能够独立运行并且自主存在的,能支撑上层系统和应用提供运行所依赖的环境。显然,不是所有的系统或者应用都可以称之为平台的。中间件是一个平台,因此中间件是必须独立存在,它在操作的系统软件,为上层的网络应用系统提供一个运行支撑环境,同时围绕标准的接口与API来隔离系统,完成其独立,也就是平台性。总的来说,中间件在完整业务复用、灵活业务组织方面的发展趋势集中体现在服务化,其核心技术是提升IT基础设施的业务敏捷性。中间件因此将成为SOA的主要实现平台。
分类
中间件的作用简单来说就是试图通过屏蔽各种复杂的技术细节使技术问题简单化。具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。所以说中间件带给应用系统的,不只是开发的简便、开发周期的缩短,同时也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。其次,中间件作为新层次的基础软件,其重要作用是将不同时期、在不同操作系统上开发的应用软件集成起来,彼此像一个天衣无缝的整体协调工作,这是操作系统、数据库管理系统本身做不了的。目前,针对不同的应用涌现出各具特色的中间件产品。从不同的角度和层次对中间件有不同的分类。根据中间件在系统中所起的作用和采用的技术不同,可以把中间件大致划分为以下几种:
数据访问中间件(Data Access Middieware)
在分布式系统中,重要的数据都集中存放在数据服务器中,它们可以是关系型、复合文档型、具有各种存放格式的多媒体型,或者是经过加密或压缩存放的,数据访问中间件是在这种系统中建立数据应用资源互操作的模式,实现异构环境下的数据库联接或文件系统联接的中间件,从而为在网络上虚拟缓冲存取、格式转换、解压等带来方便。数据访问中间件在所有的中间件中是应用最广泛、技术最成熟的一种。一个最典型的例子就是ODBC,ODBC是一种基于数据库的中间件标准,它允许应用程序和本地或者异地的数据库进行通信,并提供了一系列的
应用程序接口API,当然,在多数情况下这些API都是隐藏在开发工具中,不被程序员直接使用。不过在数据访问中间件处理模型中,数据库是信息存贮的核心单元,中间件完成通信的功能,这种方式虽然是灵活的,但是并不适合于一些要求高性能处理的场合,因为它需要大量的数据通信,而且当网络发生故障时,系统将不能正常工作。
远程过程调用是另外一种形式的中间件,它在客户/服务器计算方面,比数据库中间件又迈进了一步。通过这种远程过程调用机制,程序员编写客户方的应用,需要时可以调用位于远端服务器上的过程。它的工作方式如下:当一个应用程序A需要与远程的另一个应用程序B交换信息或要求B提供协助时,A在本地产生一个请求,通过通讯链路通知B接收信息或提供相应的服务,B完成相关处理后将信息或结果返回给A。RPC的灵活特性使得它有比数据库中间件更广泛的应用,它可以应用在更复杂的客户/服务器计算环境中。远程过程调用的灵活性还体现在它的跨平台性方面,它不仅可以调用远端的子程序,而且这种调用是可以跨不同操作系统平台的,而程序员在编程时并不需要考虑这些细节。RPC也有一些缺点,主要是因为RPC一般用于应用程序之间的通信,而且采用的是同步通信方式,因此对于比较小型的简单应用还是比较适合的,因为这些应用通常不要求异步通信方式。但是对于一些大型的应用,这种方式就不是很适合了,因为此时程序员需要考虑网络或者系统故障,处理并发操作、缓冲、流量控制以及进程同步等一系列复杂问题。
面向消息中间件(MOM)
消息中间件能在不同平台之间通信,实现分布式系统中可靠的、高效的、实时的跨平台数据传输,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同;其优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比
远程过程调用更进一步的原因。另外消息中间件不会占用大量的网络带宽,可以跟踪事务,并且通过将事务存储到磁盘上实现网络故障时系统的恢复。当然和远程过程调用相比,消息中间件不支持程序控制的传递。消息中间件适用于需要在多个进程之间进行可靠的数据传送的分布式环境。它是中间件中唯一不可缺少的,也是销售额最大的中间件产品,目前在Windows2000操作系统中已包含了其部分功能。
面向对象的中间件
面向对象的中间件(Object Oriented Middieware)。当前开发大型应用软件通常采用基于组件技术,在分布系统中,还需要集成各节点上的不同系统平台上的组件或新老版本的组件;组件的含义通常指的是一组对象的集成,其种类有数百万种,但这些组件面临着缺乏标准而不能相互操作,各厂家的组件只能在各自的平台上运行。为此,连接这些组件环境的面向对象的中间件便应运而生。面向对象的中间件是对象技术和分布式计算发展的产物,它提供一种通讯机制,透明地在异构的分布计算环境中传递对象请求,而这些对象可以位于本地或者远程机器。在这些面向对象的中间件中,功能最强的是CORBA,可以跨任意平台,但是太庞大;JavaBeans较灵活简单,很适合于作浏览器,但运行效率差;DCOM模型主要适合Windows平台,已广泛使用。但是DCOM和CORBA这两种标准相互竞争,而且两者之间有很大的区别,这在一定程度上阻碍了面向对象中间件的标准化进程。当前国内新建系统实际上主要是UNIX(包括LINUX)和Windows,因此针对这两个平台建立标准的面向对象中间件是很有必要的。
事务处理中间件(TPM)
事务处理中间件是在分布、异构环境下提供保证交易完整性和
数据完整性的一种环境平台;它是针对复杂环境下分布式应用的速度和可靠性要求而实现的。它给程序员提供了一个事务处理的API,程序员可以使用这个程序接口编写高速而且可靠的
分布式应用程序——基于事务处理的应用程序。事务处理中间件向用户提供一系列的服务,如应用管理、管理控制、已经应用于程序间的消息传递等。常见的功能包括全局事务协调、事务的分布式两段提交(准备阶段和完成阶段)、资源管理器支持、故障恢复、高可靠性、网络负载平衡等等。
网络中间件
它包括网管、接入、网络测试、虚拟社区、虚拟缓冲等,也是当前研究的热点。
终端仿真/屏幕转换中间件
它的作用在于实现客户机图形用户接口与已有的字符接口方式的服务器应用程序之间的互操作。
发展趋势
软件构件化(Software Component)技术是在大工业生产启发下应运而生的,是软件技术跨世纪的一个发展趋势,其目的是彻底改变软件生产方式,从根本上提高软件生产的效率和质量,提高开发大型软件系统尤其是商用系统的成功率。有了软件构件之后,应用开发人员就可以利用现成的软件构件装配成适用于不同领域、功能各异的应用软件。复用软件一直是整个世界软件业所追求的梦想,软件构件化为实现这一梦想指出了一条切实可行的道路,而中间件正是构件化软件的一种形式。中间件抽象了典型的应用模式,应用软件制造者可以基于标准的形式进行开发,使软件构件化成为可能,加速了软件复用的进程。因此,中间件是符合软件发展的内在规律的。
中间件在十几年不断发展的历史中,为大型企业应用的建设起到了很大的作用。但是沉淀下来的优秀中间件企业却不多。中间件作为一个产品,一方面受到软件技术从C、C++、Java、J2EE到.net的牵制,又有应用软件走出部门、走向全企业和全互联网的引领,也从CORBA,COM+,消息中间件发展到了J2EE平台和SOA。在这么多的技术迁徙过程中,要让一个公司能够持续发展也真是不容易。所以有了Inprise、Iona的不成功,也才有IBM、Microsoft的不倒翁地位。也难怪中国的中间件公司,只要还存在就是巨大的成功了。
传统的中间件技术的发展往往源于技术能力。而技术的不断变化又让这些公司难以长期立足。但是如果我们站在一个更高的层次,跨越纯技术性的定位,也许我们会看到一个更平稳的中间件市场的空间,这正是新一代的中间件软件厂商的立足之地。从应用软件的角度来看,我们需要一个稳定的、技术依赖性较弱的方法来描述企业应用的不断升级的业务逻辑结构。业务逻辑会按照企业的发展而发展,却不应该太多的因为技术的变化而重新编写。新一代的面向构件的中间件就是这样一个在基础中间件上的一个新的楼层。
中间件的发展日臻完善,它为计算机软件的发展注入了新鲜的活力,是软件技术发展的一种潮流。中间件的组件模式,简化了应用程序的开发复杂性,提高了软件的可重用性,促使软件生产的产业化,使跨企业的分布式应用得到了推广。
据有关组织预测,消息中间件是目前中间件技术的发展热点,在市场上占据了主导地位。消息中间件以其独特的优势为各种分布式应用的开发注入了强大的动力,极大地推动了应用集成的发展。对象中间件技术也发展迅速,也是未来的主流,各大硬软件公司,如:Sun,Microsoft,IBM,DEC等都在积极参与有关标准的制定和产品的开发工作。中间件的另一个发展方向是WebServices中间件,不同于目前的组件技术,WebServices不是通过特定的对象模型协议访问,而是通过通用的网络协议和数据格式来访问,例如HTTP和XML。用户仅仅通过创建并使用为WebServices接口定义的消息就可以使用任何语言在任何平台上调用WebServices。目前WebServices中间件还处在发展初期,许多标准和规范还在制定和完善中。
随着Web技术的飞速发展,中间件当前所面临的重大的挑战就是要在互联网这个复杂的分布式系统中构建应用程序。可以预见,未来的中间件必将和网络技术紧密相关。国内外都正在深入地研究这一技术。