Tuxedo学习门户网站
中間件簡(jiǎn)介:
介于客戶機(jī)和server之間的夾層,突破了傳統(tǒng)的c/s架構(gòu),為構(gòu)建大規(guī)模,高性能。分布式c/s應(yīng)用程序提供了通信。事物,安全。容錯(cuò)等基礎(chǔ)服務(wù),屏蔽了底層應(yīng)用細(xì)節(jié),應(yīng)用程序不必從底層開發(fā),以自身的復(fù)雜性換取應(yīng)用程序開發(fā)的簡(jiǎn)單。
?
Tuxedo是什么?
Tuxedo:Transaction for Unix has been Extended for Distributed Operation分布式操作擴(kuò)展之后的Unix事務(wù)系統(tǒng)。
交易中間件位于client和server之間
Tuxedo是一個(gè)事務(wù)處理(TP)監(jiān)督器(transaction processing monitor)。它管理聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)操作的事務(wù)。客戶通過結(jié)構(gòu)化查詢語言(SQL)調(diào)用,或其他類型的請(qǐng)求,產(chǎn)生對(duì)server的請(qǐng)求。這個(gè)事務(wù)處理監(jiān)督器確信,正確地進(jìn)行了改動(dòng),以保證數(shù)據(jù)的完整性。這在一個(gè)事務(wù)能夠改變多個(gè)位置的數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)環(huán)境是很重要的。這個(gè)事務(wù)處理監(jiān)督器使用雙階段提交。以保證全部的數(shù)據(jù)庫(kù)都已經(jīng)接收和認(rèn)可了這些數(shù)據(jù)的正確性。
否則,這個(gè)數(shù)據(jù)庫(kù)返回它的事務(wù)前狀態(tài)
?
WTC:WebLogic Tuxedo Connector
OLTP: On-Line Transaction Processing 聯(lián)機(jī)事務(wù)處理
OLAP: On-Line Analytical Processing 聯(lián)機(jī)分析處理
ATMI:application-to-Transaction Monitor Interface 應(yīng)用程序到事務(wù)監(jiān)視器接口
DTP:Distributed Transaction Processing分布式事務(wù)處理
MSSQ:Mutile Server,Singal Queue
?
TUXEDO 採(cǎi)用三層結(jié)構(gòu)的組件軟件模型 :
2? Client 為第一邏輯層。實(shí)現(xiàn)用戶交互和數(shù)據(jù)表示。向第二層的Server發(fā)請(qǐng)求。調(diào)用業(yè)務(wù)邏輯處理服務(wù)。
2? Server組件中間層。這些組件由TUXEDO管理,實(shí)現(xiàn)業(yè)務(wù)邏輯服務(wù),接收服務(wù)請(qǐng)求,并返回服務(wù)結(jié)果。
2? 第三層為資源管理器,比方像關(guān)系數(shù)據(jù)庫(kù)。
負(fù)責(zé)管理應(yīng)用系統(tǒng)的數(shù)據(jù)資源?? ?
?
Tuxedo的核心子系統(tǒng):
事務(wù)管理器 TM(Transaction Manager)
工作站 WorkStation
域 Domain
隊(duì)列 Queue
?
?
?
?
隊(duì)列:
s
?
?
X/Open DTP 模型:
?
?
?
?
Tuxedo 與 WebLogic 通過WTC互聯(lián):
通經(jīng)常使用TUXEDO實(shí)現(xiàn)系統(tǒng)的核心業(yè)務(wù),用WEBLOGIC做為系統(tǒng)擴(kuò)展到web的平臺(tái),實(shí)現(xiàn)電子商務(wù)。由WEBLOGIC 調(diào)用 TUXEDO上的服務(wù),須要在Tuxedo和Weblogic之間建立連接。
WTC不僅能讓WEBLOGIC調(diào)用TUXEDO中的SERVICE,并且能讓TUXEDO調(diào)用WEBLOGIC中的EJB。但WTC僅能實(shí)現(xiàn)這兩個(gè)平臺(tái)之間的互聯(lián)。
?
Tuxedo與WebLogic 之間通過Domain實(shí)現(xiàn)互聯(lián)調(diào)用,Tuxedo與Weblogic分別代表兩個(gè)TDOMAIN。
使用WTC時(shí)。Tuxedo方面要配置對(duì)應(yīng)的Domain配置文件(dmconfig)。指明本身以及weblogic所在Domain的IP和Port。
使用WTC時(shí)Weblogic方面要做的改動(dòng)是:
???? —在ClassPath 中,增加jamti.jar所在的路徑。
???? —在weblogic的配置文件,bdmconfig.xml 中,增加描寫敘述兩個(gè)TDOMAIN的部分
在Tuxedo和weblogic 啟動(dòng)對(duì)應(yīng)服務(wù)后,weblogic通過client端掉用對(duì)應(yīng)ejb,再有該ejb調(diào)用tuxedo service。
?
?
Tuxedo應(yīng)用開發(fā):
開發(fā)TUXEDO C/S系統(tǒng)的必要步驟:
?? 環(huán)境變量設(shè)置,通常寫在setenv.sh
TUXDIR:Tuxedo應(yīng)用的安裝路徑。
TUXCONFIG:便以后的Tuxedo配置文件路徑。
VIEWDIR/VIEWFILES:view文件的路徑和文件名稱。
LD_LIBRARY_PATH:Tuxedo應(yīng)用時(shí)。須要尋找的庫(kù)文件的路徑。
PATH: Tuxedo特用的一些可運(yùn)行文件的路徑
假設(shè)涉及到Domain。還有對(duì)應(yīng)的環(huán)境變量。
?? 編碼,并編譯client/服務(wù)端程序。
?? 編寫/編譯Tuxedo配置文件。
Tuxedo配置文件ubbconfig 描寫敘述了應(yīng)用配置信息。Ubbconfig文件是二進(jìn)制文件,是由文本文件通過tmloadcf 命令編譯而成。
Ubb 文件的內(nèi)容包含例如以下的Section:
??????????????????????????? Resources:包括整個(gè)應(yīng)用范圍的信息。必須在配置在文件第一節(jié)。必不可少。
?????????????????? Machines:節(jié)包括應(yīng)用有關(guān)的每一個(gè)處理器的信息。本節(jié)必須在*RESOURCES節(jié)后列出。
?????????????????? Groups:節(jié)包括服務(wù)組的定義。
一臺(tái)機(jī)器至少要定義一個(gè)服務(wù)組,每一個(gè)組僅僅要定義組名,映射組名的組號(hào)和邏輯機(jī)器名
?????????????????? SERVERS:包括了服務(wù)進(jìn)程的信息。一個(gè)入口代表一個(gè)應(yīng)用啟動(dòng)時(shí)載入的服務(wù)。這些信息包括服務(wù)名,命令行參數(shù),服務(wù)環(huán)境。重新啟動(dòng)動(dòng)等等。
?????????????????? SERVICES:提供了應(yīng)用的特殊交易的信息,包含負(fù)載平衡(LOAD)和數(shù)據(jù)緩沖類型檢查(BUFTYPE)。假設(shè)所有都是缺省值則本節(jié)能夠省略。
???????? 上述每個(gè)Section中,包括眾多的Option選項(xiàng),詳細(xì)應(yīng)用時(shí)。察看Tuxedo相關(guān)文檔,進(jìn)行配置。
?
?
l? 在執(zhí)行時(shí)。這些配置信息被裝入一段共享內(nèi)存。稱為(Bulletin-Board)。
l? TUXEDO提供一個(gè)管理進(jìn)程,稱為BBL(Bulletin Board Liaison),包括了一個(gè)公告牌的本地拷貝和本地server上應(yīng)用的狀態(tài)。
l? TUXEDO提供的還有一個(gè)管理進(jìn)程DBBL(Distinguished Bulletin Board Liaison),用于多server配置時(shí)。
DBBL與BBL協(xié)同,保證全部部分的公告牌內(nèi)容的一致性。
?? 啟動(dòng)服務(wù)。
?? 測(cè)試(功能測(cè)試、壓力測(cè)試)。
?
client/Client開發(fā)
client的任務(wù):
獲取採(cǎi)集運(yùn)行操作應(yīng)得的數(shù)據(jù)。
發(fā)起向服務(wù)端的請(qǐng)求并等待服務(wù)端回應(yīng)。
將結(jié)果依照一定格式返回給用戶
client的程序設(shè)計(jì)和實(shí)現(xiàn)應(yīng)該分成兩個(gè)部分:
用戶處理過程。
Tuxedo功能部分。
?
開發(fā)Client涉及的API:
進(jìn)程管理的API:
int tpinit(TPINIT *tpinfo)
負(fù)責(zé)將Client端連接到BB,使Client端能夠進(jìn)一步調(diào)用ATMI函數(shù)。
TPINIT參數(shù)是一個(gè)Tuxedo定義的結(jié)構(gòu),用以存放一些安全相關(guān)的數(shù)據(jù)(必須在tuxedo的配置文件里打開security選項(xiàng))。否則,能夠使用NULL。
tpinit,不能在server端中出現(xiàn),否則tuxedo會(huì)產(chǎn)生TPEPROTO(協(xié)議錯(cuò))這樣一個(gè)錯(cuò)誤。
?
int tpterm( )
client調(diào)用tpterm( )切斷與應(yīng)用的連接,結(jié)束了client的TUXEDO進(jìn)程 .
?
編寫完畢的Client代碼,用buildclient 命令進(jìn)行編譯。
buildclient –f? filename? -O output file
假設(shè)client端是一個(gè)workstation(本地沒有Tuxedo server),還要加上-w 選向。
?
Clieng與Server 之間的通訊接口:
Client通過ATMI提供的API,與Server之間進(jìn)行通訊,調(diào)用Server提供的服務(wù)。
通訊主要分為兩種方式:
???????? 同步方式:採(cǎi)用同步通訊時(shí),Client端在向Server端發(fā)出請(qǐng)求后就被堵塞,等待Server端的返回。
???????? 同步通訊方式的API:
int tpcall(? char? *svc,?? char? *idata,?? long?? ilen, char?? **odata,? long?? *olen,?? long?? flags)
Svc : 調(diào)用的服務(wù)(service)名稱
idata: 指向輸入數(shù)據(jù)緩沖區(qū)指針。
ilen:?? 輸入數(shù)據(jù)的緩沖區(qū)大小。
odata:指向輸出數(shù)據(jù)緩沖區(qū)指針的指針。
olen:? 輸出數(shù)據(jù)緩沖區(qū)的大小的指針。
flags: 通訊控制標(biāo)志。
???????? 異步方式:採(cǎi)用異步方式時(shí)。Client端在發(fā)出請(qǐng)求后。能夠繼續(xù)其它的任務(wù)。須要結(jié)果時(shí)。使用API去獲取response隊(duì)列中的結(jié)果。
???????? 異步通信方式的API
?????????????????? — int tpacall(char *svc, char *data, long len, long flags)
?????????????????? — tpacall 調(diào)用成功后返回一個(gè)整數(shù),稱為descriptor。client使用這個(gè)整數(shù)在以后的某個(gè)時(shí)間來獲取結(jié)果。
ATMI提供tpgetrply( ) 來獲取異步調(diào)用的結(jié)果
?????????????????? — int tpgetrply(int *cd, char **data, long *len, long flags)
?????????????????? — 參數(shù)cd , 就是存放tpacall返回descriptor的指針。
不管是tpcall、tpacall以及tpgetrply,在client端和server端都能夠使用。
?
Server端開發(fā):
l? Server是系統(tǒng)資源的聯(lián)系點(diǎn)。
l? Server必須公布系統(tǒng)內(nèi)能夠訪問的交易,保證client能夠知道把請(qǐng)求發(fā)往何處
l? Server啟動(dòng)后,進(jìn)入一個(gè)循環(huán):接收請(qǐng)求/處理請(qǐng)求/返回節(jié)后,周而復(fù)始。
l? 系統(tǒng)管理員通過命令tmshutdown。顯式地關(guān)掉tuxedo的服務(wù)。
?
Server端開發(fā)涉及的API:
l? tpreturn( ): 在Tuxedo中,tpreturn用來取代常規(guī)的return函數(shù)。運(yùn)行tpreturn后,server將回應(yīng)的數(shù)據(jù)緩沖區(qū)返回請(qǐng)求的發(fā)起點(diǎn),交出程序的控制權(quán)。
void tpreturn(int rval, long rcode, char *data, long len, long? flags)
rval :是返回的結(jié)果,一般是TPSUCCESS, TPFAIL,? TPEXIT。
?? ?rcode:是用戶自己定義的返回值,用以進(jìn)一步區(qū)分返回結(jié)果。
? ??data? :是返回結(jié)果緩沖區(qū)。len:是緩沖區(qū)長(zhǎng)度。
flags :? 結(jié)果返回的標(biāo)志。通常都是0。
?
l? tpsvrinit()和tpsvrdone()分別用來啟動(dòng)和關(guān)閉服務(wù)。
假設(shè)在server的代碼中,不提供這兩個(gè)函數(shù),Tuxedo將使用缺省函數(shù)。
tpsvrinit()用tpopen()缺省打開RM連接。
tpsvrdone()用tpclose()關(guān)閉RM連接。
tpsvrinit()僅僅在服務(wù)boot起來時(shí)運(yùn)行一次。對(duì)應(yīng)的 tpsvrdone()也僅僅在服務(wù)shutdown時(shí)運(yùn)行一次。
?
設(shè)計(jì)服務(wù)時(shí)的幾點(diǎn)考慮:
l? 最好不要使用收到的數(shù)據(jù)緩沖向其它服務(wù)請(qǐng)求。由于該緩沖可能被改變引起錯(cuò)誤。
l? 所有在服務(wù)中分配的數(shù)據(jù)緩沖。在程序結(jié)束時(shí)必須所有釋放;唯一例外是用在tpreturn()中的返回?cái)?shù)據(jù)緩沖。
l? 服務(wù)中的交易不應(yīng)調(diào)用本服務(wù)中的交易,由于easy產(chǎn)生死鎖。
l? 一個(gè)MSSQ集中的服務(wù)須要返回時(shí),應(yīng)有自己的返回隊(duì)列;否則會(huì)與本集中其它服務(wù)沖突。(RQADDR = XXXX ,同一時(shí)候REPLYQ = Y)。?
?
緩沖區(qū)數(shù)據(jù)類型:
l? Client與Server之間,Server與Server之間,都要通過數(shù)據(jù)緩沖區(qū)來傳遞數(shù)據(jù)。
?
l? sTuxedo支持下圖所看到的的緩沖區(qū)類型:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
l? Buffer type包括:STRING,CARRY,VIEW,FML等。
STRING:是以空值結(jié)尾的單字字符串
CARRY:有長(zhǎng)度定義的二進(jìn)制數(shù)據(jù)。
VIEW:? 類似于C的structure。
FML:? 固定結(jié)構(gòu)的自己定義緩沖。
?
Tuxedo中的事務(wù)處理
l? 不管是Client還是Server都能夠主動(dòng)發(fā)起一個(gè)全局事務(wù)。
l? Tuxedo會(huì)對(duì)一個(gè)transaction產(chǎn)生一個(gè)全局交易ID(GTRID)。這個(gè)ID號(hào)在全部的交易參與這樣的共享。并唯一標(biāo)示這個(gè)transaction。
l? Tuxedo通過TLOG,來跟蹤一個(gè)全局交易。
l? 提供通知(notify)RM的方法,使得RM知道自己參加到一個(gè)交易中,并lock住對(duì)應(yīng)的記錄。
l? Tuxedo作為TM,能夠管理兩階段提交(two-phase commit)。使得全部交易參與者一起提交,保持結(jié)果的一致性。
?
TMS和RM之間,使用XA接口來協(xié)調(diào)工作。
Tuxedo提供tpbegin, tpcommit, tpabort 等API來管理交易
?
Tuxedo中的事務(wù)處理:
?
事務(wù)管理器:
轉(zhuǎn)載于:https://www.cnblogs.com/blfshiye/p/4584369.html
總結(jié)
以上是生活随笔為你收集整理的Tuxedo学习门户网站的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadPoolExecutor运转
- 下一篇: 使用ImageMagick 在图片上绘制