这是我的页面头部

tuxedo 配置小记

 

初次接触。从昨天下午弄到现在,终于添加好了一个简单的服务。

先简单了解一下tuxedo 的原理:

The heart of the Tuxedo system is the Bulletin Board (BB). This is a shared memory segment that contains the state of a Tuxedo domain.

看来IPC真是个很重要的知识些。tuxedo 这些大名鼎鼎的分布式系统,用的无非就是IPC技术。

 

1、服务(service )是 tuxedo 的核心概念。每个服务对应c 中的一个函数。服务是阻塞运行的。

两个请求先后到达时,后来的必须等先到的处理完毕才能被处理。为了解决排队的问题,可以把一个程序启动多份实例(启动的进程数量在 *.ubb中指定 ),tuxedo 会自动地找到空闲的进程。这就是所谓的负载均衡(load balance )。

2、程序(server)是服务的集合。一个程序中可以有多个服务。编译时使用 -s 选项将这些服务导出,以供 tmboot识别。

2、一个程序可以运行多个进程实例。同一主机上有若干程序/进程,一个进程可以提供若干服务。这些服务可通过函数呼叫(tpcall())的方式来相互调用,无论进程内部还是进程之间。

3、进程的类型:一个主机上可以有三种进程:管理进程(admin process 或者叫 bbl process )、网关进程(gateway processes )、服务进程( server processes ),用来同步主机间的信息。
4、tuxedo 的长/短连接,阻塞/非阻塞的概念。
tpconnect() 是长连接。可以是阻塞模式(request/response communication )。也可以是非阻塞模式(Conversational communication )。
tpcall() 是一种阻塞的短连接。

程序开发:
tuxedo 使用了 dispatch机制:在编译时提供了 service_name 和 service_instance 的映射关系。client 可以指定 service-name 向管理进程申请调用相关的 service。( connect 或 call )。管理进程则根据 service_name 来将处理请求 dispatch 到指定的 service(进程)。
管理进程和 service_name 是通过数据结构 tpsvcinfo 来实现数据交换的:

struct tpsvcinfo {
#define XATMI_SERVICE_NAME_LENGTH  32
        
char    name[XATMI_SERVICE_NAME_LENGTH];//  service name invoked 
        long    flags;          //  describes service attributes 
        char    *data;          //  pointer to data 
        long    len;            //  request data length 
        int     cd;             //  connection descriptor 
        long    appkey;         //  application authentication client key 
        CLIENTID cltid;         //  client identifier for originating client 
};

以上,date 和 len 指定了 client 的数据输入缓冲的地址和长度。 cd 即 socket 句柄。可以看出,无论 call 还是 connect ,内部都是使用了 socket 来实现的。

添加一个服务的完整过程:

1、写程序,编译。编译时用 -s 来指定服务名称

2、将程序放到指定的目录下。

3、在 .ubb 中添加 service 。这里可以指定进程最大数量,最小数量,所属的 group 等等。

4、编写 Bulletin Board config file ( ubbconfig file ),并使用 tmloadcf 命令编译将其编译为二进制文件,称做 TUXCONFIG 文件。该文件的文件名在环境变量中设定的:

$env |grep TUXCONFIG
TUXCONFIG=/hbtest/bin/bill.tux

5、编写工作站配置文件( domain configure file,用于发布服务和注册路由 )使用 dmloadcf 命令编译为二进制文件。

6、tmboot -s serviename 启动服务。 

缩略语介绍:
ATMI:Application-to-Transaction Monitor Interface
 相关资料:

维基百科上的 Tuxedo (software) 

 化繁为简来学习编写BEA TUXEDO会话的程序 

posted @ 2009-07-16 18:17  范晨鹏  阅读(2702)  评论(0编辑  收藏  举报