Tuxedo Summary
1. 强大的C/S通信功能
不仅支持请求/应答,还支持保持交易状态的会话模式、基于发布/订阅的事件代理模式、基于消息通知的单播/多播模式、基于消息队列的可靠消息存储和转发方式
2. 强大的联机交易功能
通信传输的只是较少的客户请求服务名和服务结果,不再是大量繁琐的SQL请求应答,有异步RPC机制实现扇出并行、利用MSSQ实现多处理并行、利用转发机制实现流水线并行
3. 强大的分布式协调能力
作为一个TP Monitor,Tuxedo使用全局事务跟踪参与者,使用两阶段提交来协调完成事务
4. 完善的负载均衡机制
Tuxedo支持主机级和系统级的负载均衡,使得更多的请求被发送到计算能力较强的计算机上,默认会自动的负载均衡,也可以通过配置负载因子来干预调度。
5. 数据依赖路由
数据依赖路由根据请求缓冲区中指定字段的取值范围,来把请求映射到某服务器组上的负载均衡算法
6. 请求优先权
7. 容错和透明故障迁移
ATMI的消息通信方式
Tuxedo使用IPC消息队列来实现请求/应答式通信,消息队列是面向无连接通信的关键技术,Tuxedo系统会给每一个服务进程分配一个IPC消息队列,称为请求队列,给每个客户机分配一个响应队列,这样客户机和服务器之间就不需要建立通信连接,客户机把请求消息放入服务器的请求队列中,然后从自己的响应队列中检查响应结果。
在ATMI编程环境中,客户机和服务器之间使用消息缓冲区来进行数据交换,由于ATMI消息缓冲区具有格式化和自描述的特点,因此又称之为类型缓冲区(Typed Buffers),类型缓冲区克服了平台差异,为不同系统下的数据表示提供了一个统一的展现
Tuxedo客户机使用tpalloc()分配一个请求缓冲区,然后往里面放入请求消息,在执行tpcall()去调用一个服务,客户机Tuxedo系统会根据tpcall()指定的服务名称进行命名映射(name mapping),找出实现这个服务的后台进程IPC消息队列入口,然后进行类型判别(type validation),以检查请求消息和缓冲区是否符合服务参数的要求,如果符合,就从Tuxedo服务器的运行时系统中取出服务的优先级,并把它绑定到请求消息上(service prioritization)。
在数据依赖路由处理中,客户机Tuxedo系统根据路由标准决定把请求消息发送到哪一个后台进程IPC消息队列,客户机系统接下来还可以对请求消息进行编码、压缩、事务上下文设置、安全设置等。这种无连接的通信不仅减少了建立连接的额外开销,还提高了网络的使用效率
Tuxedo大量使用了操作系统的IPC资源,UNIX System V提供了3类IPC资源:消息队列(MSG)、共享内存(SHM)和信号量(SEM),只有极少数操作系统如AIX的IPC资源是自适应的,不需要手工进行调整。
编译Server端和Client端
buildserver [-s {@ filename|service [,service…] [:func]|:func}] [-v] [-o outfile] [-f firstfiles] [-l lastfiles] [{-r|-g} rmname] [-k] [-t]
buildclient [-v] [{-r rmname | -w}] [-o name] [-f firstfiles] [-l lastfiles]
工作站客户端(WorkStation)
工作站客户端通过WSNADDR环境变量连接到WSL,再有WLS分配WSH作为请求代理来调度服务,决定客户机是哪一种类型是在链接时不是在设计时决定的,链接了TUXEDO本地库(libtux.lib)生成的就是本地客户端,链接了W/S库(libwsc.lib以及wtuxws32.lib)生成的客户端就是工作站客户端,编译时加上-w选项就可以指示编译器链接/WS库。
WSL是Tuxedo系统提供的工作站监听服务器,在应用程序启动时,它开始监听服务器上的某个端口,并根据配置指令自动启动若干个WSH,形成(WSH Pool),当客户机执行链接服务器时,WSL从WSH Pool中取出一个负载最小的WSH,并把客户机请求放到它的请求队列中,WSH代表客户机负责把请求放到服务器的请求队列中,服务器处理完成请求之后,把响应结果传给WSH,WSH再把它返回给客户机。Tuxedo会根据配置指令和并发压力的大小,动态调整WSH Pool中WSH进程数量
类型缓冲区是一块格式化了的内存区域,它是Tuxedo分布式应用程序之间交互数据的一种渠道。
Buffer Type |
描述 |
长度 |
编码 |
DDR |
效率 |
CARRAY |
字符数组,NULL字符有效 |
定长 |
不支持 |