摘 要:現代大型信息系統(tǒng)中文件量比較大,一臺服務器很難支持大量文件的存儲,使用集群文件服務器,可以解決大量文件存儲的問題。通過實際項目中使用的方案,描述利用Tuxedo 7.1支持對XML文件分析功能,實現文件服務器互相協(xié)作的方式。特別是通過使用文件命名散列方法計算文件服務器標示號,通過XML傳遞該標識號到Tuxedo服務器,從而抉擇將文件放置到哪臺文件服務器上。這樣不用在文件數據庫存儲文件位置,就可以直接存儲并獲取文件。
關鍵詞:集群文件服務器;Tuxedo中間件技術;算法;XML
中圖分類號:TP311 文獻標識碼:B
文章編號:1004-373X(2008)10-091-02
A Method for Dealing with Cooperating File Servers with Tuxedo
TANG Yousheng,CAO Qinghua,FU Cuijiao
(School of Computer Science,Beihang University,Beijing,100083,China)
Abstract:In the modern large-scale MIS,the amount of files are very high,single file server cannotsupportabundant storage.By using collective file servers,we can deal with problem of abundant storage of files.This chapter describes how to use Tuxedo 7.1 to analyze XML file,then implements the cooperation of file servers for storing the files.Especially,by using Hash of file name to gain the ID of the file server,and send the ID to the Tuxedo server.Tuxedo server decide where the file went by this ID.So,we can directly save and acquire the file on server.
Keywords:file servers;Tuxedo middleware;arithmetic;XML
1 基于Tuxedo的編程方式
Tuxedo是BEA公司出品的交易中間件,經過近20年的努力,Tuxedo已經發(fā)展成為交易中間件領域事實上的標準。作為中間件,他具有跨平臺,跨網絡的能力。可以管理分布于不同計算機上的數據的一致性,協(xié)調數據庫的分布式處理事務,保障整個系統(tǒng)的性能和可靠性。
Tuxedo 從7.1版本開始,開始支持XML,并且,他允許XML文件通過基于數據的路由從Jolt客戶端流向Tuxedo服務。本文就是利用Tuxedo 7.1 的這個特點,實現抉擇文件數據流向,使各個文件服務器上的文件基本保持平衡。
基于Tuxedo中間件程序的編程需要配置UBB文件,這里主要就是配置分組,配置網絡路由和配置XML文件頭分析方式,利用文件頭信息決定路由到哪個文件服務器。在編程時,需要利用Tuxedo的API函數和其內置的數據類型。下面對集群文件服務器網絡構架,這個網絡構架如何配置UBB文件以及如何進行文件傳輸決策的客戶端和服務器端程序做詳細的描述。
2 集群文件服務器架構和UBB配置
為了方便說明,簡化了實踐中使用的系統(tǒng)架構。其基本思想就是利用一臺Tuxedo服務器作為主服務器,用他來對其他服務器進行調用,抉擇哪一臺服務器響應客戶的服務請求。這里要對這臺服務器UBB進行配置,將其設置為主服務器,并將其中的*MACHINES,*GROUPS,*SERVERS,*NETWORKS,ROUTING等屬性進行相應的配置。一種可能的配置可以是:
*RESOURCES
MASTER SITE1,...SITEN
MAXACCESSERS40
MAXSERVERS 40
OPTIONS LAN
*MACHINES
MACHINE1 LMID = SITE1
APPDIR=\"/tuxedo/bint\"
TUXCONFIG=\"/tuxedo/bint/tuxconfig\"
TUXDIR=\"/usr/tuxedo\"
…
MACHINEN LMID = SITEN
APPDIR=\"/tuxedo/bint\"
TUXCONFIG=\"/tuxedo/bint/tuxconfig\"
TUXDIR=\"/usr/tuxedo\"
*GROUPS
GROUP1
LMID=SITE1 GRPNO=1 OPENINFO = NONE
…
GROUPN
LMID=SITEN GRPNO=N OPENINFO = NONE
*NETWORK
SITE1NADDR=\"http://10.1.13.21:6000\"
NLSADDR=\"http://10.13.21:6001\"
…
SITENNADDR=\"http://10.1.13.103:6000\"
NLSADDR=\"http://10.13.103:6001\"
*SERVERS
SITE1SERV SRVGRP=GROUP1 SRVID=100
…
SITENSERV SRVGRP=GROUPN SRVID=190
*SERVICES
GETFILE LOAD=50 PRIO=50 ROUTING=SERIALNO
PUTFILE LOAD=50 PRIO=50 ROUTING=SERIALNO
*ROUTING
SERIALNO FIELD=[ZK(]\"FILEMES/HEADER/@SERIALNO\"
BUFTYPE=\"XML\"
RANGES=\"1-9:GROUP1
…
*:GROUPN\"[ZK)]
以上是Tuxedo服務器UBB的示例設置。如圖1所示,文件服務器1到文件服務器中都有2個公共的服務,GetFile 和PUTFILE,UBB配置文件將這些服務分在了不同的組中,通過ROUTING中的SERIALNO字段的判斷來決定調用那個文件服務器的相應服務。而這個SERIALNO字段來自客戶段傳來的XML文件的頭部信息。
圖1 集群文件服務器布局方式
3 XML文件編程設置方法
上面提到Tuxedo服務器調用哪個文件服務器來響應客戶端的服務請求,是通過客戶端在調用服務時,向服務器傳遞的XML文件的頭部信息中的serialno字段決定的。其形式可以是這樣:
這樣,只要能夠利用合理的算法來對不同名稱的文件進行標示,告知Tuxedo服務器調用哪個文件服務器相應服務,就能達到將客戶端的文件傳輸到不同的文件服務器上,同時,利用該字段,也可以從正確的文件服務器上下載到相應的文件。如果能夠填入合適的SERAILNO字段就可以起到使各文件服務器負載均衡的作用。使用任何一種編程語言可以產生XML文件并對其HEADER中的SERIALNO進行設置,下面利用文件名稱計算出合適的SERIALNO以便可以傳到Tuxedo服務器,讓其可以將不同名稱的文件存儲在合適的位置,從而達到各個文件負載平衡的目的。實踐中,使用HP-Unix操作系統(tǒng)運行Tuxedo中間件服務。客戶端使用Tuxedo 客戶端程序,運行在MS Windows 操作系統(tǒng)上,為了方便起見,客戶端和服務器端都使用C語言進行開發(fā)。下面利用網絡中的DHCP 負載平衡算法,將各個文件名作為鍵值,計算出SERIALNO的值。
unsigned charloadb_mx_tbl[64] ={
9,56,24,38,33,44,5,0,41,19,20,63,39,40,43,22,10,53,17,23,52,59,35,4,54,16,32,8,
21,7,26,18,58,62,45,30,61,57,28,25,51,11,31,50,37,46,42,27,55,6,14,3,15,1,47,60,
36,49,34,12,2,29,48,13
};
char *calserial(
const unsigned char *filename,/* 文件名 */
const int len ) /* 長度*/
{
unsigned int hash= len;
int i;
for (i=len ; i > 0 ;)
hash = loadb_mx_tbl [ hash ^ filename [ --i ]];
return( itoa(hash%N));
}
通過以上算法,計算出序列號的值,填入到XML文件中,傳給Tuxedo服務器,服務器通過讀取該值,決定將文件存儲于哪個文件服務器。實踐證明,這個算法對于一般類型的文件名稱,有比較好的負載平衡效果。
4 結 語
這種算法的優(yōu)點是:
(1) 算法比較簡單,具有計算的廉價性,提高運算效率。同時,算法的負載平衡效果也比較好;
(2) 系統(tǒng)可擴展性比較高。對于正在服務器,只需修改Tuxedo服務器中RANGE字段的配置即可,而不必重寫客戶端的程序。客戶端無需知道具體文件服務器的地址,只需知道Txuedo服務器地址即可;
(3) 底層文件傳輸利用Tuxedo的二進制傳輸方式,隱藏實現的細節(jié),減少開發(fā)難度。同時,避免直接利用套接字寫文件傳輸程序而可能導致的傳輸效率降低。
有待擴展的地方包括,可以根據實際文件名稱情況,書寫合適的負載平衡算法,提高文件服務器的利用率。同時,可以利用Tuxedo服務器其他特性,如數據庫操作特性,進行數據庫方面的控制等。
參 考 文 獻
[1]Bernie Volz DHCP 負載平衡算法RFC 3074 [S].2001.
[2]徐春金.Tuxedo中間件開發(fā)與配置[M].北京:中國電力出版社,2003.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。