中间件介绍:

介于客户机和server之间的夹层,突破了传统的c/s架构,为构建大规模,高性能,分布式c/s应用程序提供了通信,事物,安全,容错等基础服务,屏蔽了底层应用细节,应用程序不必从底层开发,以自身的复杂性换取应用程序开发的简单。

Tuxedo是什么?

Tuxedo:Transaction for Unix has been Extended for Distributed Operation分布式操作扩展之后的Unix事务系统。

交易中间件位于client和server之间

Tuxedo是一个事务处理(TP)监督器(transaction
processing monitor),它管理联机事务处理(OLTP)系统操作的事务。客户通过结构化查询语言(SQL)调用,或其他类型的请求,产生对server的请求。这个事务处理监督器确信,正确地进行了改动,以保证数据的完整性。这在一个事务能够改变多个位置的数据库的分布式数据库环境是很重要的。这个事务处理监督器使用双阶段提交,以保证全部的数据库都已经接收和认可了这些数据的正确性。否则,这个数据库返回它的事务前状态

WTC:WebLogic
Tuxedo Connector

OLTP:
On-Line Transaction Processing 联机事务处理

OLAP:
On-Line Analytical Processing 联机分析处理

ATMI:application-to-Transaction
Monitor Interface 应用程序到事务监视器接口

DTP:Distributed
Transaction Processing分布式事务处理

MSSQ:Mutile
Server,Singal Queue

TUXEDO
採用三层结构的组件软件模型

² 
Client
为第一逻辑层。实现用户交互和数据表示,向第二层的Server发请求,调用业务逻辑处理服务。

² 
Server组件中间层,这些组件由TUXEDO管理,实现业务逻辑服务,接收服务请求,并返回服务结果。

² 
第三层为资源管理器,比方像关系数据库。负责管理应用系统的数据资源

Tuxedo的核心子系统:

事务管理器 TM(Transaction Manager)

工作站 WorkStation

域 Domain

队列 Queue

队列:

s

X/Open DTP
模型:

Tuxedo
与 WebLogic
通过WTC互联:

通经常使用TUXEDO实现系统的核心业务,用WEBLOGIC做为系统扩展到web的平台,实现电子商务。由WEBLOGIC
调用
TUXEDO上的服务,须要在Tuxedo和Weblogic之间建立连接。

WTC不仅能让WEBLOGIC调用TUXEDO中的SERVICE,并且能让TUXEDO调用WEBLOGIC中的EJB。但WTC仅能实现这两个平台之间的互联。

Tuxedo与WebLogic
之间通过Domain实现互联调用,Tuxedo与Weblogic分别代表两个TDOMAIN。

使用WTC时,Tuxedo方面要配置对应的Domain配置文件(dmconfig),指明本身以及weblogic所在Domain的IP和Port。

使用WTC时Weblogic方面要做的改动是:

—在ClassPath
中,添�jamti.jar所在的路径。

—在weblogic的配置文件,bdmconfig.xml
中,添�描写叙述两个TDOMAIN的部分

在Tuxedo和weblogic
启动对应服务后,weblogic通过client端掉用对应ejb,再有该ejb调用tuxedo
service。

Tuxedo应用开发:

开发TUXEDO C/S系统的必要步骤:

Ø 
环境变量设置,通常写在setenv.sh

TUXDIR:Tuxedo应用的安装路径。

TUXCONFIG:便以后的Tuxedo配置文件路径。

VIEWDIR/VIEWFILES:view文件的路径和文件名称。

LD_LIBRARY_PATH:Tuxedo应用时,须要寻找的库文件的路径。

PATH: Tuxedo特用的一些可运行文件的路径

假设涉及到Domain,还有对应的环境变量。

Ø 
编码,并编译client/服务端程序。

Ø 
编写/编译Tuxedo配置文件。

Tuxedo配置文件ubbconfig
描写叙述了应用配置信息。Ubbconfig文件是二进制文件,是由文本文件通过tmloadcf
命令编译而成。

Ubb
文件的内容包含例如以下的Section:

Resources:包括整个应用范围的信息。必须在配置在文件第一节,必不可少。

Machines:节包括应用有关的每一个处理器的信息。本节必须在*RESOURCES节后列出。

Groups:节包括服务组的定义。一台机器至少要定义一个服务组,每一个组仅仅要定义组名,映射组名的组号和逻辑机器名

SERVERS:包括了服务进程的信息。一个入口代表一个应用启动时载入的服务。这些信息包括服务名,命令行參数,服务环境,重新启动动等等。

SERVICES:提供了应用的特殊交易的信息,包含负载平衡(LOAD)和数据缓冲类型检查(BUFTYPE)。假设所有都是缺省值则本节能够省略。

上述每个Section中,包括众多的Option选项,详细应用时,察看Tuxedo相关文档,进行配置。


在执行时,这些配置信息被装入一段共享内存,称为(Bulletin-Board)。


TUXEDO提供一个管理进程,称为BBL(Bulletin Board Liaison),包括了一个公告牌的本地拷贝和本地server上应用的状态。


