Tuxedo是什么?
Tuxedo是BEA公司(現已被Oracle公司收購)的一個客戶機/服務器的“中間件”產品,它在客戶機和服務器之間進行調節,以保證正確地處理事務。它用C語言技術開發的并且有很高性能。
Tuxedo的主要作用
屏蔽分布式環境中各種通信協議、硬件體系結構、操作系統、數據庫和其它應用服務等方面的差異,使分布于網絡節點上的應用程序的各個單元部件之間能夠進行互操作,并協調操作的一致性和完整性,最大限度地節省系統資源,提高系統性能。
從左邊往右依次為:客戶端層(表現層),中間件服務層(業務邏輯層),數據庫服務器層(數據層)。這種典型的三層架構應用非常廣泛。對于應用weblogic中間件的系統一般采用的B/S架構,絕大部分采用HTTP協議,少量的系統用java編寫的客戶端,使用的是RMI 協議,或J2EE里的其它協議。
對于tuxedo中間件使用的是tuxedo協議,前端開發工具可以是各式各樣,VC++ 、java 、Delphi 、VB 等。
Tuxedo的通訊過程
Tuxedo 服務器一次請求需要兩次進行兩次交互,Tuxedo有兩個負責通訊的進程,一個為WSL,WSL的數量可以進行配置,典型的配置一般兩、三個;WSH可以有N多個。
客戶端通過IP地址和端口號與WSL建立連接,由WSL認證請求是否合法,在WSL的響應中包含了另外一個IP地址和端口號;然后,客戶端通過拿到的新的IP地址和端口號去請求WSH。
客戶端程序由GUI 與 Tuxeo通訊兩部分組成,GUI部分主要由開發人員關心如何設計,通訊部分可能設計成幾個函數供開發人員調用。對于性能測試人員可能更關心客戶端與服務器之間的通訊過程。
相關概念
- IPC
Inter-Process Communication 進程間通信: 管道、信號量(semaphore)、共享內存(shared memory)、消息隊列(Message Queue)。
管道是UNIX系統IPC的最古老形式,數據只能單向流動。
Tuxedo在客戶機和服務器通信中大量使用UNIX系統的消息隊列。
1 | SSSO(Single Server Single Queue)模式:每個客戶機都有一個響應隊列來接受客戶端請求。 |
信號量包含一個計數器,表示某個資源正在被訪問和訪問的次數,用來控制多線程對共享數據的訪問。
Tuxedo使用共享內存存儲公告牌,用來公告進程狀態信息和需要在進程間共享或傳遞的數據。
- UBBCONFIG
Tuxedo的配置文件稱為UBBCONFIG或ubb,包含了域(Domain)、邏輯機器(Machine)、服務器組(Group)、服務進程(Server)、服務(Service)的定義。運行前,需要把UBBCONFIG裝載成二進制文件,稱為TUXCONFIG。
Tuxedo服務啟動時,執行tpsvrinit()函數,可以打開一些如數據庫之類的資源供以后使用
Tuxedo服務停止時,執行tpsvrdown()函數,關閉資源
服務程序調用tpreturn()函數來結束服務請求,并返回一個緩沖區,必要時,將它傳給客戶程序。
- 通信方式
ATMI環境支持的C/S通信方式:請求/應答式通信、回話通信、隊列通信、事件代理通信、消息通知
請求/應答式通信:同步調用(tpcall)、異步調用(tpacall)、嵌套調用、轉發調用(tpforward)
轉發調用和嵌套調用類似,不同的是最里層的嵌套服務可以直接給客戶程序一個響應,而不必按照調用棧 逐級返回。
回話方式:tpsend()/tprecv() 基于事件,分通告和代理
void (**p)(): 定義了一個指向函數指針的指針p
tpsetunsol(p) : 將p指向的函數func設置為客戶機的事件處理器。
tpchkunsol(): 檢查意外事件
事件代理: tppost()/tpsubscribe() 消息發布/訂閱
Tuxedo提供了兩個事件代理器(TMUSREVT TMSYSEVT)來處理訂閱請求。
隊列存儲: tpenqueue() / tpdequeue()
Tuxedo/Q用到了Tuxedo提供的兩個服務器:消息隊列服務器(TMQUEUE)和消息轉發服務器(TMQFORWARD)
- WS(Workstation Extension Product)
用于指TUXEDO產品的客戶端部分
- WSC(Workstation Client)
- WSL(Workstation Listener)
TUXEDO系統自帶的一個SERVER,它偵聽一個指定的端口,WSC最初與該SERVER建立連接
- WSH(Workstation Handler)
TUXEDO系統自帶的一個SERVER,由它處理WSC與TUXEDO SERVER之間的通訊。
- Bulletin Board(公告板)
TUXEDO把系統的配置保存在一個共享內存中,該共享內存稱為公告板(BB)
- BBL
TUXEDO的管理進程,主要對公告板等進行管理
Workstation Client與TUXEDO SERVER建立連接的過程為:
1.WSC 調用tpinit()或tpchkauth()
2.WSC 采用在WSNADDR中指定的IP地址與服務端的WSL建立連接
3.WSL 為該WSC指定一個WSH,并把該WSH的偵聽端口返回給WSC
4.WSC 采用返回的端口與指定的WSH建立連接,并與WSL斷開連接,這之后WSC與TUXEDO SERVER之間的通訊通過WSH進行處理,與WSL無關
5.tpinit()或tpchkauth()調用返回