薛媛媛 王曉英
(青海大學(xué)計(jì)算機(jī)技術(shù)與應(yīng)用系,青海西寧 810016)
1 引言
隨著計(jì)算機(jī)技術(shù)的發(fā)展和互聯(lián)網(wǎng)應(yīng)用的不斷普及,越來越多的企業(yè)實(shí)施了信息化建設(shè),開發(fā)了企業(yè)內(nèi)部的各種應(yīng)用系統(tǒng)。但是,由于企業(yè)在信息化實(shí)施的過程中,具有缺乏總體性規(guī)劃及系統(tǒng)開發(fā)的階段性等特點(diǎn),導(dǎo)致了各系統(tǒng)的硬件、操作系統(tǒng)、運(yùn)行環(huán)境、數(shù)據(jù)存儲(chǔ)等有很大的區(qū)別,各系統(tǒng)之間彼此獨(dú)立、不能共享信息,從而形成許多信息孤島,制約了企業(yè)信息化進(jìn)程的推進(jìn)。如何能夠及時(shí)、可靠、安全、動(dòng)態(tài)的管理企業(yè)的業(yè)務(wù)數(shù)據(jù)信息,為不斷變化與增長業(yè)務(wù)提供支持,成為企業(yè)資源管理的重要問題。由于企業(yè)1業(yè)務(wù)信息不斷迅猛的增長,需要設(shè)計(jì)一種能夠快速部署、集中管理、高效可靠的企業(yè)級(jí)數(shù)據(jù)中心作為基礎(chǔ)設(shè)施。
目前,對(duì)各系統(tǒng)之間的信息資源進(jìn)行整合的研究已經(jīng)成為業(yè)界焦點(diǎn),并概括地提出了中間件、數(shù)據(jù)同步復(fù)制、二次開發(fā)和同一標(biāo)準(zhǔn)四種整合方法[1]。目前比較流行的中間件有BEA的Tuxedo、IBM的CICS和東方通公司的TongEasy,但是它們的費(fèi)用和維護(hù)成本過高。考慮到降低中小企業(yè)實(shí)施信息資源整合的成本,本文基于降低系統(tǒng)資源消耗、提高網(wǎng)絡(luò)傳輸效率的原則,結(jié)合中間件思想,開發(fā)了一套基于DTS(Distributed Transaction Server,分布式交易服務(wù)器)技術(shù)的數(shù)據(jù)交換平臺(tái)以實(shí)現(xiàn)對(duì)企業(yè)信息資源的整合。
2 相關(guān)技術(shù)
2.1 中間件技術(shù)
中間件技術(shù)是指位于平臺(tái)和應(yīng)用之間的通用服務(wù),這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)[2]。中間件能夠運(yùn)行于多種硬件和操作系統(tǒng)平臺(tái)上,支持標(biāo)準(zhǔn)的協(xié)議、標(biāo)準(zhǔn)的接口,支持分布計(jì)算,提供跨網(wǎng)絡(luò)、硬件和操作系統(tǒng)平臺(tái)的透明的應(yīng)用或服務(wù)的交互,并且能夠滿足大量的應(yīng)用需要。中間件提供的標(biāo)準(zhǔn)協(xié)議和程序接口定義了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境,不論計(jì)算機(jī)底層的硬件和系統(tǒng)軟件如何更換,只要將中間件升級(jí)更新,并保持中間件對(duì)外的接口定義不變,應(yīng)用軟件幾乎不需要任何修改,從而降低了企業(yè)在應(yīng)用系統(tǒng)開發(fā)和維護(hù)中的投資成本。
2.2 DTS技術(shù)
DTS是一套基于C/C++語言開發(fā)的分布式服務(wù)中間件。它是介于客戶機(jī)與服務(wù)器之間的夾層,突破了二層C/S結(jié)構(gòu)的局限性,為構(gòu)建大規(guī)模、高性能、分布式C/S應(yīng)用程序提供了通信、壓縮、加密、事務(wù)、安全、容錯(cuò)等基礎(chǔ)服務(wù)。它屏蔽了底層在硬件設(shè)備、操作平臺(tái)及數(shù)據(jù)庫平臺(tái)上的技術(shù)細(xì)節(jié),使應(yīng)用程序開發(fā)不必再從底層做起,以自身的復(fù)雜性換來了應(yīng)用程序開發(fā)的簡單化,保證了系統(tǒng)的擴(kuò)展性和分布式運(yùn)行的可行性,從而實(shí)現(xiàn)信息系統(tǒng)的一體化[3]。
3 DTS架構(gòu)
3.1 DTS架構(gòu)模型
DTS架構(gòu)模型如圖1所示。
DTS技術(shù)主要采用了C-M-S三層架構(gòu)模型。C-M-S是指客戶、中間件、服務(wù)器三層結(jié)構(gòu),它是通過國際標(biāo)準(zhǔn)的C/S(客戶/服務(wù)器)結(jié)構(gòu)發(fā)展而來的。DTS的三層架構(gòu)(數(shù)據(jù)庫層、DTS交易服務(wù)中間件層、客戶端層),使得客戶端無法直接訪問數(shù)據(jù)庫,從而使得核心數(shù)據(jù)庫的安全可靠得以保障。而DTS作為應(yīng)用服務(wù)器的構(gòu)筑平臺(tái),很好的支持了全局事務(wù)管理、分布事務(wù)管理、負(fù)載均衡和優(yōu)先級(jí)管理。同時(shí),DTS 作為一種多語言、可任意伸縮的事務(wù)處理平臺(tái),它提供了用戶為實(shí)現(xiàn)下列目標(biāo)所必需的任務(wù)關(guān)鍵型基礎(chǔ)結(jié)構(gòu):
● 增強(qiáng)現(xiàn)有應(yīng)用的可訪問性
● 整合企業(yè)事務(wù)處理方案
● 采用Web 服務(wù)的核心應(yīng)用
● 確保應(yīng)用最高的可用性和吞吐量
● 提升處理效率,改善資源管理