TUXEDO提供的还有一个管理进程DBBL(Distinguished Bulletin Board Liaison),用于多server配置时。DBBL与BBL协同,保证全部部分的公告牌内容的一致性。

Ø 
启动服务。

Ø 
測试(功能測试、压力測试)。

client/Client开发

client的任务:

获取採集运行操作应得的数据。

发起向服务端的请求并等待服务端回应。

将结果依照一定格式返回给用户

client的程序设计和实现应该分成两个部分:

用户处理过程。

Tuxedo功能部分。

开发Client涉及的API:

进程管理的API:

int tpinit(TPINIT *tpinfo)

负责将Client端连接到BB,使Client端能够进一步调用ATMI函数。

TPINIT參数是一个Tuxedo定义的结构,用以存放一些安全相关的数据(必须在tuxedo的配置文件里打开security选项)。否则,能够使用NULL。

tpinit,不能在server端中出现,否则tuxedo会产生TPEPROTO(协议错)这样一个错误。

int tpterm( )

client调用tpterm( )切断与应用的连接,结束了client的TUXEDO进程
.

编写完毕的Client代码,用buildclient
命令进行编译。

buildclient –f 
filename  -O output file

假设client端是一个workstation(本地没有Tuxedo
server),还要加上-w
选向。

Clieng与Server
之间的通讯接口:

Client通过ATMI提供的API,与Server之间进行通讯,调用Server提供的服务。

通讯主要分为两种方式:

同步方式:採用同步通讯时,Client端在向Server端发出请求后就被堵塞,等待Server端的返回。

同步通讯方式的API:

int tpcall( 
char  *svc,   char 
*idata,   long   ilen, char  
**odata,  long   *olen,  
long   flags)

Svc

调用的服务(service)名称

idata:
指向输入数据缓冲区指针。

ilen:  
输入数据的缓冲区大小。

odata:指向输出数据缓冲区指针的指针。

olen: 
输出数据缓冲区的大小的指针。

flags:
通讯控制标志。

异步方式:採用异步方式时,Client端在发出请求后,能够继续其它的任务,须要结果时,使用API去获取response队列中的结果。

异步通信方式的API

— int tpacall(char *svc, char *data, long len, long
flags)

— tpacall 调用成功后返回一个整数,称为descriptor,client使用这个整数在以后的某个时间来获取结果。

ATMI提供tpgetrply( )
来获取异步调用的结果

— int tpgetrply(int *cd, char **data, long *len, long
flags)

— 參数cd ,
就是存放tpacall返回descriptor的指针。

不管是tpcall、tpacall以及tpgetrply,在client端和server端都能够使用。

Server端开发:


Server是系统资源的联系点。


Server必须公布系统内能够訪问的交易,保证client能够知道把请求发往何处


Server启动后,进入一个循环:接收请求/处理请求/返回节后,周而复始。


系统管理员通过命令tmshutdown,显式地关掉tuxedo的服务。

Server端开发涉及的API:


tpreturn( ):
在Tuxedo中,tpreturn用来取代常规的return函数,运行tpreturn后,server将回应的数据缓冲区返回请求的发起点,交出程序的控制权。

void tpreturn(int rval, long
rcode, char *data, long len, long 
flags)

rval :是返回的结果,一般是TPSUCCESS,
TPFAIL,  TPEXIT。

  
 rcode:是用户自己定义的返回值,用以进一步区分返回结果。

 
  data 
:是返回结果缓冲区。len:是缓冲区长度。

flags : 
结果返回的标志,通常都是0。

 


tpsvrinit()和tpsvrdone()分别用来启动和关闭服务。

假设在server的代码中,不提供这两个函数,Tuxedo将使用缺省函数。

tpsvrinit()用tpopen()缺省打开RM连接。

tpsvrdone()用tpclose()关闭RM连接。

tpsvrinit()仅仅在服务boot起来时运行一次。对应的
tpsvrdone()也仅仅在服务shutdown时运行一次。

设计服务时的几点考虑:


最好不要使用收到的数据缓冲向其它服务请求,由于该缓冲可能被改变引起错误。


所有在服务中分配的数据缓冲,在程序结束时必须所有释放;唯一例外是用在tpreturn()中的返回数据缓冲。


服务中的交易不应调用本服务中的交易,由于easy产生死锁。


一个MSSQ集中的服务须要返回时,应有自己的返回队列;否则会与本集中其它服务冲突。(RQADDR
= XXXX ,同一时候REPLYQ = Y)。

缓冲区数据类型:


Client与Server之间,Server与Server之间,都要通过数据缓冲区来传递数据。


sTuxedo支持下图所看到的的缓冲区类型:


Buffer type包括:STRING,CARRY,VIEW,FML等。

STRING:是以空值结尾的单字字符串

CARRY:有长度定义的二进制数据。

VIEW: 
类似于C的structure。

FML: 
固定结构的自己定义缓冲。

Tuxedo中的事务处理


不管是Client还是Server都能够主动发起一个全局事务。


