霍長娟1,孫洪平2
(1. 中國航空結算有限責任公司,北京 100028;2. 北京高陽金信信息技術有限公司,北京 100050)
摘要:主要介紹了一款基于消息通信的中間件軟件——The Cocklebur Network,即Tcn中間件的設計與實現。該系統具有以下特點:多進程模型、預先創建子進程機制,提高系統響應速度;編程API簡單易用,都是圍繞Tcn軟件中專有的協議——Tcn協議展開,可運用標準的C語言庫函數與頭文件進行各種應用服務的開發;Tcn設計并實現了通過動態庫與靜態鏈接兩種方式加載用戶服務;同時此款軟件還支持文件傳輸、負載均衡等功能。經過LoadRunner測試,該軟件有較好的性能,可以滿足大多數企業需要。
關鍵詞:Tcn;多進程模型;Tcn協議;LoadRunner
中圖分類號:TP311文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2017.05.005
引用格式:霍長娟,孫洪平.Tcn中間件系統的設計與實現[J].微型機與應用,2017,36(5):14-17,20.
0引言
中間件是分布式系統中的一層支撐軟件,它位于操作系統和應用程序之間,負責對應用程序及開發人員屏蔽系統中硬件、網絡、操作系統和編程語言等方面的異構性并向他們提供統一的運行平臺和友好的開發環境。目前主流的中間件有Weblogic、Tuxedo、Websphere等,這些中間件都擁有各自的應用領域。本文主要介紹一款基于消息通信的中間件軟件(The Cocklebur Network,Tcn),即Tcn中間件的設計與實現,在保持屏蔽各種異構性功能的基礎上,它的設計與實現又有自身的特點,由于Tcn涉及的模塊較多,本文將從多進程模型[12]、用戶服務加載兩方面內容進行重點介紹,最后給出測試結論。
1系統架構
Tcn中間件屬于消息通信中間件,完全結合實踐設計,擴展性好,易于使用。下面以銀行取款案例說明Tcn的架構設計,如圖1所示,客戶在柜臺客戶端(這里稱為Tcn Client)發起取款請求,Tcn Client通過Tcn協議[3] 與服務器(這里稱為Tcn Server)進行通信,在Tcn Server中,管理進程Tcnd負責管理整個Tcn Server,是整個系統的中樞,工作進程Tcnw負責響應客戶端的請求,并根據配置文件等信息調用與之對應的取款服務(這里稱為Service),這就是取款業務在Tcn中間件中的工作流程,另外,Tcn Client端的取款請求以及供Tcnw調用的取款Sevice都是基于Tcn編程接口進行開發的。
2軟件說明
Tcn軟件主要由運行系統與開發系統組成。運行系統作為整個系統的中樞,控制著所有資源的申請、回收、釋放,調度系統中的全部應用服務。開發系統提供C語言的庫函數與頭文件,供用戶開發應用程序。
2.1產品目錄結構
Tcn軟件假定安裝在AIX環境中/home/tcn目錄下,產品的目錄結構如下:
/home/tcn/bin//執行文件存放位置
/home/tcn/inc//開發環境頭文件
/home/tcn/lib//開發環境函數庫
/home/tcn/cfg//配置文件與重建Tcn模版存放位置
/home/tcn/cfg/app.conf//配置文件模版
/home/tcn/cfg/tcn.mk//重建Tcn的腳本模版
/home/tcn/sample//用戶服務例子
2.2運行系統組成
運行系統由5部分組成:核心進程、管理工具、配置文件、日志文件、環境變量。
(1)核心進程:整個系統的運行關鍵部分。
tcnd:負責對整個系統進行監控管理的守護進程。
tcnw:負責接受客戶端訪問、調用服務、返回處理結果的進程。
tcnlogd:負責登記系統日志。
(2)管理工具
tcnx:用于啟動、關閉、重啟Tcn系統,檢查運行狀態,檢查配置文件語法。
tcnr:熱重啟腳本,先檢查配置文件語法,然后發送重啟信號。
tcns:檢查Tcn系統是否為運行的腳本。
tcnping:用于測試服務器節點是否可以連通。
tcnas:用于監控服務器運行狀態等信息。
(3)配置文件:整個tcn系統運行的依據。
(4)日志文件:記錄系統運行時的錯誤、警告、提示等信息。
(5)環境變量:Tcn的運行需要設置2個環境變量TCN_CONFIG、PATH。
TCN_CONFIG:設置Tcn系統的配置文件路徑。
PATH:將Tcn可執行文件目錄加入到PATH環境變量中,以便Tcn的管理工具可以通過PATH查找到。
2.3開發系統組成
Tcn開發系統由編程頭文件與函數庫組成。
(1)頭文件
tpdi.h:用戶編程API的頭文件。
tpft.h:用于傳輸文件的編程頭文件。
(2)函數庫
libtpdi.a:用戶編程API的函數庫。
3多進程模型
3.1多進程模型機制
整個Tcn Server通過多進程模型機制對外提供服務,設計多進程模型的目的是為了提高響應速度和系統整體運行效率并達到無縫重啟。所謂多進程模型就是系統中存在兩種進程,如圖2所示。一種是對外提供服務的進程worker process,此類進程用于響應客戶端請求并調用相應的服務;另一種進程就是預先創建的子進程(這里稱之為prefork worker process),時刻處于ready狀態,準備成為worker process。為什么多進程模型機制能提高系統的響應速度?在傳統中間件系統中,當服務連接請求到達之后,fork函數會為服務連接請求創建子進程,并分配相應資源,進而對外提供服務,而在Tcn系統中,系統啟動之初,管理進程Tcnd就根據配置文件的參數設置預先創建N個子進程(prefork worker process)等待用戶服務請求,這些子進程一直處于ready狀態,當用戶服務請求到達之后,直接對外提供服務,而不需要fork函數再創建子進程,所以很顯然能提高工作效率。
3.2創建、回收進程
如何保證預先創建的子進程個數既能滿足對外提供服務又不會造成資源浪費?如圖2所示,在多進程模型中,完成這種預先創建的機制主要涉及3個活動:fork創建子進程、reclaim回收進程、布告板(bulletin board)信息的維護。也就是說,無論創建還是回收子進程都是以布告板信息為依據的,因為布告板中記錄著系統當前的worker process的個數,目前處于busy、ready還是idle狀態等信息,管理進程Tcnd就是根據這些信息進行動態創建回收子進程,進而保證資源平衡。
3.3配置文件中的指令
配置文件是Tcn系統啟動、重啟的依據,通過修改配置文件,對Tcn系統進行功能裁剪。配置文件提供多達40條指令,這些指令控制著資源的申請、進程數量、監聽端口、負載均衡、增加主機訪問控制、導出用戶服務等。在多進程模型中,有兩個指令發揮重要作用:
(1)MinfreeDaemons:最小空閑子進程數量,默認值為5。
(2)MaxfreeDaemons:最大空閑子進程數量,默認值為10。
Tcn啟動之初,管理進程會根據配置文件預先創建N個子進程,即N個prefork worker process,N設置為大于1的整數,后續的創建與回收主要以當前負載為基準,管理進程時刻關注著布告板(bulletin board)中的worker進程信息,查看當前的負載情況,同時根據MinfreeDaemons和MaxfreeDaemons的值來維護prefork worker process的個數進行資源的平衡。
4用戶服務加載
用戶服務加載主要是指Tcn系統如何通過接口與用戶服務程序進行連接。Tcn設計并實現出通過動態庫[4] 與靜態鏈接兩種方式加載用戶服務程序的方法,相比其他中間件,大大提高了軟件的靈活性,方便開發人員使用。
4.1靜態鏈接
像大多數中間件一樣,Tcn提供靜態鏈接的方式加載用戶服務程序。所謂靜態鏈接,在Tcn中就是指用戶服務程序不被編譯成動態庫文件,而是通過服務程序源文件重建成Tcn的工作進程——Tcnw來實現,當客戶端發起服務請求時,管理進程Tcnd直接分配Tcnw進程,調用相應服務,響應請求。目前大多數中間件都是這種加載方式。靜態鏈接的方式最大的缺點就是在更新服務時必須停止系統。
4.2動態庫
Tcn除提供靜態鏈接外,還提供另外一種方式加載用戶服務,即動態庫加載。所謂動態庫加載就是用戶服務程序被編譯成動態庫文件,同時用戶服務程序與動態庫文件的關系(即哪些用戶服務程序被編譯成哪個動態庫文件)記錄到配置文件中,Tcn啟動時,根據配置文件加載動態庫到系統中,同時建立一個哈希列表,記錄用戶服務程序與動態庫文件之間的關系。如圖3所示,當客戶端服務請求到達之后,會話句柄分析服務請求(request)是否符合Tcn協議以及語法語義要求,如果符合,進一步分析出需要調用的服務名,然后去哈希表中尋找該服務入口,根據指針指向調用相應的服務,完成此次請求。
通過動態庫加載用戶服務程序可以實現在不停止系統運行的情況下通過熱啟動的方式來變更服務。例如,當出現取款服務需要緊急變更而系統中的取款服務又沒有運行(run)完時,就需要動態庫加載。Tcn是這樣解決的,保持系統中的取款服務繼續運行,修改取款服務程序源文件(由于取款服務源文件之前已經被編譯成動態庫文件,目前系統中取款服務是通過調用動態庫加載的,與取款服務源程序文件已經沒有關系,因此這時可以修改取款服務源文件),修改完源文件后,再編譯成動態庫文件,進而把原動態庫文件替換掉即可,最后通過熱啟動Tcn,就可以根據配置文件重新加載新的服務。在整個過程中,系統中舊有的取款服務一直處于running狀態,直到結束,這就是通過加載動態庫方式,不需要重啟機器就可以變更服務的過程。
動態庫加載服務的方式大大提高了軟件的靈活性,尤其在要求不能宕機的實際生產業務中,將體現出其重要作用。
5測試結果
為了證明Tcn產品的性能及穩定性,確保其高吞吐率及在高并發環境中的持續穩定運行,針對Tcn系統進行了壓力測試。本次測試的范圍,選取foo服務進行測試(服務foo就是接收來自客戶端發送的字符串,然后應答相同的字符串)。在性能測試過程中,測試Tcn系統的并發能力和平均響應時間。在負載均衡測試過程中模擬關閉一個負載節點,能否自動將請求轉發至其他的節點。
以性能測試為例,經過10 h的測試,成功率為100%,如表1所示。通過分析測試結果,平均響應時間都在毫秒級,從資源監控的結果圖(圖4~圖9)中可以看出,CPU、內存、磁盤I/O均消耗很少,網絡I/O相對較為繁忙。因此在較高的TPS情況下,Tcn服務器自身消耗較少的系統資源。
在測試結果中,短鏈接的TPS遠遠低于長鏈接的TPS,短鏈接的平均響應時間也高于長鏈接。長鏈接能大幅提升系統整體性能,但是長鏈接在長時間的空閑后,網絡鏈接依然存在,無法收發報文,通常的解決辦法是定時發送探測報文;另外長鏈接也不利于實現負載均衡。所以Tcn服務器實現一定請求次數的長鏈接后就會斷開鏈接,這樣既能保留長鏈接的優點,也利于實現負載均衡。在負載均衡測試中,模擬關閉一個負載節點,在負載節點切換過程中,并未對代理服務器的資源占用造成較大幅度變動。以下給出短鏈接的測試結果:
VUs: LoadRunner中的虛擬用戶數,模擬客戶端的數量。
6結論
本文概要介紹了Tcn軟件的概念及基本功能,結合其特點,重點描述了多進程模型機制的原理、實現,用戶加載服務的兩種方法。最后給出了利用LoadRunner進行性能及壓力測試的測試報告,證明Tcn系統在高并發環境中能保持高吞吐率并且持續穩定運行。
參考文獻
[1] STEVENS W R.UNIX 網絡編程[M].楊繼張,譯. 北京:人民郵電出版社,2009.
[2] STEVENS W R.TCP/IP詳解[M].范建華,譯.北京:機械工業出版社,2000.
[3] SURHONE L M, TENNOE M T, HENSSONOW S F. External data representation[M].Betascript Publishing,2010.