3.2 中间件技术
目前还没有对中间件形成一个统一的定义,我们使用现在比较认可的两种定义:
- 在一个分布式系统环境中处于操作系统和应用程序之间的软件。
- 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
从这些定义中可以看出:
- 中间件是一类软件,而非一种软件。
- 中间件不仅仅实现互连,还要实现应用之间的互操作。
- 中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。
中间件是处于操作系统和应用程序之间的软件,也有人认为它应该是属于操作系统中的一部分。这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软件和实用软件区分开来。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台。随着中间件应用的不断增长,中间件的范围已经覆盖了分布式对象和组件、消息通讯,以及移动应用等软件系统。
3.2.1 中间件的功能
中间件的基本功能包括以下几个:
- 负责客户机和服务器间的连接和通信。
- 提供客户机与应用层的高效率通信机制。
- 提供应用层不同服务之间的互操作机制。
- 提供应用层与数据库之间的连接和控制机制。
- 提供一个多层结构应用开发和运行的平台。
- 提供一个应用开发框架,支持模块化的应用开发。
- 屏蔽硬件、操作系统、网络和数据库。
- 提供交易管理机制,保证交易的一致性。
- 提供应用的负载均衡和高可用性。
- 提供应用的安全机制与管理功能。
- 提供一组通用的服务去执行不同的功能,为的是避免重复的工作和使应用之间可以协作。
中间件作为一大类系统软件,与操作系统、数据库管理系统并称“三驾马车”,它的优越性体现在以下几个方面:
缩短应用的开发周期、节约应用的开发成本、减少系统初期的建设成本、降低应用开发的失败率、保护已有的投资、简化应用集成、减少维护费用、提高应用的开发质量、保证技术进步的连续性、增强应用的生命力。
具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。
中间件带给应用系统的,不只是开发的简便和开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。中间件作为新层次的基础软件,其重要作用是将不同时期,在不同操作系统上开发的应用软件集成起来,彼此像一个天衣无缝的整体协调工作,这是操作系统和数据库管理系统本身做不了的。中间件的这一作用,使得在技术不断发展之后,我们以往在应用软件上的劳动成果仍然物有所用,节约了大量的人力、财力投入。
3.2.2 中间件的分类
中间件的任务是使应用程序开发变得更容易,通过提供统一的程序抽象,隐藏异构系统和分布式系统下低级别编程的复杂度。中间件分类有很多方式和很多种类型。在这里我们由底向上从中间件的层次上来划分,可分为底层型中间件、通用型中间件和集成型中间件3个大的层次。
- 底层型中间件的主流技术有JVM(Java Virtual Machine, Java虚拟机)、CLR(Common Language Runtime,公用语言运行时)、ACE(Adaptive Communication Environment,自适应通信环境)、JDBC和ODBC等,代表产品有Sun JVM和Microsoft的CLR;
- 用型中间件的主流技术有CORBA、EJB、COM/DCOM等,代表产品主要有IONA Orbix、BEA WebLogic和IBM MQSeries等;
- 集成型中间件的主流技术有WorkFlow和EAI等,代表产品主要有BEA WebLogic和IBM WebSphere等。
当然,在这个大的层次划分下,中间件还可以细化为以下一些种类:
- 通信处理(消息)中间件。在不同平台之间通信,实现分布式系统中可靠的、高效的、实时的跨平台数据传输,称为消息中间件。这是中间件中唯一不可缺少的,是需求量最大的中间件产品,目前在大部分操作系统中已包含了其部分功能。
- 事务处理(交易)中间件。在分布式事务处理系统中要处理大量事务,常常在系统中要同时进行上万个事务。在联机事务处理系统中,每笔事务常常要多台服务器上的程序顺序地协调完成,一旦中间发生某种故障时,不但要完成恢复工作,而且要自动切换系统,达到系统永不停机,实现高可靠性运行。同时要使大量事务在多台应用服务器中能实时并发运行,并进行负载平衡地调度,实现昂贵的可靠性机和大型计算机系统同等的功能,为了实现这个目标,要求系统具有监视和调度整个系统的功能。一个事务处理平台,根据X/OPEN的参数模型规定,应由事务处理中间件、通信处理中间件,以及数据存取管理中间件3部分组成。
- 数据存取管理中间件。在分布式系统中,重要的数据都集中存放在数据服务器中,它们可以是关系型、复合文档型、具有各种存放格式的多媒体型,或者是经过加密或压缩存放的,该中间件将为在网络上虚拟缓存、格式转换、解压等带来方便。
- Web服务中间件。浏览器图形用户界面已成为公认规范,然而由于它存在会话能力差、不能做数据写入、受HTTP协议的限制等缺陷,因此就必须进行修改和扩充,形成Web服务器中间件。
- 安全中间件。一些军事、政府和商务部门上网的最大障碍是安全保密问题,而且不能使用国外提供的安全措施(如防火墙、加密、认证等),必须用国产的产品。产生不安全因素是由操作系统引起的,但必须要用中间件去解决,以适应灵活多变的要求。
- 跨平台和体系结构的中间件。当前开发大型应用软件通常采用基于体系结构和构件技术,在分布式系统中,还需要集成各节点上的不同系统平台上的构件或新老版本的构件,由此产生了体系结构中间件。
- 专用平台中间件。为特定应用领域设计参考模式,建立相应体系结构,配置相应的构件库和中间件,为应用服务器开发和运行特定领域的关键任务。
- 其他中间件。某些专业领域如银行、电信等开发的专用中间件。另外,还有一些更高层的中间件,更多用于系统整合,包括企业应用集成中间件、工作流中间件、门户中间件等,它们是多种中间件的组合。
3.3 可扩展标记语言
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
3.3.1 XML简介
与HTML一样,XML是从所有标记语言的元语言SGML(Standard Generalized Markup Language,标准通用标记语言)中派生出来的。
- 实现不同数据的集成。不同的数据库系统,其存储结构、应用程序接口都存在着许多不同点,因此基本上无法开发出一套能够针对这些相互不兼容的数据库的查询程序。而XML的出现,则改变了这个现象,由于数据是结构化的,因此即使它们的来源不同,也能够很容易地结合在一起。在开发时,可以在中间层的服务器上对从后端数据库和其他应用来的数据进行集成。然后,数据就能被发送到客户或其他服务器做进一步的集合、处理和分发。
- 使用于多种应用环境。XML的高扩展性、高灵活性特性,使得其可以描述各种不同种类的应用软件中的各种不同类型的数据。另外,XML独有自描述性,可以很容易进行交换、处理,而且还不需要多余的内部描述。
- 客户端数据处理与计算。由于XML格式的标准化,许多浏览器软件都能够提供很好的支持,因此只需简单地将XML格式的数据发送给客户端,客户端就可以自行对其进行编辑和处理,而不仅是显示。而且,DOM还允许客户端利用脚本或其他编程语言处理数据,而无须回到服务器端。这种将数据视图与内容分离的机制,可以更容易地创建出基于Web的、功能强大的应用,而无需基于高端数据库。
- 数据显示多样化。XML将显示和数据内容分离,提供了一种简单、开放、扩展的方式来描述结构化数据。与HTML不同的是,HTML描述了数据的外观,而XML则描述的是数据本身。因此,XML定义的数据可以指定不同的显示方式,利用CSS或XSL等工具来提供显示机制。
- 局部数据更新。通过XML,数据可以实现局部的更新。也就是说,当有其中的一部分数据变化时,并不需要重发整个结构化的数据,服务器只需将变化的元素发送给客户。而不是像现在的情况,只要一条数据变化了,整页都必须重建。而且,还可以将新增的信息加入到已存在的页面中,这样就可以使得应用的性能更高。
3.3.2 XML相关技术
XML主要是一种数据描述方法,其魅力要在与其相关的技术的结合中才能显示出来。XML相关的技术有很多,但主要有3个,分别是Schema、XSL和XLL(eXtensible Link Language,可扩展连接语言)。
- DTD(Document Type Definition,文档类型定义)与Schema。用来对文档格式进行定义的语言,就相当于数据库中需要定义数据模式一样,DTD和Schema决定了文档的内容应该是些什么类型的东西。其中DTD是从SGML继承下来的,而Schema是专门为XML文档格式而设计的,它们都规定了XML文件的逻辑结构,定义了XML文件中的元素、元素的属性以及元素之间的关系。
- CSS和XSL。由于XML是内容和格式分离的语言,所以需要专门的协议来定义XML文档的显示格式,CSS和XSL就是用来定义XML文档显示格式的。其中CSS是随着HTML的出现而出现的,它是一种极其简单的样式语言;XSL则是专门为XML设计的样式语言,它被定义为一套元素集的XML语法规范,该语法用来将XML文件转换为HTML或者其他格式的文档。
- **Xpath、Xpointer与Xlink。都是用于扩展Web上的链接。
- XML名字空间。当多个文档创建DTD或者Schema时,需要某种方式来确定每个定义的起源。名字空间(Namespace)的使用可以有效地防止名字冲突的发生。
- XML查询语句。XQL(XML Query Language, XML查询语言)和XML-QL(XML -Query Language,XML查询语言)是两种比较有影响力的查询语言,它们是对XSL的一种自然的扩充,并在XSL的基础上提供了筛选操作、布尔操作和对结点集进行索引,并为查询、定位等提供了单一的语法形式。
- RDF(Resource Description Framework,资源描述框架)。元数据是有关数据的数据和有关信息的信息。元数据在Web上有很多用途,包括管理、搜索、过滤和个性化Web网站。RDF是用于编译、交换和重新使用结构化元数据的W3C指令的XML应用程序,它能使软件更容易理解Web站点的内容,以便可以发现Web站点上的资源。
- DOM、SAX和XML解析器。DOM使用树状结构来表示XML文档,以便更好的看出层次关系,这是很直观、方便的方法。但用DOM处理XML文档,在处理前要对整个文档进行分析,把整个XML文档转换成树状结构放到内存中,在文档很大时将占用很大的内存空间。SAX的目的是为处理大型文档而进行优化的标准的解析接口。它是事件驱动的,每当它发现一个新的XML标记,就用一个SAX解析器注册句柄,激活回调函数。XML Parser(解析器)是一个用于处理XML文档的软件包,它为用户提供了操作XML文档的接口,以便减轻应用程序处理XML数据的负担。目前解析器的类型可以分为验证的和非验证的两种。