Tuxedo会对一个transaction产生一个全局交易ID(GTRID),这个ID号在全部的交易參与这样的共享,并唯一标示这个transaction。


Tuxedo通过TLOG,来跟踪一个全局交易。


提供通知(notify)RM的方法,使得RM知道自己參加到一个交易中,并lock住对应的记录。


Tuxedo作为TM,能够管理两阶段提交(two-phase
commit)。使得全部交易參与者一起提交,保持结果的一致性。

TMS和RM之间,使用XA接口来协调工作。

Tuxedo提供tpbegin, tpcommit, tpabort
等API来管理交易

Tuxedo中的事务处理:

事务管理器:

Tuxedo入门学�的更多相关文章

  1. Python语言应用解析,如何入门学Python?

    Python在机器学习人工智能领域非常流行,可以说是算法工程师的标配编程语言.Python语言广泛应用在web开发.大数据开发.人工智能开发.机器学习.后端开发等领域之中,近几年Python语言的趋势 ...

  2. tuxedo入门

    为文件增加用户执行权限: 官网下载tuxedo111120_64_Linux_01_x86.bin su //进入root操作,防止权限不够 创建文件夹,用来做tuxedo文件的安装路径 cd /op ...

  3. JAVA反射机制学�

    JAVA反射机制:对于随意一个类,都可以知道这个类的全部属性和方法:对于随意一个对象,都可以调用它的随意一个方法和属性:这样的动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. J ...

  4. 工作vs.学�

    近一两年来,我先后对[工作与学习]的复杂过程有过多次的头脑风暴,而且感觉在这方面略有所成(看这里和这里):当然既然仅仅是头脑风暴,所谓的所成也仅仅是一些粗糙的想法,一些没有实证过的如果,算是积累而已, ...

  5. Tuxedo入门学习

    中间件介绍: 介于客户机和server之间的夹层,突破了传统的c/s架构,为构建大规模,高性能,分布式c/s应用程序提供了通信,事物,安全,容错等基础服务,屏蔽了底层应用细节,应用程序不必从底层开发, ...

  6. AJAX基础知识点学�

    1.AJAX(Asynchronous JavaScript and XML)即,异步JavaScript和XML 2.同步/异步差别 同步: ①每次进行整个页面的刷新 ②同步的链接在同一时间仅仅能有 ...

  7. Apidemos-->Views-Lists-Cursor(people)学�

    Apidemos-->Views-Lists-Cursor(people)-主要用到了获取手机联系人信息,属于内容提供者的范畴,要想了解这方面的内容,能够參考官方docs /sdk/docs/g ...

  8. SSH深度历险(四) Maven初步学�

    这几天接触这个词,非常多遍了,仅仅是浅显的体会到它在GXPT中的优点,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享. Maven是基于项目对象模型(POM),能够通过一小段描写叙述信 ...

  9. 从0开始快速入门学Java----基本篇

    由于是0基础入门java,所以花了比较多的时间学习了基本语法知识,阶段性梳理下知识: 1. Java的介绍+JDK安装及环境变量配置+第一个程序HelloWorld的编写 这部分开始遇到的问题比较多, ...

随机推荐

  1. 验证码 Captcha 之大插件

    验证码 Captcha 之大插件小用 不知何年何月才能完成OADemo啊,总之还是一步一步来吧,这段时间开始着手了,先做登陆.  前段时间研究了一下在CentOS7下安装Mysql和Memcached ...

  2. C++晋升之dynamic_cast

    danamic_cast 动态类型转换 ----RTTI提供的的操作符 ----动态:在执行阶段 ----类型转换:检測指针或引用类型,true->转换 ----体现价值的地方:用于多态 --- ...

  3. OCP读书笔记(1) - Oracle核心概念和工具

    ohasdoracle high available service daemon OEMweb -- Database Control资料库 -- sysman Starting Oracle Re ...

  4. Mod in math

    An Introduction to Modular Math When we divide two integers we will have an equation that looks like ...

  5. mysql相关日志汇总

    日志作为重要的查询问题的手段.所以尽量记录上自己须要的日志.以供自己查询一些问题. MySQL有下面几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-q ...

  6. 提领NULL指针

    通常之中导致程序崩溃的最重要的原因是试图取消引用NULL指针.正如在以前的文章中指出,智能指针RefCountPtr和ScopedPtr它提供了一个诊断的执行时间. 但,并不是所有的指针是所有的对象都 ...

  7. libsvm中的dec_values以及分类结果评分问题

    最近一个图像识别项目里需要对分类的结果进行打分,因为使用的是libsvm3.12,一开始决定直接将svm_predict_values函数的dec_values作为评分返回,后来研究了之后才觉得里面有 ...

  8. Wix打包系列(七) 添加系统必备组件的安装程序

    原文:Wix打包系列(七) 添加系统必备组件的安装程序 我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件.这里以.Net Fr ...

  9. AbstractQueuedSynchronizer的介绍和原理分析(转)

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  10. C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息

    原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...