一、定义
中间件就是软件产业不断发展过程中自然产生的。互联网促使分布式系统和网络应用的诞生,中间件就是伴随网络技术的产生、发展而兴起的,可以说没有网络就没有现代意义上的中间件。因为,网络环境需要解决异构分布网络环境下软件系统的通信、互操作、协同、事务、安全等共性问题,提高异构分布网络环境下软件系统的互操作性、可移植性、适应性、可靠性等问题。
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
二、特征
- 平台化
所谓平台就是能够独立运行并自主存在,为其所支撑的上层系统和应用提供运行所依赖的环境。显然,不是所
有的系统或者应用都可以称之为平台的。中间件是一个平台,因此中间件是必须独立存在,是运行时刻的系统软件,它为上层的网络应用系统提供一个运行环境,并通过标准的接口和API来隔离其支撑的系统,实现其独立性,也就是平台性。 - 应用支撑
中间件的最终目的是解决上层应用系统的问题,而且也是软件技术发展到今天对应用软件提供最完善彻底的解
决方案。
现代面向服务的中间件在软件的模型、结构、互操作以及开发方法等四个方面提供了更强的应用支撑能力:
- 模型:
构件模型弹性粒度化,即通过抽象层度更高的构件模型,实现具备更高结构独立性、内容自包含性和业务
完整性的可复用构件,即服务。并且在细粒度服务基础上,提供了更粗粒度的服务封装方式,即业务层面的封装,形成业务组件,就可以实现从组件模型到业务模型的全生命周期企业建模的能力。 - 结构:
结构松散化,即,将完整分离服务描述和服务功能实现以及服务的使用者和提供者,从而避免分布式应用
系统构建和集成时常见的技术、组织、时间等不良约束。 - 互操作:
交互过程标准化,即,将与互操作相关的内容进行标准化定义,如服务封装、描述、发布、发现、调用等
契约,通信协议以及数据交换格式等等。最终实现访问互操作、连接互操作和语义互操作。 - 开发集成方法:
应用系统的构建方式由代码编写转为主要通过服务间的快捷组合及编排,完成更为复杂的业务逻辑的按需
提供和改善,从而大大简化和加速应用系统的搭建及重构过程。
- 模型:
- 软件复用
软件复用,即软件的重用,也叫再用,是指同一事物不作修改或稍加改动就多次重复使用。从软件复用技术的
发展来看,就是不断提升抽象级别,扩大复用范围。最早的复用技术是子程序,人们发明子程序,就可以在不同系统之间进行复用了。但是,子程序是最原始的复用,因为这种复用范围是一个可执行程序内复用,静态开发期复用,如果子程序修改,意味着所有调用这个子程序的程序必须重新编译、测试和发布。
为了解决这个问题,发明了组件(或者叫控件),如MS操作系统下的DLL组件。组件将复用提升了一个层次,因
为组件可以在一个系统内复用(同一种操作系统),而且是动态、运行期复用。这样组件可以单独发展,组件与组件调用者之间的耦合度降低。
为解决分布式网络计算之间的组件复用,人们发明了企业对象组件,如(COM+, .NET, EJB等),或者叫分布式
组件。通过远程对象代理,来实现企业网络内复用,不同系统之间复用。
传统中间件的核心是组件对象的管理。但分布式组件也是严重依赖其受控环境,由于构件实现和运行支撑技术
之间存在着较大的异构性,不同技术设计和实现的构件之间无法直接组装式复用。
而现代中间件的发展重要趋势就是以服务为核心,如WebService, SCA/SDO等。通过服务,或者服务组件来实现
更高层次的复用、解耦和互操作,即SOA架构中间件。
因为服务是通过标准封装,服务组件之间的组装、编排和重组,来实现服务的复用。而且这种复用,可以在不
同企业之间,全球复用,达到复用的最高级别,并且是动态可配置的复用。 - 耦合关系
基于SOA架构的中间件,在松耦合解耦过程也发展到了最后的境界。传统软件将软件之中核心三部分——网络连
接、数据转换、业务逻辑全部耦合在一个整体之中,形成铁板一块的软件,牵一发而动全身,软件就难以适应变化。分布式对象技术将“连接逻辑”进行分离,消息中间件将“连接逻辑”进行异步处理,增加了更大的灵活性。消息代理和一些分布式对象中间件将数据转换也进行了分离。而SOA架构,通过服务的封装,实现了业务逻辑与网络连接、数据转换等进行完全的解耦。 - 互操作性
传统软件互操作技术也存在问题。互联网前所未有的开放性意味着各节点可采用不同的中间件技术,对技术细
节进行了私有化的约束,构件模型和架构没有统一标准,从而导致中间件平台自身在构件描述、发布、发现、调用、互操作协议及数据传输等方面呈现出巨大的异构性。各种不良技术约束的结果是软件系统跨互联网进行交互变得困难重重,最终导致了跨企业/部门的业务集成和重组难以灵活快速的进行。
在软件的互操作方面,传统中间件只是实现了访问互操作,即通过标准化的API实现了同类系统之间的调用互操
作,而连接互操作还是依赖于特定的访问协议,如JAVA使用RMI,CORBA使用IIOP等。而SOA通过标准的、支持Internet、与操作系统无关的SOAP协议实现了连接互操作。而且,服务的封装是采用XML协议,具有自解析和自定义的特性,这样,基于SOA的中间件还可以实现语义互操作。
总之,服务化体现的是中间件在完整业务复用、灵活业务组织方面的发展趋势,其核心目标是提升IT基础设施
的业务敏捷性。因此,中间件将成为SOA的主要实现平台。
三、分类
- 终端仿真/屏幕转换中间件:
用以实现客户端图形用户接口与已有的字符接口方式的服务器应用程序的互操作。在该种中间件支持下,可以
很容易地为原有字符界面的应用程序提供图形用户界面。 - 数据访问中间件:
在数据库管理系统的基础上,对异构环境下的数据库实现联接或文件系统实现联接的中间件,为应用程序访问数据库提供开发支撑。 - 远程过程/方法调用中间件:
用以实现远程过程或方法调用的中间件。向应用程序提供远程调用时的底层通信支持,帮助应用程序完成编组
与解组等工作,程序员方便地编写客户端应用程序,像调用本地过程或对象那样方便调用位于远端服务器上的过程或对象方法。 - 消息中间件:为应用程序提供发送和接收异步消息支持的中间件。基于消息的交互方式提供了基本的异步编程
模式,即客户端可以通过发送消息来请求某种服务,在服务端处理请求期间,客户端不必等待对方完成,可以执行其
它操作,服务端完成后会以消息的形式通知客户端。在消息中间件的支持下,应用程序可以很容易地实现消息的发送和接收,而不必关心消息交换过程中的具体细节。 - 事务(交易)中间件:
提供事务控制机制的中间件。事务(交易)管理支持可靠的服务端计算,这在很多关键系统中都是必需的。事
务的基本特征是维护一系列操作的原子性,如银行业务系统中转账功能所包含的扣除源账户余额与增加目标账户余额两个操作, 这两个操作从业务逻辑上讲应该是原子的,即要么全部都完成,要么全部都不做。基于事务中间件,应用程序可以佷方便地实现事务控制,而不必关心具体事务控制的细节。 - 构件中间件:
提供构件化支持的中间件。在分布、异构的网络计算环境中将各种分布对象有机地结合在一起,完成系统的快
速集成,实现对象重用。
现有的集成中间件典型地为三层/多层结构的分布式软件系统提供各种开发支撑,因为三层结构的分布式软件的核心为中间层,因此支撑主要集中在对中间层开发的支撑上。