摘 要:現(xiàn)代大型信息系統(tǒng)中文件量比較大,一臺(tái)服務(wù)器很難支持大量文件的存儲(chǔ),使用集群文件服務(wù)器,可以解決大量文件存儲(chǔ)的問(wèn)題。通過(guò)實(shí)際項(xiàng)目中使用的方案,描述利用Tuxedo 7.1支持對(duì)XML文件分析功能,實(shí)現(xiàn)文件服務(wù)器互相協(xié)作的方式。特別是通過(guò)使用文件命名散列方法計(jì)算文件服務(wù)器標(biāo)示號(hào),通過(guò)XML傳遞該標(biāo)識(shí)號(hào)到Tuxedo服務(wù)器,從而抉擇將文件放置到哪臺(tái)文件服務(wù)器上。這樣不用在文件數(shù)據(jù)庫(kù)存儲(chǔ)文件位置,就可以直接存儲(chǔ)并獲取文件。
關(guān)鍵詞:集群文件服務(wù)器;Tuxedo中間件技術(shù);算法;XML
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2008)10-091-02
A Method for Dealing with Cooperating File Servers with Tuxedo
TANG Yousheng,CAO Qinghua,F(xiàn)U 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公司出品的交易中間件,經(jīng)過(guò)近20年的努力,Tuxedo已經(jīng)發(fā)展成為交易中間件領(lǐng)域事實(shí)上的標(biāo)準(zhǔn)。作為中間件,他具有跨平臺(tái),跨網(wǎng)絡(luò)的能力??梢怨芾矸植加诓煌?jì)算機(jī)上的數(shù)據(jù)的一致性,協(xié)調(diào)數(shù)據(jù)庫(kù)的分布式處理事務(wù),保障整個(gè)系統(tǒng)的性能和可靠性。
Tuxedo 從7.1版本開(kāi)始,開(kāi)始支持XML,并且,他允許XML文件通過(guò)基于數(shù)據(jù)的路由從Jolt客戶端流向Tuxedo服務(wù)。本文就是利用Tuxedo 7.1 的這個(gè)特點(diǎn),實(shí)現(xiàn)抉擇文件數(shù)據(jù)流向,使各個(gè)文件服務(wù)器上的文件基本保持平衡。
基于Tuxedo中間件程序的編程需要配置UBB文件,這里主要就是配置分組,配置網(wǎng)絡(luò)路由和配置XML文件頭分析方式,利用文件頭信息決定路由到哪個(gè)文件服務(wù)器。在編程時(shí),需要利用Tuxedo的API函數(shù)和其內(nèi)置的數(shù)據(jù)類型。下面對(duì)集群文件服務(wù)器網(wǎng)絡(luò)構(gòu)架,這個(gè)網(wǎng)絡(luò)構(gòu)架如何配置UBB文件以及如何進(jìn)行文件傳輸決策的客戶端和服務(wù)器端程序做詳細(xì)的描述。
2 集群文件服務(wù)器架構(gòu)和UBB配置
為了方便說(shuō)明,簡(jiǎn)化了實(shí)踐中使用的系統(tǒng)架構(gòu)。其基本思想就是利用一臺(tái)Tuxedo服務(wù)器作為主服務(wù)器,用他來(lái)對(duì)其他服務(wù)器進(jìn)行調(diào)用,抉擇哪一臺(tái)服務(wù)器響應(yīng)客戶的服務(wù)請(qǐng)求。這里要對(duì)這臺(tái)服務(wù)器UBB進(jìn)行配置,將其設(shè)置為主服務(wù)器,并將其中的*MACHINES,*GROUPS,*SERVERS,*NETWORKS,ROUTING等屬性進(jìn)行相應(yīng)的配置。一種可能的配置可以是:
*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服務(wù)器UBB的示例設(shè)置。如圖1所示,文件服務(wù)器1到文件服務(wù)器中都有2個(gè)公共的服務(wù),GetFile 和PUTFILE,UBB配置文件將這些服務(wù)分在了不同的組中,通過(guò)ROUTING中的SERIALNO字段的判斷來(lái)決定調(diào)用那個(gè)文件服務(wù)器的相應(yīng)服務(wù)。而這個(gè)SERIALNO字段來(lái)自客戶段傳來(lái)的XML文件的頭部信息。
圖1 集群文件服務(wù)器布局方式
3 XML文件編程設(shè)置方法
上面提到Tuxedo服務(wù)器調(diào)用哪個(gè)文件服務(wù)器來(lái)響應(yīng)客戶端的服務(wù)請(qǐng)求,是通過(guò)客戶端在調(diào)用服務(wù)時(shí),向服務(wù)器傳遞的XML文件的頭部信息中的serialno字段決定的。其形式可以是這樣:
這樣,只要能夠利用合理的算法來(lái)對(duì)不同名稱的文件進(jìn)行標(biāo)示,告知Tuxedo服務(wù)器調(diào)用哪個(gè)文件服務(wù)器相應(yīng)服務(wù),就能達(dá)到將客戶端的文件傳輸?shù)讲煌奈募?wù)器上,同時(shí),利用該字段,也可以從正確的文件服務(wù)器上下載到相應(yīng)的文件。如果能夠填入合適的SERAILNO字段就可以起到使各文件服務(wù)器負(fù)載均衡的作用。使用任何一種編程語(yǔ)言可以產(chǎn)生XML文件并對(duì)其HEADER中的SERIALNO進(jìn)行設(shè)置,下面利用文件名稱計(jì)算出合適的SERIALNO以便可以傳到Tuxedo服務(wù)器,讓其可以將不同名稱的文件存儲(chǔ)在合適的位置,從而達(dá)到各個(gè)文件負(fù)載平衡的目的。實(shí)踐中,使用HP-Unix操作系統(tǒng)運(yùn)行Tuxedo中間件服務(wù)??蛻舳耸褂肨uxedo 客戶端程序,運(yùn)行在MS Windows 操作系統(tǒng)上,為了方便起見(jiàn),客戶端和服務(wù)器端都使用C語(yǔ)言進(jìn)行開(kāi)發(fā)。下面利用網(wǎng)絡(luò)中的DHCP 負(fù)載平衡算法,將各個(gè)文件名作為鍵值,計(jì)算出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 ) /* 長(zhǎng)度*/
{
unsigned int hash= len;
int i;
for (i=len ; i > 0 ;)
hash = loadb_mx_tbl [ hash ^ filename [ --i ]];
return( itoa(hash%N));
}
通過(guò)以上算法,計(jì)算出序列號(hào)的值,填入到XML文件中,傳給Tuxedo服務(wù)器,服務(wù)器通過(guò)讀取該值,決定將文件存儲(chǔ)于哪個(gè)文件服務(wù)器。實(shí)踐證明,這個(gè)算法對(duì)于一般類型的文件名稱,有比較好的負(fù)載平衡效果。
4 結(jié) 語(yǔ)
這種算法的優(yōu)點(diǎn)是:
(1) 算法比較簡(jiǎn)單,具有計(jì)算的廉價(jià)性,提高運(yùn)算效率。同時(shí),算法的負(fù)載平衡效果也比較好;
(2) 系統(tǒng)可擴(kuò)展性比較高。對(duì)于正在服務(wù)器,只需修改Tuxedo服務(wù)器中RANGE字段的配置即可,而不必重寫客戶端的程序。客戶端無(wú)需知道具體文件服務(wù)器的地址,只需知道Txuedo服務(wù)器地址即可;
(3) 底層文件傳輸利用Tuxedo的二進(jìn)制傳輸方式,隱藏實(shí)現(xiàn)的細(xì)節(jié),減少開(kāi)發(fā)難度。同時(shí),避免直接利用套接字寫文件傳輸程序而可能導(dǎo)致的傳輸效率降低。
有待擴(kuò)展的地方包括,可以根據(jù)實(shí)際文件名稱情況,書(shū)寫合適的負(fù)載平衡算法,提高文件服務(wù)器的利用率。同時(shí),可以利用Tuxedo服務(wù)器其他特性,如數(shù)據(jù)庫(kù)操作特性,進(jìn)行數(shù)據(jù)庫(kù)方面的控制等。
參 考 文 獻(xiàn)
[1]Bernie Volz DHCP 負(fù)載平衡算法RFC 3074 [S].2001.
[2]徐春金.Tuxedo中間件開(kāi)發(fā)與配置[M].北京:中國(guó)電力出版社,2003.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。