软件架构之基于中间件开发
- 第 15 章:基于中间件的开发
-
- 15.1 中间件技术
-
- 15.1.1 中间件的概念
- 15.1.2 中间件的分类
- 15.1.3 中间件产品介绍
- 15.2 应用服务器技术
-
- 15.2.1 应用服务器的概念
- 15.2.2 主要的应用服务器
- 15.3.1 表示层
- 15.3.2 应用服务层
- 15.4 .NET
-
- 15.4.1 .NET 平台
- 15.4.2 .NET 框架
- 15.5 企业应用集成
- 15.6 轻量级架构和重量级架构
-
- 15.6.1 Struts 框架
- 15.6.2 Spring 框架
- 15.6.3 Hibernate 框架
- 15.6.4 基于 Struts、Spring 和 Hibernate 的轻量级架构
- 15.6.5 轻量级架构和重量级架构的探讨
第 15 章:基于中间件的开发
20 世纪 90 年代初,C/S 计算模式成为主流,将数据统一存储在数据服务器上,而有
关的业务逻辑都在客户端实现。但是,这种两层结构的模式由于服务器依赖于特定的供应商,数据存取受到限制,再加上难以扩展到广域网或互联网等原因,极大地阻碍着计算机软件系统的发展。有人提出将客户端的业务逻辑独立出来,形成第三层。在这种三层结构中,客户端仅仅是处理图形用户界面,在设计和实现时需要开发的,仅是在应用服务器上的业务逻辑部分的软件。
随着 Internet 及 WWW 的出现,计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。在这种分布异构环境中,通常存在多种硬件系统平台(例如 PC、工作站、小型机等),在这些硬件平台上又存在各种各样的系统软件(例如不同的操作系统、数据库、语言编译器等),以及多种风格的用户界面,这些硬件系统平台还可能采用不同的网络协议和网络架构连接。如何把这些系统集成起来并开发新的应用是一个非常现实而困难的问题。为了解决这个问题,出现了处于系统软件和应用软件之间的中间件。它使设计者集中设计与应用有关的部分,大大简化了设计和维护 工作。
15.1 中间件技术
中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处在操作系统、网络和数据库之上,应用软件的下层(如图 15-1 所示),也有人认为它应该属于操作系统中的一部分。
15.1.1 中间件的概念
中间件从诞生到现在,虽然仅有 10 多年时间,但发展极其迅速,是有史以来发展最快的软件产品,但在技术上还处于成长阶段,还没有统一的标准和模型,通常都是用 C++ 语言以面向对象的技术来实现的,但是它的特性已超出面向对象的表达能力,由于它属于可重用构件,目前趋向于用构件技术来实现。然而,中间件要涉及软件的所有标准、规范和技术,它有更多的内涵,因为它包括平台功能,自身具有自治性、自主性、隔离性、社会化、激发性、主动性、并发性、认识能力等特性,是近似于 Agent(代理)的结构。
目前很难给中间件一个严格的定义,国际上各家机构都有不同的定义,如 IDC 对中间件给出的定义是:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。这些服务程序或软件具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。中间件为处于其上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。中间件应具有如下的一些特点:
- 满足大量应用的需要;
- 运行于多种硬件和 OS 平台;
- 支持分布计算,提供跨网络、硬件和 OS 平台的透明性的应用或服务的交互;
- 支持标准的协议;
- 支持标准的接口。
世界著名的咨询机构 Standish Group 在一份研究报告中归纳了中间件的十大优越性:
- 缩短应用的开发周期;
- 节约应用的开发成本;
- 减少系统初期的建设成本;
- 降低应用开发的失败率;
- 保护已有的投资;
- 简化应用集成;
- 减少维护费用;
- 提高应用的开发质量;
- 保证技术进步的连续性;
- 增强应用的生命力。
具体来说,首先,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也有系统的维护、运行和管理的工作量的减少,还减少了计算机总体费用的投入。Standish 的调查报告显示,由于采用了中间件技术,应用系统的总建设费用可以减少 50%左右。在网络经济、电子商务大发展的今天,从中间件获得利益的不只是 IT 厂商,IT 用户也同样是赢家,并且是更有把握的赢家。
其次,中间件作为新层次的基础软件,其重要作用是将不同时期、在不同操作系统上开发的应用软件集成起来,彼此无缝地整体协调工作,这是操作系统、数据库管理系统本身做不了的。中间件的这一作用,使得在技术不断发展之后,人们以往在应用软件上的劳动成果仍然物有所用,节约了大量的人力、财力投入。
最后,由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。对于应用软件开发,中间件远比操作系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而节省了企业在应用软件开发和维护中的重大投资。
15.1.2 中间件的分类
好比一个大型城市的交通系统,将网络看做市区马路,通过交通工具(如:汽车)实现通信,每分钟将有数万辆车在马路上行驶,如果没有相应的交通设施和管理规划,城市将会乱成一团,发生各种交通事故,中间件系统就相当于这些配套的交通设施。按照中间件在分布式系统中承担的职责不同,可以划分以下积累中间件产品。
(1)通信处理(消息)中间件。正如,安装红绿灯,设立交通管理机构,制定出交通规则,才能保证道路交通畅通一样,在分布式系统中,人们要建网和制定出通信协议,以保证系统能在不同平台之间通信,实现分布式系统中可靠的,高效的,实时的跨平台数据传输,这类中间件称之为消息中间件,也是市面上销售额最大的中间件产品,目前主要产品有 BEA 的 eLink、IBM 的 MQSeries、TongLINK 等。实际上,一般的网络操作系统如 Windows 已包含了其部分功能。
(2)事务处理(交易)中间件。正如城市交通中要运行各种运载汽车,以此来完成日常的运载,同时随时监视汽车运行,在出现故障时及时排堵保畅。在分布式事务处理系统中,经常要处理大量事务,特别是 OLTP 中,每项事务常常要多台服务器上的程序按顺序协调完成,一旦中间发生某种故障,不但要完成恢复工作,而且要自动切换系统,达到系统永不停机,实现高可靠性运行。要使大量事务在多台应用服务器上能实时并发运行,并进行负载平衡的调度,实现与昂贵的可靠性机和大型计算机系统同等的功能,为了实现这个目标,要求
中间件系统具有监视和调度整个系统的功能。BEA 的 Tuxedo 由此而著名,它成为增长率最高的厂商。
(3)数据存取管理中间件。在分布式系统中,重要的数据都集中存放在数据服务器中,它们可以是关系型的、复合文档型、具有各种存放格式的多媒体型,或者是经过加密或压缩存放的,该中间件将为在网络上虚拟缓冲存取、格式转换、解压等带来方便。
(4)Web 服务器中间件。浏览器图形用户界面已成为公认规范,然而它的会话能力差、不擅长做数据写入、受 HTTP 协议的限制等,就必须进行修改和扩充,形成了 Web 服务器中间件,如 SilverStream 公司的产品。
(5)安全中间件。一些军事、政府和商务部门上网的最大障碍是安全保密问题,而且不能使用国外提供的安全措施(如防火墙、加密、认证等),必须用国产产品。产生不安全因素是由操作系统引起的,但必须要用中间件去解决,以适应灵活多变的要求。
(6)跨平台和架构的中间件。当前开发大型应用软件通常采用基于架构和构件技术,在分布式系统中,还需要集成各节点上的不同系统平台上的构件或新老版本的构件,由此产生了架构中间件。功能最强的是 CORBA,可以跨任意平台,但是过于庞大;JavaBeans 较灵活简单,很适合于做浏览器,但运行效率有待改善;COM+模型主要适合 Windows 平台,在桌面系统已广泛使用。由于国内新建系统多基于 UNIX(包括 Linux)和 Windows,因此,针对这两个平台建立相应的中间件市场相对要大得多。
(7)专用平台中间件。为特定应用领域设计领域参考模式,建立相应架构,配置相应的构件库和中间件,为应用服务器开发和运行特定领域的关键任务(如电子商务、网站等)。
(8)网络中间件。它包括网管、接入、网络测试、虚拟社区、虚拟缓冲等,也是当前最热门的研发项目。
15.1.3 中间件产品介绍
本节介绍主流的中间件产品 IBM MQSeries 和 BEA Tuxedo。
1.IBM MQSeries
IBM 公司的 MQSeries 是 IBM 的消息处理中间件。MQSeries 提供一个具有工业标准、安全、可靠的消息传输系统,它用于控制和管理一个集成的系统,使得组成这个系统的多个分支应用(模块)之间通过传递消息完成整个工作流程。MQSeries 基本由一个信息传输系统和一个应用程序接口组成,其资源是消息和队列。
MQSeries 的关键功能之一是确保信息可靠传输,即使在网络通信不可靠或出现异常时也能保证信息的传输。MQSeries 的异步消息处理技术能够保证当网络或者通信应用程序本身处于“忙”状态或发生故障时,系统之间的信息不会丢失,也不会阻塞。这样的可靠性是非常关键的,否则大量的金钱和客户信誉就会面临极大的损害。
同时,MQSeries 是灵活的应用程序通信方案。MQSeries 支持所有的主要计算平台和通信模式,也能够支持先进的技术如(Internet 和 Java),拥有连接至主要产品(如 LotusNotes 和 SAP/R3 等)的接口。
2.BEA Tuxedo
BEA 公司的 Tuxedo 作为电子商务交易平台,属于交易中间件。它允许客户机和服务器参与一个涉及多个数据库协调更新的交易,并能够确保数据的完整性。BEA Tuxedo 一个特色功能是能够保证对电子商务应用系统的不间断访问。它可以对系统构件进行持续的监视,查看是否有应用系统、交易、网络及硬件的故障。一旦出现故障,BEA Tuxedo 会从逻辑上把故障构件排除,然后进行必要的恢复性步骤。
BEA Tuxedo 根据系统的负载指示,自动开启和关闭应用服务,可以均衡所有可用系统的负载,以满足对应用系统的高强度使用需求。借助 DDR(数据依赖路由),BEA Tuxedo 可按照消息的上下文来选择消息路由。其交易队列功能,可使分布式应用系统以异步“少连接”方式协同工作。
BEA Tuxedo 的 LLE 安全机制可确保用户数据的保密性,应用/交易管理接口(ATMI)为50 多种硬件平台和操作系统提供了一致的应用编程接口。BEA Tuxedo 基于网络的图形界面管理可以简化对电子商务的管理,为建立和部署电子商务应用系统提供了端到端的电子商务交易平台。
15.2 应用服务器技术
Web 应用开发大致经历了三个阶段。在第一阶段,大家都使用 Web 服务器提供的服务器扩展接口,使用 C 或者 Perl 等语言进行开发,例如 CGI、API 等。这种方式可以让开发者自由地处理各种不同的 Web 请求,动态地产生响应页面,实现各种复杂的 Web 系统要求。但是,这种开发方式的主要问题是对开发者的素质要求很高,往往需要懂得底层的编程方法,了解 HTTP 协议,此外,这种系统的调试也相当困难。
在第二阶段,大家开始使用一些服务器端的脚本语言进行开发,主要包括 ASP、PHP、Livewire 等。其实现方法实质上是在 Web 服务器端放入一个通用的脚本语言解释器,负责解释各种不同的脚本语言文件。这种方法的首要优点是简化了开发流程,使 Web 系统的开发不再是计算机专业人员的工作。此外,由于这些语言普遍采用在 HTML 中嵌入脚本的方式,方便实际开发中的美工和编程人员的分段配合。对于某些语言,由于提供了多种平台下的解释器,所以应用系统具有了一定意义上的跨平台性。但是,这种开发方式的主要问题是系统的可扩展性不够好,系统一旦比较繁忙,就缺乏有效的手段进行扩充。此外,从一个挑剔者的眼光来看,这种方式不利于各种提高性能的算法的实施,不能提供高可用性的效果,集成效果也会比较差。
为了解决这些问题,出现了一个新的 Web 应用开发方法,也就是应用服务器的方式。目前,应用服务器已经成为电子商务应用中一种非常关键的中间件技术。如今,各大主要软件厂商纷纷将应用服务器作为其电子商务平台的基础,如 IBM 的 Websphere,Oracle 的Internet 应用服务器,Sybase 的 Enterprise 应用服务器等。本节将阐述应用服务器的概念、相关技术及发展方向,并就目前主流的应用服务器产品进行简单的介绍。
15.2.1 应用服务器的概念
应用服务器是在当今 Internet 上企业级应用迅速发展、电子商务应用出现并快速膨胀的需求下产生的一种新技术,通过它能将一个企业的商务活动安全有效地实施到 Internet 上,实现电子商务。它并非一种传统意义上的软件,而是一个可以提供通过 Internet 来实施电子商务的平台。在分布式、多层结构及基于构件和服务器端程序设计的企业级应用开发中,它提供的是一个开发、部署、运行和管理、维护的平台。它可以提供软件“集群” 的功能,因而可以让多个不同的、异构服务器协同工作、相互备份,以满足企业级应用所需要的可用性、高性能、可靠性和可伸缩性等。
故而,从某种意义上说,应用服务器提供了一个“企业级应用的操作系统”。实现 J2EE规范的应用服务器称为 J2EE 应用服务器。现代社会商机稍纵即逝,电子商务应用要求能很快地开发出功能强大的系统。应用服务
器可以帮助企业快速架构一个基 Internet 的电子商务系统,而且拥有极高的稳定性、可扩展性和安全性。它能够:
(1)更合理地分工企业级应用开发,加快应用的开发速度,减少应用的开发量。应用服务器将系统功能与业务功能分开,使得编程人员能够集中精力在业务功能上,在系统内建立/部署的构件越来越多,并且为分布式架构的时候,系统功能必将变得越来越复杂;而与此同时,对可靠性(负载均衡、容错和故障恢复)的需求也会越来越高。开发人员只关注编码业务方面的功能,对系统一级的功能并没有多少兴趣。因为系统级底层功能的实现,一般需要非常复杂的专业技能,因此对功能实现的合理分离可以允许技能的优化。
在应用服务器上开发采用的模块化方法,提供了大量的可重用模块。一个新的系统可以通过组合一些现成的框架和模块,再加上一定的开发来快速完成。而新开发出的代码又可作为今后重复利用的模块,这一点对于降低开发成本,提高开发速度是非常重要的。
另外,为了便于开发,有些应用服务器还提供开发版的服务器,以便进行各种调试工作。应用服务器一般还提供集成开发环境,将本地编辑、上传、项目管理和调试工具等集中在一起,使开发工作在一个界面内全部完成。还有一些开发环境同时提供后台系统的开发环境,以便同时进行开发管理。此外,还有一些产品内置一些代码的自动生成器,数据库设计辅助工具等,例如 ORM(ObjectRelation Mapping,对象关系映射)等,这些都有效地提高了开发速度,减少了应用开发量。
(2)应用设计、开发、部署、运行、管理、维护的平台。应用服务器既是应用开发的平台,包括表示层、应用层和数据层的设计模式和编程环境;同时又是多层结构应用的部署、运行平台,对多层结构应用进行配置、启动、监控、调整,并在开发的不同阶段承担不同的职责。
- 设计:应用服务器完成底层通信、服务,并屏蔽掉复杂的底层技术细节,向用户提供结构简单、功能完善的编程接口,让用户可以专心于商务逻辑的设计。
- 开发:应用服务器提供了完全开放的编程语言和应用接口,用户可以用任何自己习惯的开发工具来工作。另外应用


发布评论