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 来实现数据交换的:
#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)
范晨鹏
------------------
软件是一种态度
成功是一种习惯