圖1 DTS架構(gòu)模型
● 降低總體擁有成本
3.2 DTS的技術(shù)特點(diǎn)
(1) 采用標(biāo)準(zhǔn)C++開發(fā)
整個(gè)服務(wù)軟件包均采用標(biāo)準(zhǔn)C++開發(fā),性能高,所需數(shù)據(jù)交換空間較小。在相同的硬件資源條件下,能提供更佳的性能。
(2) 網(wǎng)絡(luò)流量的提升
網(wǎng)絡(luò)流量是制約網(wǎng)絡(luò)應(yīng)用的關(guān)鍵之一,DTS對(duì)業(yè)務(wù)系統(tǒng)產(chǎn)生的原生數(shù)據(jù)進(jìn)行20倍壓縮,并對(duì)數(shù)據(jù)進(jìn)行加密,提高了網(wǎng)絡(luò)傳輸效率和安全性。
(3) 實(shí)現(xiàn)無狀態(tài)會(huì)話管理功能
會(huì)話狀態(tài)管理是制約網(wǎng)絡(luò)用戶數(shù)量的關(guān)鍵,拋棄會(huì)話狀態(tài),降低內(nèi)存占用,能最大限度的增加并發(fā)連接數(shù),同時(shí)提高響應(yīng)速度。
(4) 建立負(fù)載均衡機(jī)制
DTS內(nèi)建負(fù)載均衡機(jī)制,不但能實(shí)現(xiàn)物理服務(wù)器層次的負(fù)載均衡,還能實(shí)現(xiàn)業(yè)務(wù)請(qǐng)求級(jí)別的負(fù)載均衡,從而提升響應(yīng)效率,降低資源消耗[4]。
(5) 實(shí)現(xiàn)服務(wù)自動(dòng)管理功能
當(dāng)某個(gè)中間件服務(wù)發(fā)生異常而崩潰,服務(wù)管理組件能及時(shí)發(fā)現(xiàn),并自動(dòng)重新啟動(dòng)該服務(wù)。
(6) 面向服務(wù)的請(qǐng)求處理模式
DTS可向外部提供WebService和Socket服務(wù)。采用Socket進(jìn)行連接,提高了網(wǎng)絡(luò)傳輸效率。
(7) 提供無限制的客戶端開發(fā)工具
服務(wù)器端與客戶端采用標(biāo)準(zhǔn)字符流和標(biāo)準(zhǔn)XML進(jìn)行數(shù)據(jù)傳輸,因此客戶端開發(fā)工具可以自由選擇,充分利用原有資源。
(8) 客戶端動(dòng)態(tài)局部自動(dòng)更新
客戶端可實(shí)現(xiàn)復(fù)制式安裝。同時(shí)采用組件化開發(fā),客戶端動(dòng)態(tài)探測(cè)各組件版本,自動(dòng)更新當(dāng)前使用業(yè)務(wù)組件,減小網(wǎng)絡(luò)負(fù)荷。
(9) 實(shí)現(xiàn)客戶端數(shù)據(jù)緩存
客戶端處理業(yè)務(wù)數(shù)據(jù)后,發(fā)生網(wǎng)絡(luò)中斷,數(shù)據(jù)可以保存在客戶端,等待網(wǎng)絡(luò)暢通后提交。保障業(yè)務(wù)數(shù)據(jù)不丟失。
4 DTS邏輯構(gòu)件及其功能
DTS系統(tǒng)的邏輯構(gòu)件如圖2所示。包括數(shù)據(jù)庫連接池組件、輕量級(jí)數(shù)據(jù)庫映射組件、DTS公共業(yè)務(wù)子系統(tǒng)、通用打包解包組件、數(shù)據(jù)壓縮加密解壓解密組件、網(wǎng)絡(luò)通訊隊(duì)列管理組件,以及軟件路由組件和服務(wù)監(jiān)控管理組件。
(1) 數(shù)據(jù)庫連接池組件:該組件主要實(shí)現(xiàn)對(duì)數(shù)據(jù)庫連接進(jìn)行自動(dòng)管理,可以配置連接Oracle數(shù)據(jù)庫和MySQL數(shù)據(jù)庫[5]。連接池里可以配置數(shù)據(jù)連接數(shù)量,以及連接數(shù)據(jù)庫種類,默認(rèn)連接數(shù)量為20個(gè),可以根據(jù)實(shí)際情況自動(dòng)增刪連接,如連接不夠用,會(huì)自動(dòng)添加新的連接進(jìn)入連接池,提供系統(tǒng)使用,當(dāng)連接池?cái)?shù)量足夠使用時(shí),連接池可以自動(dòng)刪除多余的連接,并釋放多出來的連接恢復(fù)到默認(rèn)連接數(shù)量(如默認(rèn)20條連接數(shù)量)[6]。
(2) 輕量級(jí)數(shù)據(jù)庫映射組件:該組件類似與內(nèi)存庫的作用,主要目標(biāo)實(shí)現(xiàn)數(shù)據(jù)緩存,提高數(shù)據(jù)使用效率,降低整個(gè)系統(tǒng)的數(shù)據(jù)使用開銷[7]。該組件主要的實(shí)現(xiàn)原理是通過數(shù)據(jù)結(jié)構(gòu)在DTS啟動(dòng)后,將讀取穩(wěn)定不變的數(shù)據(jù)庫表里的數(shù)據(jù),并保留在DTS內(nèi)存數(shù)據(jù)結(jié)構(gòu)中,以提高外部系統(tǒng)調(diào)用數(shù)據(jù)時(shí)的讀取性能[8]。該組件調(diào)用組件為數(shù)據(jù)庫連接池組件。
(3) 通用打包解包組件:該組件主要實(shí)現(xiàn)對(duì)傳輸數(shù)據(jù)的數(shù)據(jù)規(guī)則,實(shí)現(xiàn)數(shù)據(jù)進(jìn)行傳輸時(shí)的通訊協(xié)議,數(shù)據(jù)格式支持兩種格式:字符串類型(string)或XML類型。
(4) 數(shù)據(jù)壓縮加密解壓解密組件:該組件主要提供數(shù)據(jù)在傳輸過程中的壓縮加密算法和數(shù)據(jù)解壓解密算法,通過該算法提高了網(wǎng)絡(luò)傳輸效率和網(wǎng)絡(luò)安全性。

