中间件技术主要用来支撑分布式软件的开发,在大型分布式软件系统中中间件技术发挥着极其重要的作用。但是中间件技术也并不是一夜成名的,像任何其他技术一样它的发展也是经历了一个比较漫长的过程的,本文将带你走进中间件技术的世界,让你了解中间件技术的发展过程,以及为什么要使用中间件?为什么会出现中间件集群?希望本文能够让你体会到中间件技术的魅力。

 

1.      分布式软件的三层/多层结构:

最早的分布式软件主要是基于两层结构的,所谓的两层结构指的是整个软件的系统架构只分为客户端和服务端(C/S)两层,在两层结构中,简单地将软件系统划分为服务器层和客户层,服务器层又称为数据层。在服务器层,一般放置一个数据库服务器,上面安装一个数据库管理系统,存放系统用到的持久数据。而客户层则实现系统的主要业务功能,实现时需要访问数据库中存放的数据,一般会有多个客户端同时访问数据库服务。这时的系统结构比较简单,就是多个客户端程序共享一个数据库。其结构图如下:

中间件与应用程序架构规划 软件中间件技术_中间件

两层结构下,客户程序直接访问数据库,并且用户界面代码和业务逻辑代码交织在一起,这些导致两层结构存在以下重要的缺陷:

第一, 客户端的负担比较重。

第二,  客户端的可移植性不好。

第三,  系统的可维护性不好。

第四,  数据的安全性不好。

 

鉴于以上原因,人们提出了如下图所示的三层结构:

中间件与应用程序架构规划 软件中间件技术_中间件与应用程序架构规划_02

三层结构中软件开发的主要工作量在中间层,中间层包括除用户界面代码与持久数据之外的几乎所有系统代码,是整个软件系统的核心。在三层结构中,客户层和数据层已被严格定义,但中间层并未明确定义。中间层可以包括所有与应用程序的界面和持久数据存储无关的处理。假定将中间层划分成许多服务程序是符合逻辑的,那么将每一主要服务都视为独立的层,则三层结构就成为了n 层结构。典型地,可将业务逻辑层分离出实现数据持久化操作的持久层,用于实现对于持久数据操作的封装,从而形成由客户层、业务逻辑层、持久层与数据层构成的四层结构。

 

2.构件技术的出现。

按照面向对象的观点,软件系统由若干对象组装而成,将这一观点延伸至分布式系统,分布式系统由若干分布式对象组装而成。面向对象的精髓之一在于对象维护自身的状态并通过消息进行通信,这对于分布式计算环境是非常理想的,但是分布式对象与传统对象相比,有其特殊的特性:

第一、分布式系统由于其规模与分布特性等原因,比集中式系统更容易被拆分给不同的人或团队开发,这就很有可能遇到不同的人或团队习惯使用不同的程序设计语言和环境的情况。

第二、,分布式系统要求分布式对象可以在任何粒度上透明的使用,也就是说,无需考虑位置与实现。传统的面向对象语言中的对象很难满足上面提到的要求。传统对象的关注点是封装和通过继承对实现进行重用,大大减轻了系统的维护工作。但是分布式系统要求分布式对象要有更好的可插入性,这个要求仅仅依靠传统面向对象的封装和继承是不可能满足的。首先,要求另一层次上的封装,只需暴露公用接口;其次,从重用的角度来讲,继承局限于程序设计语言,而分布式系统不太关注于直接重用代码,而是要求能够利用远程所实现的服务。这就是说,分布式系统中的分布式对象和传统的对象不一样,实际上是具有良好封装特性的软件构件。与对象相比,构件通常具有如下特性:

(1)构件是一个严格定义的可插入单元:类似于硬件模块,一旦开发完成,就可以方便的用来组装系统。构件一般是基于对象实现的,但也可以不作为对象实现。

(2)  构件将封装运用到了极限:构件通过封装来隐藏构件的实现以达到构件的实现语言的任意性以及物理位置的任意性。

(3) 构件通常在容器中进行管理:按照上面的讨论,构件要屏蔽实现语言、实现方式等很多实现细节,使用一个构件时可以不关心具体实现和位置,但是这仅仅是指开发人员不需要去关心,真正去做这些工作的就是对象所在的容器。也就是说,我们所使用的、具备很好特性的构件实际上是容器和我们用各种语言、方式所编写的程序共同协作的结果。这就要求构件遵循所处的容器的规则,并按照标准的途径向容器发送事件。

(4)  构件可以从容器中获得属性或服务。

(5)  构件允许对所支持的接口进行动态发现和调用:客户程序可以在运行状态下确定一个构件支持何种功能,然后调用该功能。

 

3.中间件技术的出现:

