中间件入门文章(转)
一篇理解中间件,入门的文章,挺好的,分享一下.
1、中间件的动因
尽管有了构件技术的支持, 但是随着软件系统规模与复杂度的不断提高, 软件开发过程中复杂度高、开发周期长、可靠性保证难等突出问题并没有得到根本缓解;而分布式软件面临更大的挑战, 分布式软件所运行的网络环境具有明显的分布性、 开放性、 演化性、 异构性、并发性等特征,因此分布式软件必须解决互操作、数据交换、分布性、可行性等一系列更复杂的问题。
究其本质原因,在于人们控制复杂性的能力相对稳定,但面临的问题却越来越多。在现实生活中,如果遇到一件很复杂的事情要完成,我们往往会寻求工具的支持,很多工具的作用是帮人们完成重复性的、 每次手工做起来又很费力费时的工作, 在软件开发时解决问题的思路是一致的。 基本的解决思路就是抽取软件的共性成分, 抽取的共性成分由系统级软件完成,向开发人员屏蔽系统低层的复杂度,从而在高层保持整体复杂度的相对稳定。在软件领域, 这种解决思路往往导致新型系统软件的产生。 操作系统与数据库管理系统的产生就是经历了类似这样的过程。
在操作系统出现之前,计算机的初始组成就是“硬件+程序” ,即程序直接运行在裸机硬件之上。此时,应用程序直接控制硬件的各种运行细节,应用程序中存在大量的代码用于管理各种物理器件,以访问数据为例,程序必控制怎样连接磁盘,如何读取其中的数据,如何处理各种异常情况等。这使得程序代码十分庞大,而且正确性难以保证。随着计算机应用的日益广泛,程序的规模不断增大,软件开发变得越来越困难。在这种背景下,人们进行了软件共性的第一次抽取,即抽取出了程序的共性(稳定)成分——计算机资源管理,此次共性的抽取导致了操作系统的产生,分离出了应用程序。 初期的操作系统被称为管理程序或监督程序,提供大量的与硬件相关的代码(系统调用)来完成上层应用程序的各种请求,隐藏了与硬件相关的程序执行过程的复杂性,从而简化了应用程序的开发。
操作系统形成之后,计算机的组成变成了“硬件+操作系统+应用程序” 。此时,应用程序中访问的数据和应用程序一样以简单文件的方式存储, 应用程序的开发人员需要了解数据的具体组织格式, 并且需要自己编写程序解决完整性等相关问题。 随着应用程序处理的数据规模越来越大, 应用程序中数据管理这一共性也越来越明显, 即应用程序中普遍存在大量代码实现数据管理功能。 于是人们进行了软件共性的第二次抽取, 即抽取出了程序的共性 (稳定) 成分——数据管理, 此次共性的抽取导致了数据库管理系统的产生, 分离出了应用软件。
数据库管理系统对数据进行统一的管理和控制, 并保证数据库的安全性和完整性, 为用户屏蔽系统关于数据存储和维护等的细节,从而再次简化了应用程序的开发。
类似的工作仍在继续, 在软件系统规模与复杂度不断提高的同时, 人们不断从应用软件中提取共性、降低高层复杂性,最终导致了中间件的产生。与操作系统、数据库管理系统类似,中间件是在操作系统(数据库管理系统)与应用系统之间的一层软件,通常为分布式应用的开发、部署、运行与管理提供支持。
2、中间件提供的支撑
在中间件应用的早期,人们依据所抽取出的应用软件中的不同共性设计与实现了多种类型的中间件,一般一种类型的中间件实现一种共性功能,为应用软件提供一种开发支撑。由于所属的具体领域不同,面临的问题差异很大,因此不同开发组织分离、开发出的中间件也不尽相同。以下是几种常见的中间件以及其提供的支持:
终端仿真/屏幕转换中间件:用以实现客户端图形用户接口与已有的字符接口方式的服务器应用程序的互操作。 在该种中间件支持下, 可以很容易地为原有字符界面的应用程序提供图形用户界面。
数据访问中间件: 在数据库管理系统的基础上, 对异构环境下的数据库实现联接或文件系统实现联接的中间件,为应用程序访问数据库提供开发支撑。
远程过程/方法调用中间件:用以实现远程过程或方法调用的中间件。向应用程序提供远程调用时的底层通信支持, 帮助应用程序完成编组与解组等工作, 程序员方便地编写客户端应用程序,像调用本地过程或对象那样方便调用位于远端服务器上的过程或对象方法。
消息中间件: 为应用程序提供发送和接收异步消息支持的中间件。 基于消息的交互方式提供了基本的异步编程模式, 即客户端可以通过发送消息来请求某种服务, 在服务端处理请求期间,客户端不必等待对方完成,可以执行其它操作,服务端完成后会以消息的形式通知客户端。在消息中间件的支持下,应用程序可以很容易地实现消息的发送和接收,而不必关心消息交换过程中的具体细节。
事务(交易)中间件:提供事务控制机制的中间件。事务(交易)管理支持可靠的服务端计算,这在很多关键系统中都是必需的。事务的基本特征是维护一系列操作的原子性,如银行业务系统中转账功能所包含的扣除源账户余额与增加目标账户余额两个操作, 这两个操作从业务逻辑上讲应该是原子的,即要么全部都完成,要么全部都不做。基于事务中间件,应用程序可以佷方便地实现事务控制,而不必关心具体事务控制的细节。
构件中间件:提供构件化支持的中间件。在分布、异构的网络计算环境中将各种分布对象有机地结合在一起,完成系统的快速集成,实现对象重用。有了各种中间件的支撑, 在应用软件中用到中间件对应的功能时, 不需要开发人员自己实现,可直接利用中间件将其已实现好的功能快速集成到应用软件中。
随着中间件应用越来越广泛,又出现了一个新问题:中间件越来越多,开发时需要安装的支撑环境越来越复杂,开发人员不得不花费越来越多的时间安装与配置需要的各种中间件。因此自然地出现一种中间件集成的强烈需求,在中间件研究的基础上,人们开始考虑将各种中间件的功能集成在一起, 现有中间件多以集成中间件的形式出现, 集成中间件也称为应用服务器。
现有的集成中间件典型地为三层/多层结构的分布式软件系统提供各种开发支撑,因为三层结构的分布式软件的核心为中间层, 因此支撑主要集中在对中间层开发的支撑上。 目前应用最广泛的集成中间件有三类:
(1)基于 OMG(Object Management Group,对象管理组织)CORBA规范的集成中间件
(2)基于 Sun JEE(Java Enterprise Edition,Java企业版)规范的集成中间件
(3)基于微软.NET 架构的集成中间件
其中前两种所基于的规范均为工业标准,这两种标准得到了产业界众多厂商的广泛支持,因此可供选择的具体中间件产品较多,也是本书主要内容的关注点。第三种基于微软公司的私有技术, 因此具体的中间件产品基本局限于微软公司的平台, 有兴趣的读者可参考其它相关书籍或资料。为便于论述,在不引起混淆的情况下下文中用“中间件”一词代表“集成中间件” 。
现有中间件为分布式软件系统提供的基本支持与分布式软件所运行的网络环境密切相关,具体可归为 提供构件运行环境、 提供互操作机制与 提供公共服务三个方面。
提供构件运行环境:
现有中间件均提供构件化的基本支持, 支持方便开发与使用符合特定规范的构件 (分布式对象) 。中间件一般通过构件容器为构件提供基本的运行环境,具体功能一般包括管理构件的实例及其生命周期、管理构件的元信息等。
提供互操作机制:
因为分布式软件跨越了多台计算机,所以需要一种像 TCP/IP 或者 IPX 这样的网络基础设施来连接应用程序的各节点。现有操作系统(如 Unix、Linux、Windows)或高级程序设计语言(如 Java、C++)均提供了像套接字(Socket)这样的开发接口支持编写跨越网络交互的代码; 但是有相关开发经验的读者不难发现, 基于这些开发接口实现需要进行比较复杂的开发与调试; 而跨越网络的交互是每个分布式系统必须解决的首要问题, 因此现有集成中间件均集成了早期远程过程/方法调用中间件的功能,提供了很强的高层通信协议以屏蔽节点的物理特性以及各节点在处理器、操作系统等方面的异构性。基于中间件的互操作支持,开发人员在开发与调用分布式对象时,均不需自己编写处理底层通信的代码。
广泛使用的这种高层通信协议包括以下几种:
远程过程调用(Remote Procedure Call,RPC) :RPC是第一个得到广泛应用的高层通信协议,使用 RPC,客户应用程序可以像调用本地过程那样调用在远程计算机上执行的 C 语言函数。由于是结构化的,因此目前已经基本被面向对象的通信协议取代。
IIOP(Internet Inter-ORB Protocol):IIOP 是 CORBA中使用的一种通信协议,有了它,运行在不同平台上的两个对象可以很方便的进行交互。
DCOM 通信协议:微软在 RPC 基础上实现的分布式 COM 构件间使用的通信协议。
JRMP (Java Remote Messaging Protocol):特定于 Java语言,支持用 Java 语言编写的对象之间进行远程交互(Java Remote Method Invocation, JavaRMI)的通信协议。
RMI/IIOP:Java 企业版中访问 EJB 使用的通信协议,基于 IIOP 实现。
以上各种协议的共同特征就是帮助应用程序完成编组与解组等跨越网络通信的底层工作,实现远程过程/方法调用中间件的功能。
提供公共服务:
除了互操作的支持外, 现有集成中间件将早期各种中间件中针对分布式软件的通用支持集成于一身,以公共服务的形式提供给应用程序。公共服务又称为系统级服务,指由中间件(应用服务器)实现的、应用程序使用的软件系统中共性程度高的功能成分。公共服务有两个基本特征:
(1)由中间件而非应用程序实现
(2)应用程序中通常会调用其实现的共性功能与应用程序中开发人员开发的构件实现的功能不同, 公共服务通常不实现应用系统中具体业务逻辑, 而是为具体业务逻辑的实现提供共性的支持, 而开发人员开发的构件则实现具
体的业务逻辑。
显然, 一个中间件平台所提供的公共服务越多, 开发者就越容易在更短的时间内开发出高质量的分布式系统。 有了中间件提供的公共服务, 开发者可以将主要精力集中于系统的具体业务逻辑。以下是几种常见的公共服务:
事务服务(Transactions Service ) :提供支持事务处理的机制,以保证系统状态与数据的一致性与完整性,支持可靠的服务端计算。
安全服务(Security Service ) :为系统提供在分布式环境下的安全机制,以防止未授权用户对系统的非法访问。
命名服务(Naming Service ) :在分布式系统中,命名服务提供了一种定位分布式对象与其它系统资源的机制。
持久性服务(Persistence Service: ) :持久性服务使得分布式对象可以通过持久的数据存储来保存、更新和恢复他的状态。
消息服务(Messaging Service ):消息处理服务提供异步编程模式,异步模式在很多应用中都需要。
分布式垃圾回收服务(Distributed Garbage Collection Service ) :当一个程序不再使用分布式对象时,分布式垃圾回收服务会自动释放分布式对象所占用的存储单元。
资源管理服务(Resource Management Service: ) :一般来说,资源管理器按照使可伸缩性最大化的方式来管理分布式对象, 即支持大量的客户程序同分布式对象在短时间内进行交互的能力。
来自 <http://blog.csdn.net/hanxuemin12345/article/details/44681509>