关键词 中间件;Tuxedo;数据库
近年来随着网络的盛行,应用程序的规模不断扩大,程序的维护成本越来越高。同时,计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。为了降低应用软件的维护成本,解决分布异构问题,人们提出了中间件(middleware)的概念。
所谓的中间件就是一种独立的系统软件或服务程序,它位于客户机(或服务器)操作系统之上,管理计算资源和网络通信 。它支持标准的协议和标准的接口,支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互 。中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而减轻了维护的负担。
中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。因此,在不同的角度或不同的层次上,对中间件的分类有所不同。基于目的和实现机制的不同可将中间件产品分为交易管理型、消息型、CORBA型和容器型四种。交易管理中间件是开发三层结构应用系统的基础支撑平台,它提供一个基础的框架来建立、运行和管理一个三层C/S模式的应用,在分布式联机事务处理系统中,对业务处理流程、系统资源、应用程序进行有效的管理,从而保证数据一致性,提高系统效率和可靠性,使应用系统便于扩展,并缩短开发周期 。目前比较成熟的交易中间件产品主要有IBM 公司的CICS和BEA公司的TUXEDO,本文所介绍的系统正是基于BEA TUXEDO来实现的。
TUXEDO是在1984年由贝尔实验室开发成功的,1992年易主Novell公司,1996年由BEA公司收购,经过十多年的不断更新和完善,TUXEDO已经发展成为交易中间件领域事实上的标准 。几乎所有硬件和数据库厂商均将TUXEDO 作为进行基准测试时首选的中间件平台,以提高其产品的资源利用率和交易处理性能。
BEA Tuxedo是基于C写成的,它不仅可以支持Unix平台,也支持Windows-NT/2000、Open-VMS等操作系统。作为交易中间件领域的主流产品,BEA Tuxedo主要应用在各种并发处理大量业务系统中。目前,BEA Tuxedo广泛应用于银行、金融、电信、交通、零售、制造、医疗、政府等领域,这些用户的共同特点是具有复杂、高端的信息管理系统,应
用环境多种多样且系统用户在地域上分布很广,其应用通常建立在主机或大规模客户机/服务器系统之上,且业务处理量极大。本文所介绍的系统就是基于上述的应用特点,利用BEA TUXEDO实现的数据综合服务平台。
BEA Tuxedo支持ORACLE、SYBASE、INGRES和DB2等UNIX上的大型数据库和NT上的SQL Server,并且还支持C-ISAN文件系统。即可以通过XA协议,也可不用XA协议与数据库进行连接 。本文所介绍系统用到的是Oracle数据库,该系统针对多种信息网关接入,完成海量数据信息的存储与管理,以及多种信息实时处理,通过Tuxedo创建服务向用户提供对这些数据的各种操作,是一个数据综合服务平台。
考虑对数据库访问时的功能、性能和安全性等方面的要求,同时考虑使应用软件在不同的硬件平台上,利用不同的网络协议能够平滑地运行,我们在前端客户机和后端数据库服务器之间加入中间层,即中间件BEA Tuxedo,来实现更好的负载平衡、连接管理和调度(如图1所示)。
该系统中,客户不是直接与数据库服务器建立连接,而是通过中间件BEA Tuxedo建立连接,各种数据库操作也是通过Tuxedo管理进程完成的。
图1 系统基本架构
在传统的数据库访问系统中,数据库访问客户端直接与数据库服务器相连,这种模式在用户访问量较小的应用中游刃有余,一旦用户访问量增大,这种模式下构建的系统将顾此失彼,不仅基本的功能发挥不出来,往往由于数据库服务器端的负担过重将导致整个系统的瘫痪。所以在大用户量访问的数据库应用系统中,我们需要考虑减轻数据库服务器的负担。如本文所实现的系统,我们在数据库访问客户端与数据库服务器之间加入中间件BEA Tuxedo(如图1所示),使得数据库服务器不必进行通讯和交易管理,而专注于管理数据。在这种情况下,数据库成了一个纯RM(Resource Manager),极大地改善了整个系统的性能。
在整个系统中,BEA Tuxedo主要发挥如下功能:
●在客户端和数据库服务器之间进行通讯和传输
●提供良好的系统管理及交易、配置的分布式管理
●容错处理,提高系统可靠性
BEA Tuxedo可以从多个客户端收到数据流,而且可以向多个服务发出请求,并不是在C/S间建立一对一的关系。这种特点保证了大量用户可以同一时间访问数据库服务器,提高了系统的效率。将BEA Tuxedo应用到系统中来还有一个好处就是屏蔽了客户端的OS差异和异构数据库的底层细节问题。当客户发出对某个数据库的SQL请求时,先通过Tuxedo搜索当前可用的匹配数据库连接,并将SQL请求转发给对应的数据库服务器,数据库服务器执行SQL语句后,把结果传给Tuxedo,再由Tuxedo传回给用户。
这种模式下实现的系统,简化了客户端和数据库服务端的应用开发。对客户端而言,不需要关心与数据库通信的细节问题,只需调用Tuxedo提供的相关接口函数将要进行的数据库操作发给Tuxedo,然后接收返回的执行结果进行相关解析;对数据库服务器而言,也不需要知道究竟是谁通过什么方式要来操作数据库,只需专注于执行由Tuxedo转发的SQL语句。
这种三层模式下实现的系统,在用户量较小的时候,具有与传统两层模式系统同等的性能,用户量越大,其优越性越明显。
2.3.1 Tuxedo的通信方式
Tuxedo提供七种通信方式,分别是同步/异步调用、嵌套调用、转发调用、会话通信、广播和通告、订阅与发布以及队列通信。本文所介绍的系统采用同步/异步调用通信方式,如图2所示。客户程序使用tpcall()调用把一个请求送到服务程序X,然后就失去了控制权。X服务处理完请求后,通过tpreturn()调用将控制权返回给客户程序。客户程序得到控制权后,接着执行tpcall()以后的流程。
图2同步/异步调用
其中ATMI(Application Transaction Monitor Interface)是一种简单且容易定义的API接口,它是BEA Tuxedo提供的一个基于C语言的编程接口,以便用于开发客户程序和服务程序。
本文以下所说的客户端和服务端均是指Tuxedo的服务端和客户端,即图2中的Client和Server。
2.3.2 服务程序与客户程序的实现
在整个系统中,Tuxedo负责交易请求的接收和分发,以及事务完整性控制。涉及到数据的存取,则调用OCI相关函数对数据库进行操作,TUXEDO和数据库之间的协调与配合通过标准的XA接口完成。
服务端是Tuxedo实现数据访问的关键部分,是连接客户端和数据库服务器的中枢,主要完成如下功能:(1) 监听、探测客户端的连接请求;(2)建立到数据库的连接;(3)负责调度SQL语句的执行,将结果数据返回到客户端。
服务端与数据库的连接是通过Tuxedo内部机制自动实现的。当Tuxedo系统启动成功后,Tuxedo服务端程序会自动与配置文件中所配置的Oracle数据库建立连接,该连接会被一直保持和复用,直到Tuxedo系统或Oracle数据库关闭。该机制大大减少了进程与数据库连接的次数和时间,提高了系统的效率和安全性。
Tuxedo提供ATMI编程接口供开发者来创建BEA Tuxedo客户程序和服务程序,但服务程序并不全部由开发者来编写,开发者只需写一些称为服务的函数,然后和BEA Tuxedo的一些二进制程序联编成一个可执行的服务程序。当一个Tuxedo服务器启动时,编写的服务端程序也会随之运行,直到接到shutdown消息。一个Tuxedo服务器在停止以前,可以执行成千上万个服务,这些服务可以被Tuxedo编译成可执行文件并加载到服务器上运行。
我们的系统涉及对数据库的操作包括查找、统计、插入和删除,对上述几项功能的实现,我们在服务端分别创建了不同的服务函数供客户端调用,客户端和服务器之间遵守预先定义的应用接口标准。
在客户端,首先通过调用tpinit()与服务端连接,进行交互,完成的功能主要是:(1)客户端认证;(2)连接服务端的公告牌BB,使进一步的ATMI函数得到信息;(3)使公告牌联络BBL了解BB中已经存在请求。然后通过tpcall()调用相关的服务,依据预先定义的应用接口协议,接收并解析服务端返回的结果数据,根据实际的应用需要作进一步处理。在我们的系统中,客户端是用VC实现的,以动态连接库的形式提供给高层应用者调用。这样,不管数据库如何变化,只要Tuxedo客户端提供的接口不变,高层应用不需做任何改动。
2.3.3 Tuxedo的配置文件
在利用Tuxedo开发应用系统时,必须有描述应用机器和服务信息的配置文件,该文件存在于服务端,其中存放有Tuxedo系统运行的各种参数,包括诸如与数据库的连接信息,服务端提供的服务信息、客户端调用服务所必须具有的认证信息等。通过命令tmloadcf生成二进制文件TUXCONFIG供Tuxedo系统运行时获取相关信息。当启动Tuxedo服务时,Tuxedo会从TUXCONFIG中读取相关有用的信息,支持服务的实现。配置文件中各参数的详细信息可查阅有关Tuxedo的官方文档。
图3 Tuxedo的配置界面
另外,除了通过命令行生成TUXCONFIG之外,Tuxedo提供了更直观的图形界面配置方式,如图3所示。
启动图形界面首先需要在服务端的命令行运行下述两条命令来启动与图形界面相关的进程。
>tuxwsvr –l //network address:port –-i
$TUXDIR/ udataobj/ tuxwsvr.ini
>wlisten
其中port为任一空闲端口,然后可通过http://network address: port/webguitop.html登录到图形界面。
2.3.4 系统性能
在安全上,Tuxedo提供了五个级别上的安全认证,分别是NONE、APP_PW、USER_AUTH、ACL和MANDATORY_ ACL,用户可根据系统本身的保密要求选用不同的认证方式,而且实现起来也比较简单。另外,与数据库之间的通信安全,Tuxedo的内部机制提供了保证,只需在服务端的配置文件中进行相关设置即可,不需开发者另费心思。
在容错性上,TUXEDO随时知道它控制下的资源情况,并利用这些信息为应用提供最大可用性。比如若一台数据库服务器出现故障,TUXEDO可自动地将客户请求重新镜像到可以完成相同服务的另一台数据库服务器上,使客户感觉不到变化。同时,在我们的系统实现中,配置了两台Tuxedo服务器来管理整个系统资源,如果其中一台Tuxedo服务器因为某种原因宕机,客户端的服务请求就会被迁移到另外一台Tuxedo服务器上继续执行,这种迁移对高层的应用是完全透明的。以这种方式实现的系统,其容错性大幅增强。比如一台服务器宕机的概率是0.1,采用双机之后,系统宕掉的概率就减小为0.01,系统的高可靠性得以保证。采用双机还有一个好处就是允许更多的用户同时调用服务。
在负载均衡上,传统两层模式实现的系统中,负载均衡往往是由数据库服务器或客户端分出一部分精力来承担的,实际效果差强人意。但三层模式实现的系统中,中间件的主要任务是监控并管理系统,所以在负载均衡方面有能力做的更好。TUXEDO的事务管理器自动地在系统中完成动态负载平衡调度。管理者给每个服务和服务请求赋予一个负载因子,依据负载因子累加产生每个服务器的负载总量,TUXEDO在BB中保持对每个服务负载总量的跟踪,当所有服务都忙的时候,BEA Tuxedo能够选择负载最轻的一个服务,从而使系统达到最快的处理速度。
软件开发技术不断推陈出新,从C/S结构到B/S结构,从两层到三层,从CORBA、COM、到J2EE、.NET,现在基于中间件的开发应用系统已成为主流。本文介绍的基于BEA Tuxedo的数据库访问系统只是一个普通应用,对整个中间件的应用而言仅是冰山一角。随着软件技术的不断发展,中间件在整个软件领域的位置日益凸现,作为中间件的中坚产品Tuxedo具有不可比拟的优势,其开发利用有待我们进一步探索。
[1] 许春金.Tuxedo中间开发与配置[M].北京:中国电力出版社 2003
[2] 杨敏,丁月华,文贵华. 基于中间件Tuxedo的三层模型的应用开发. 电脑开发与应用, 第18卷第2期: P11-13
[3] 罗涛,张正. 基于Tuxedo中间件的分不是业务系统的实现. 计算机工程与应用, 2005.21: P104-106
[4] 何红波, 王文军. Tuxedo的技术特点及典型应用. 信息技术, 2005年第5期: P37