尽管有了构件技术的支持,但是随着软件系统规模与复杂度的不断提高,软件开发过程中复杂度高、开发周期长、可靠性保证难等突出问题并没有得到根本缓解;而分布式软件面临更大的挑战,分布式软件所运行的网络环境具有明显的分布性、开放性、演化性、异构性、并发性等特征,因此分布式软件必须解决互操作、数据交换、分布性、可行性等一系列更复杂的问题。在解决这些问题的同时人们通过不断从应用软件中提取共性、降低高层复杂性,最终导致了中间件的产生。中间件是在操作系统(数据库管理系统)与应用系统之间的一层软件,通常为分布式应用的开发、部署、运行与管理提供支持。最常用的中间件大致有数据访问中间件,远程过程/方法调用中间件,消息中间件以及事务控制中间件等。随着中间件应用越来越广泛,又出现了一个新问题:中间件越来越多,开发时需要安装的支撑环境越来越复杂,开发人员不得不花费越来越多的时间安装与配置需要的各种中间件。因此自然地出现一种中间件集成的强烈需求,在中间件研究的基础上,人们开始考虑将各种中间件的功能集成在一起,现有中间件多以集成中间件的形式出现,集成中间件也称为应用服务器。这些应用服务器为分布式软件系统提供的基本支持与分布式软件所运行的网络环境密切相关,具体可归为提供构件运行环境、提供互操作机制与提供公共服务三个方面。

 

(1)提供构件运行环境:

现有中间件均提供构件化的基本支持,支持方便开发与使用符合特定规范的构件(分布式对象)。中间件一般通过构件容器为构提供基本的运行环境,具体功能一般包括管理构件的实例及其生命周期、管理构件的元信息等。

 

(2)提供互操作机制。中间件系统使用以下集中高层通讯协议来实现系统之间的互操作功能:

a.远程过程调用(Remote Procedure Call,RPC):RPC 是第一个得到广泛应用的高层通信协议,使用RPC,客户应用程序可像调用本地过程那样调用在远程计算机上执行的C 语言函数。由于是结构化的,因此目前已经基本被面向对象的通信协议取代。

b.IIOP(Internet Inter-ORB Protocol):IIOP 是CORBA 中使用的一种通信协议,有了它,运行在不同平台上的两个对象可以很方便的进行交互。

c.DCOM 通信协议:微软在RPC 基础上实现的分布式COM 构件间使用的通信协议。

d.JRMP (Java Remote Messaging Protocol):特定于Java 语言,支持用Java 语言编写的对

象之间进行远程交互(Java Remote Method Invocation, Java RMI)的通信协议。

e.RMI/IIOP:Java 企业版中访问EJB 使用的通信协议,基于IIOP 实现。

 

提供公共服务:

1.事务服务(Transactions Service):提供支持事务处理的机制,以保证系统状态与数据

的一致性与完整性,支持可靠的服务端计算。

2.安全服务(Security Service):为系统提供在分布式环境下的安全机制,以防止未授权

用户对系统的非法访问。

3.命名服务(Naming Service):在分布式系统中,命名服务提供了一种定位分布式对象

与其它系统资源的机制。

4.持久性服务(Persistence Service):持久性服务使得分布式对象可以通过持久的数据存

储来保存、更新和恢复他的状态。

5.消息服务(Messaging Service):消息处理服务提供异步编程模式,异步模式在很多应

用中都需要。

6.分布式垃圾回收服务(Distributed Garbage CollectionService):当一个程序不再使用

分布式对象时,分布式垃圾回收服务会自动释放分布式对象所占用的存储单元。

7.资源管理服务(Resource Management Service):一般来说,资源管理器按照使可伸缩

性最大化的方式来管理分布式对象,即支持大量的客户程序同分布式对象在短时间内进行交

互的能力。

 

现有的集成中间件典型地为三层/多层结构的分布式软件系统提供各种开发支撑,因为

三层结构的分布式软件的核心为中间层,因此支撑主要集中在对中间层开发的支撑上。目前

应用最广泛的集成中间件有三类:


(1)基于 OMG(Object Management Group,对象管理组织)CORBA 规范的集成中间件。

(2)基于 SunJEE(Java Enterprise Edition,Java 企业版)规范的集成中间件。

(3)基于微软.NET架构的集成中间件。

其中前两种所基于的规范均为工业标准,这两种标准得到了产业界众多厂商的广泛支持,因此可供选择的具体中间件产品较多,也是我们的关注点。第三种基于微软公司的私有技术,因此具体的中间件产品基本局限于微软公司的平台。就目前来看由于基于J2EE规范的集成中间件在项目中的使用更受欢迎,所以在后面的文章中我将重点介绍基于J2EE规范的中间件的开发。