2013-08-22 15:09:54| 分类: Networks | 标签: |举报 |字号大中小 订阅
首先介绍一下什么是中间件?中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。
世界著名的咨询机构Standish Group在一份研究报告中归纳了中间件的十大优越性:
l
l 缩短应用的开发周期
l 节约应用的开发成本
l 减少系统初期的建设成本
l 降低应用开发的失败率
l 保护已有的投资
l 简化应用集成
l 减少维护费用
l 提高应用的开发质量
l 保证技术进步的连续性
l 增强应用的生命力
Tuxedo是第一个严格意义上的中间件产品。Tuxedo是1984年在当时属于AT&T的贝尔实验室开发完成的,但Tuxedo在很长一段时期里只是实验室产品。直到BEA公司1995年收购Tuxedo后,使Tuxedo现已经发展成为交易中间件领域事实上的标准。
TUXEDO是在企业、Internet 这样的分布式运算环境中,开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。
TUXEDO采用三层结构的组件软件模型。
图1 BEA TUXEDO 的组件软件模型概要
图1表示TUXEDO的组件软件模 型的概要。该结构分为三层:
l 客户为第一逻辑层,实现用户交互和数据表示,向第二层的服务器请求调用核心的业务逻辑处理服务,比如数据库的读取和更新。
l 中间层为服务器组件,这些组件由BEA TUXEDO管理,实现核心的业务逻辑服务,并将这些服务按名字广播,接受并处理从客户或其他服务器发出的请求这些服务的消息,并将处理结果返回给请求者,即客户或其他服务器。
l 资源管理器,比如像关系数据库,构成模型的第三层,负责管理应用系统的数据资源。服务器组件在完成服务的过程中通过资源管理器存取它管理的数据,或者说请求资源管理器的数据服务。
相对于以数据库为中心的的两层客户/数据库服务器模型,BEA TUXEDO的三层结构模型,客户/应用服务器/数据库将应用的业务逻辑和用户界面的表示分开。 这样就允许开发人员专注于应用的核心业务逻辑的划分、封装、与相互作用,快速建立系统的核心业务功能的原型。
另外,明确地划分界面表示和业务逻辑,对用户有效地管理应用系统也是意义重大。对具有成百上千个客户的两层结构的系统来说,经常性的更新、升级系统是一项十分棘手的维护工作,尤其是当系统已经投入实地运行以后。三层模型将用户交互的表示部分与内部的业务逻辑分开,这样对业务逻辑的一些修改甚至数据库模式的改动经常都不要求客户的改动。而且,将核心业务逻辑组件和表示逻辑及数据层划分开,BEA TUXEDO可以在服务级别上非常有效地管理应用的运行。它可以动态地管理消息流程和服务请求,快速启动和停止服务器,根据变化的负荷复制服务器,动态地广播、撤消服务器中的服务,将服务从一个服务器转移到另一个服务器等等。这些对中间层应用的服务级别上的管理大大增加了分布式应用的伸缩性和灵活性。
TUXEDO设计了数据资源的绝对完整性,能确保异构(或同构)的数据库以及它资源管理器之间的完整性。
TUXEDO使多个客户连接到一个服务器进程,由这个服务器进程存取数据库,这样,数据库为处理连接所需的资源大大减少。 另一方面,网络上流动的只有相对较少的客户或服务器的请求和服务器处理的结果。
此外,TUXEDO特有的一些机制也能极大提高应用系统的性能。比如利用异步RPC机制实现扇出并行,利用转发机制实现流水线并行,利用多服务器单队列实现多处理并行等。所有这些因素使TUXEDO的应用系统具有极高的性能。世界上大部分硬件服务器的RPC性能指标都是在TUXEDO上完成的。
另外,可将Service根据优先级的不同赋权值,系统根据优先级权值将客户请求(Service)排队管理。
有多台机器做应用服务器时,系统可自动根据每个机器的负载情况决定服务程序在负载小的那一台机器上执行。
在分布式系统中某一服务器节点发生故障时,TUXEDO能在硬件故障情况下在其它结点上重新运行进程,以保证服务提供的稳定性。
TUXEDO还可多台应用服务器互相备份。
TUXEDO通过结构化用户界面支持应用服务的验证、授权和存取控制,允许用户加入自己的验证服务模块。TUXEDO还提供信息加密服务,允许对网络上传输的信息按RSA 的RC4算法加密。
BEA TUXEDO的三层结构,使开发人员能够按组件的思想专注入于业务逻辑的开发,用户界面部分可用流行的前端开发工具来快速完成。而客户和服务器之间、服务器和服务器之间的通讯,异构平台之间的数据变换,以及服务器和数据库之间的集成和事务控制都由 TUXEDO来完成。
TUXEDO系统提供从一个中心点对整个分布式系统进行全局监控及管理的能力, 管理员能根据一个整体系统视图(而不仅是单个节点或单元)提供的信息,作出决定和采取动作。
TUXEDO 的三层结构组件软件模型下开发的应用程序以服务器组件和客户组件为安装、升级的单位,当一个组件需要更新时,管理人员甚至能够在运行系统不停机的情况下完成系统的升级,
TUXEDO是一个非常开放的平台,支持三十多种服务器平台,包括大多数的 UNIX服务器 ,WindowsNT 服务器,IBM的S/370,S/390,加上AS/400和 Tandem公司的 NonStop系统。它的客户支持几乎所有的工作站,包括 UNIX,MS-DOS,Windows系列,OS/2,Macintosh等。
TUXEDO支持X/Open组织 的分布式 事务 处 理 模型DTP,事务定界标准TX, 应用程序事务处理接口标准XA TMI以及 和资源 管理 器 (像数据库系统)的接口标准XA,并且还支持事务处理器之间的互操作标准OSI-TP。 BEA TUXEDO的客户端通过DLL 可以和Visual C++、Visual Basic、 Power Builder、 SQL Windows、Delphi、Develop/2000 以及其他4GL和CASE 工具互连。
软件可伸缩性就是可以很容易地增加被支持的用户数和应用的全局吞吐量。
BEA TUXEDO支持二维的可伸缩性。二维可伸缩性可在结构上的任意位置添加异质 资源,而不改变已存在的应用的结构。允许对一个复杂的混合结构的支持,为联机网络系统提供了广泛的规模选择范围。任何与数据表示有关的(如不同的处理器表示)可以由TUXEDO透明地解决。
除了像C,C++和COBOL这样的第三代语言编程环境,TUXEDO系统享受最广泛的第三方工具的支持。
并有丰富的通信方式。有同步调用、异步调用、管道通信、会话、广播、通知、队列、发布订阅等通信方式,能很好地满足应用开发的要求。
Tuxedo可以有效地整合企业异构C/S系统,实现大规模的关键业务处理和分布式事务管理,从而为企业提供一个可靠的、高性能的、易维护的三层分布式计算机环境。图2展示了一个基本Tuxedo系统的组成和工作原理。
图2 Tuxedo系统的组成和工作原理
① Client向System/T发出查询请求,以找到Server消息队列的地址;
② Client根据找到的入口地址将请求发送到Server的消息队列中;
③ Server处理请求,并将结果返回给Client的消息队列。
System/T是Tuxedo系统的核心,它实现了Tuxedo的所有功能和特征,如C/S数据流管理、服务请求的负载均衡、全局事务管理以保证交易的完整性、同步/异步服务请求、两阶段提交以确保消息的发送等。System/T提供了一个类似公告栏的服务,用以发布C/S计算机环境中所有服务器、服务和客户机的信息,供其它分布式计算的参与者使用。
创建使用Tuxedo的程序与在C和C++编程语言中创建其它应用程序一样,Tuxedo提供了一个其于C语言的编程接口,即应用程序事务监控接口ATMI,这套接口很容易使用,以便用于开发客户程序和服务程序。除了C语言接口外,Tuxedo还提供了COBOL接口。
1) 调用tpchkauth()决定加入一个应用程序所需的安全级别。可能出现的响应包括:没有安全级别,应用程序口令,应用程序授权,访问控制列表,连接级加密,公钥加密,审计。这些可以根据你的需求进行选择。
2) 调用tpinit()来连接到一个Tuxedo应用程序,所需的安全信息作为tpinit()的参数传给了应用程序。
3) 调用tpcall()、tpacall()/tpgetrply()等来执行服务请求。
4) 调用tpterm()来断开和BEA Tuxedo应用程序的连接。
服务程序不用全部由开发者来编写,开发者只需写一些称为服务的商业函数,然后和Tuxedo的一些二进制程序联编成一个可执行的服务程序。Tuxedo服务程序启动后,它总是保持运行状态,只到接收到一个shutdown消息为止。一个典型的Tuxedo服务程序在shutdown或reboot之前都在执行着数千个服务。
⑴. 在Tuxedo服务程序启动时,执行tpsvrinit()函数,可以在里面打开一些如数据库之类的资源供以后使用;
⑵. 在Tuxedo服务程序关闭时,执行tpsvrdown()函数,可以在里面关闭tpsvrinit()中打开的资料;
⑶. Tuxedo服务程序以服务的形式来响应客户程序的请求,客户程序不是通过名字来调用服务程序的,而是调用服务,客户程序不知道处理它请求的服务程序的位置;
⑷. 服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序;
在Tuxedo系统中的所有通信过程都是通过类型缓冲区来完成的,Tuxedo系统提供了大量的类型缓冲区来供开发者使用。所有类型缓冲区都必须通过Tuxedo的tpalloc(), tprealloc(), tpfree()这些ATMI来分配回收,它们都有特定的头部。
统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同CPU构架以及不同操作系统之间得到统一的处理,这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开发上。
在浙江的彩铃业务中,业务的处理需要BOSS系统做一些相应的操作,而浙江的BOSS已全面的使用了TUXEDO中间件,所以我们就需要开发一个使用TUXEDO的客户端程序UITUX来完成彩铃业务的一些操作。
UITUX进程主要通过socket与IIP通信得到IIP的命令请求,然后根据此命令向TUXEDO进行一次服务调用,得到BOSS的应答后,再转换为与IIP通信的格式通过socket将应答发送给IIP。
因为每次命令都是由呼叫产生的,所以就需要系统有比较好的性能。为了实现比较高的吞吐量,UITUX进程中与TUXEDO的交互,使用了异步通讯,此处就是通过函数tpacall()和tpgetrply()实现。在调用tpacall()成功后,将返回一个非负描述符,此描述符能够唯一的标识此次操作。而在tpgetrply()得到BOSS的应答时,通过指定的参数,可得到应答的非负描述符,此描述符与此命令在tpacall()时得到的描述符相同,这就使异步通讯得以完成。
UITUX进程的流程如下图所示。