圖2 DTS的邏輯構(gòu)件
(5) 網(wǎng)絡(luò)通訊隊(duì)列管理組件:該組件主要提供客戶/服務(wù)網(wǎng)絡(luò)通訊功能,并且加入了隊(duì)列調(diào)度和多線程控制,以提高服務(wù)器并發(fā)處理業(yè)務(wù)的能力。
(6) DTS公用業(yè)務(wù)子系統(tǒng):該組件提供了DTS內(nèi)部調(diào)用規(guī)則,主要負(fù)責(zé)全局調(diào)度,和相應(yīng)的業(yè)務(wù)功能處理,并把關(guān)鍵業(yè)務(wù)放在該組件內(nèi)執(zhí)行,并兼有各組件協(xié)同調(diào)度管理的功能,調(diào)用組件為:數(shù)據(jù)庫連接池組件、輕量級(jí)數(shù)據(jù)庫映射組件、通用打包解包組件、數(shù)據(jù)壓縮加密解壓解密組件、網(wǎng)絡(luò)通訊隊(duì)列管理組件。
(7) 軟件路由組件:該組件主要功能是實(shí)現(xiàn)分布和負(fù)載均衡的作用,提供可配置的業(yè)務(wù)級(jí)別的分發(fā)和負(fù)載均衡,可以將業(yè)務(wù)級(jí)別的服務(wù)分布部署在不同的服務(wù)器上,進(jìn)行有效的服務(wù)器性能均衡,提高服務(wù)器的利用效率,該組件調(diào)用的組件為DTS公用業(yè)務(wù)子系統(tǒng)。
路由表信息如下:
IP START://為標(biāo)準(zhǔn)服務(wù)
127.0.0.1 :8000;
SERVER START:
CONFIGSN:CONFIGSN_A;
COLUMN_CONFSN:COLUMN_CONFSN_A;
TABLEOBJECT:TABLEOBJECT_A;
MULTI_TABLE_AFFAIRSSN:MULTI_TABLE_AFFAIRSSN_A;
SQL_DYNAMIC:SQL_DYNAMIC_A;
SEQSRVSN:SEQSRVSN_A;
SERVER END;
IP END;
IP START://權(quán)限管理服務(wù)
127.0.0.1 :9000;
SERVER START:
ORGMANAGERSN:ORGMANAGERSN_A;
QXGLSN:QXGLSN_A;
SERVER END;
IP END;
(8) 服務(wù)監(jiān)控管理組件:該組件主要實(shí)現(xiàn)對(duì)服務(wù)的監(jiān)控管理,并具備探測(cè)服務(wù)是否有效的管理,如果服務(wù)已經(jīng)非正常關(guān)閉或不提供服務(wù)了,監(jiān)控程序?qū)⒆詣?dòng)重啟服務(wù),整體提提高服務(wù)器的有效服務(wù)時(shí)間和減少宕機(jī)的幾率。
5 應(yīng)用實(shí)例
5.1 一體化系統(tǒng)構(gòu)架
作者應(yīng)用開發(fā)的是一個(gè)基于DTS技術(shù)的企業(yè)信息門戶一體化平臺(tái)系統(tǒng),其系統(tǒng)架構(gòu)如圖3所示。本系統(tǒng)主要由客服管理平臺(tái)、物資管理平臺(tái)、辦公自動(dòng)化管理平臺(tái)和Web網(wǎng)站宣傳平臺(tái)四個(gè)子系統(tǒng),以及組織機(jī)構(gòu)管理、崗位管理、人員管理、權(quán)限管理和綜合統(tǒng)計(jì)報(bào)表五個(gè)基礎(chǔ)模塊構(gòu)成,其中,綜合報(bào)表模塊是根據(jù)各個(gè)子系統(tǒng)的數(shù)據(jù)挖掘結(jié)果進(jìn)行統(tǒng)計(jì)。系統(tǒng)設(shè)計(jì)的最終目標(biāo)是把各個(gè)業(yè)務(wù)子系統(tǒng)整合到一個(gè)統(tǒng)一的平臺(tái)上,并進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化管理和數(shù)據(jù)大集中化安全管理。通過對(duì)各個(gè)子系統(tǒng)的規(guī)劃和整合,讓整個(gè)平臺(tái)在規(guī)范統(tǒng)一的管理體系下進(jìn)行運(yùn)轉(zhuǎn),使得崗位明確、協(xié)同辦公、統(tǒng)一報(bào)表、統(tǒng)一規(guī)范。
5.2 系統(tǒng)的主要功能
作者實(shí)現(xiàn)的企業(yè)信息門戶一體化平臺(tái)系統(tǒng)的主要功能模塊如下:
(1) 權(quán)限管理功能模塊
權(quán)限管理在整個(gè)系統(tǒng)中屬于最基本的業(yè)務(wù)模塊,它不僅體現(xiàn)了一個(gè)組織機(jī)構(gòu)的體系結(jié)構(gòu),而且會(huì)為其他模塊提供一種可管理的權(quán)限模型,這種模型可以為開發(fā)其它業(yè)務(wù)模塊提供更多的管理功能,并可以簡化更多的開發(fā)工作量而提供支持,其中主要實(shí)現(xiàn)了組織機(jī)構(gòu)管理、操作員管理、崗位管理、崗位授權(quán)、人員授權(quán)、管理單元維護(hù)和管理單元授權(quán)等功能。
(2) 產(chǎn)品分類管理功能模塊
該模塊主要是建立一套產(chǎn)品分類體系,為各種業(yè)務(wù)信息提供數(shù)據(jù)基礎(chǔ),屬于全局性數(shù)據(jù),其中主要實(shí)現(xiàn)了分類管理和屬性管理的功能。
(3) 企業(yè)客戶管理功能模塊
該模塊主要提供對(duì)企業(yè)客戶和團(tuán)體客戶的信息管理,主要實(shí)現(xiàn)企業(yè)客戶管理、安裝服務(wù)管理、維護(hù)服務(wù)管理和保養(yǎng)服務(wù)管理等功能。
(4) 個(gè)人客戶管理功能模塊
該模塊主要提供對(duì)個(gè)人客戶的信息管理,主要實(shí)現(xiàn)個(gè)人客戶管理、安裝服務(wù)管理、維護(hù)服務(wù)管理和保養(yǎng)服務(wù)管理等功能。

圖3 DTS應(yīng)用實(shí)例系統(tǒng)架構(gòu)
5.3 部分關(guān)鍵代碼實(shí)現(xiàn)
動(dòng)態(tài)實(shí)現(xiàn)客戶端調(diào)用oracle存儲(chǔ)過程的函數(shù)
Int oraCon::procedure(string procedureStr,TElement*value)
{ --------
for(int i=0;i<value->getTableFieldCount();i++)
{ string fieldName = value->fieldName[i];
int len = value->getFieldLength(fieldName);
string fieldValue = value->getFieldValue
(fieldName);
char *tmp = (char*)malloc(len);
memset(tmp,'