趙維,趙雋
(1.吉林警察學院,長春 130117;2.長春師范大學,長春 130022)
基于劵商的Transmid事務處理機的設計與實現(xiàn)
趙維1,趙雋2
(1.吉林警察學院,長春130117;2.長春師范大學,長春130022)
針對不同的券商接口,當面對統(tǒng)一請求的數(shù)據(jù)格式時,不同的券商就很可能無法“讀懂”用戶到底在請求什么數(shù)據(jù),本文設計了一個基于券商的Transmid事務處機系統(tǒng)。Transmid事務處理機系統(tǒng)采用了線程池、進程間通信和Lua函數(shù)與C/C++接口交互技術,通過測試,該模型層次清晰、易于實現(xiàn)、并發(fā)性能高。
Transmid事務處理機;券商;并發(fā)性;Lua函數(shù)
隨著互聯(lián)網(wǎng)技術的飛速發(fā)展,人們越來越需要把來自不同企業(yè)的開發(fā)的軟件集成起來,來獲得更大的信息資源共享。中間件作為連接不同平臺與終端用戶之間的軟件應用而生。它具有標準協(xié)議和接口的通用軟件,為用戶提供了良好的可靠性、可用性、靈活性[1],圖1所示為中間件模型。
圖1 中間件模型
中國近年來也先后有很多關于中間件的研究,如尹東杰研究了中間件在保險也上的設計應用[2],呂光研究了中間件在航空上的應用[3],沈滌研究了中間件在住房公積金上的應用[4],還有很多這樣類型的研究,實際上中間件已經(jīng)應用了我們生活中的各個方面。
本文主要提出一種基于券商的中間件Transmid事務處理機,它針對不同的券商,提供一種接口,方便用戶和券商之間的聯(lián)系。
1.1線程池
線程池是用來存放線程的地方[5],由于它的容量有限,眾多線程之間的調(diào)用需要一個線程池的管理機制,它管理線程的休眠和喚醒。一般為,每次外界程序都會通過一定的方式一次喚醒一個線程,同時休眠相應的一個線程,然后運行這個喚醒的線程,這種喚醒與休眠不是隨機運行的,它是通過一定的算法結構進行的,比如線性隊列,優(yōu)先級排序,最大權值法等等。同時,線程是一個正在或?qū)⒁獔?zhí)行的程序代碼,所以它必然有一個接口,該接口實現(xiàn)線程想要的功能,比如訪問數(shù)據(jù)庫,實現(xiàn)圖形界面等,因此,線程池需要一個緩沖區(qū),在這個區(qū)間里,可以存放著比較活躍的線程。線程池所占的空間內(nèi)存很小,但是卻能起到很大的作用。
1.2進程間的通信技術
進程間通信[6](IPC,Inter-Process Communication)是進程或線程間傳送數(shù)據(jù)或信號的一些技術或方法。計算機系統(tǒng)分配資源的最小單位是進程(嚴格說來是線程)。進程間通信方法包括消息隊列、共享內(nèi)存和信號量等。
共享內(nèi)存,就是映射一段內(nèi)存,這段內(nèi)存能被其他進程所訪問,這段共享內(nèi)存被一個進程所創(chuàng)建,但多個進程都可以訪問到這段內(nèi)存。進程會把這個地址映射到一個虛擬地址。
共享內(nèi)存是最快的進程間通信方式,它是為了解決其他進程間通信方式運行效率低的問題,從而專門設計的。它往往與其他通信機制,如信號量,配合使用,來實現(xiàn)進程間的同步和通信。
消息隊列,是獨立于生成它的進程的內(nèi)存中的一段存儲區(qū)。一旦一個消息隊列被創(chuàng)建,它總是可以被某個進程訪問,只要這個進程具有正確的訪問權限。消息隊列中的每一條消息,都要被進行分類,我們可以通過編號,來進行這樣的分類。消息隊列里面有一個標志形式,用來表示正在被哪些進程共享與占用,進程可以通過消息隊列進行互相交互,從而達到通信的目的,這是消息隊列的重要作用。
信號量(Semaphore),也被稱為信號燈,是在多線程環(huán)境下使用的一種變量,是可以用來保證兩個或多個關鍵代碼段不被同時調(diào)用。信號量通常是一個非負整數(shù),所有通過它的線程/進程,都會將該整數(shù)減1(通過它當然是為了使用資源),當該整數(shù)值為零時,所有試圖通過它的線程/進程,都將處于等待狀態(tài)。
1.3Lua函數(shù)與C/C++接口交互技術
Lua函數(shù)是由Lua腳本語言實現(xiàn)[7]。Lua函數(shù)與C++腳本的交互分為兩部分,第一部分是Lua函數(shù)訪問C++的接口,第二部分是C++接口訪問Lua函數(shù)。Lua程序被嵌入到C++程序中,目的是為了起到一個橋梁的作用。整個程序的功能由C++提供,而Lua程序只負責調(diào)用這些功能,并結合自身的優(yōu)點,來對它們進行快速重組,以此,來控制各函數(shù)及模塊之間的邏輯關系。Lua函數(shù)所調(diào)用的C函數(shù)的函數(shù)原型,在C程序中需要將這種函數(shù)類型的函數(shù),注冊到Lua狀態(tài)機中,此后,Lua才能調(diào)用到C的函數(shù)。
Lua函數(shù)與C++或者C是通過“?!蓖瓿蓴?shù)據(jù)互相訪問的。在數(shù)據(jù)交互過程中,第一步是先將數(shù)據(jù)壓入到“?!崩铮蟆皸!睍祷匾粋€索引值,通過這個索引值,我們能夠進行定位,索引值以1或-1為起始值,+1與-1分別表示不同的含義,+1表示在棧的底部進行索引,-1表示在棧的頂部進行索引?!皸!本褪且粋€寄存區(qū)域,通過“棧”,Lua與別的語言就能相互進行交互操作,“?!笔撬鼈冞M行相互交互的一個接口,如果沒有棧,它們之間就不能相互溝通操作。
本文將事物處理機分為Lua業(yè)務層、Lua腳本框架和Transmid.exe三層。通過對這三層進行明確分割,實現(xiàn)邏輯上的獨立,提高通信效率。事物處理機的整體框架如圖2所示。
圖2 事物處理機的整體框架
2.1Lua業(yè)務層
Lua業(yè)務層主要包含三個配置表:xxxcomm. lua、xxxconfig.lua和config.lua,分別完成對Transmid事務處理機通訊協(xié)議、監(jiān)聽端口、調(diào)度方式、預處理線程數(shù)及營業(yè)部信息的配置。其中,通信協(xié)議的配置中,采用TCP或UDP,在快速接口中,采用TCP通信協(xié)議;監(jiān)聽接口的配置中,主要是指下單客戶端、委托主站、事物處理機、各自使用的端口要協(xié)調(diào)一致,下單客戶端和委托主站使用同一個監(jiān)聽端口,委托主站和事物處理機使用同一個監(jiān)聽端口;調(diào)度方式配置,主要是指按功能分發(fā),營業(yè)部均衡、強制均衡或默認的方式,選擇不同的券商。
2.2Lua腳本框架
Lua腳本框架主要包含Jmodel封裝而成,JModel 是MVC[8]的重要插件,它是數(shù)據(jù)視圖層,主要負責實現(xiàn)了數(shù)據(jù)按照配置表(xxxConfig.lua)、處理拼裝請求以及從柜臺返回數(shù)據(jù)后回填到對應的返回結構中,并且它負責了和底層C++框架的交互。
2.3Lua狀態(tài)層
Lua狀態(tài)層主要包含C/C++框架、線程池及xxxlink.dll動態(tài)鏈接庫。其中,C/C++框架主要用來對Transmid事物處理機中與委托主站通信和數(shù)據(jù)儲存,并且在數(shù)據(jù)存儲方面,采用了Oracle數(shù)據(jù)庫[9]。線程池主要針對Transmid事物處理機中有大量請求并發(fā)訪問時,減少服務器創(chuàng)建和銷毀對象的開銷,重復利用資源。xxxlink.dll動態(tài)鏈接庫為主程序提供方法,進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù),并可以很容易地將更新應用于各個模塊,而不會影響該程序的其它部分。
3.1Transmid設計
Transmid事務處理機主要實現(xiàn)不同券商與用戶終端的接口,主要的功能需求如圖3所示。
圖3 事務處理機用例圖
從圖3可以看出Transmid事務處理機主要分為請求處理、應答處理、線程處理、客戶端、服務器、日志處理、異常處理、管理功能和其他配置等,其中請求處理是主要處理客戶下單發(fā)來的請求,應答處理主要做的是當有請求時,柜臺要做出相應的處理,線程處理主要實現(xiàn)多線程處理,這樣可以很有效地提高工作效率,處理好并發(fā)和同步操作,日志處理以及異常處理都是用于處理方便BUG的修改。
3.2Transmid交易框架
Transmid事物處理機在整個券商的交易系統(tǒng)中處于一個核心地位,它控制了整個交易系統(tǒng),來鏈接下單終端和券商之間的操作,方面了操作提高了系統(tǒng)的運行速度,在一定程度上方便了系統(tǒng)的操作[10],在券商與終端的的框架圖如圖4所示。
圖4 交易系統(tǒng)框架圖
交易系統(tǒng)框架主要包含下單終端、委托主站、Transmid事物處理機和券商。其中,下單客戶端主要是為用戶提供委托下單用的程序,用戶通常利用電腦軟件、手機APP進行炒股,所用的客戶端工具,即為下單客戶端,用戶利用自己的客戶號或資金賬號等,進行登錄后,可以實現(xiàn)股票的功能,如委托、查詢功能等;基金的功能,如申購認購等。委托主站主要負責所有交易類的請求的接入(當然,委托網(wǎng)關也會接入交易類請求,但是最終還是發(fā)送到委托主站上)。委托主站會處理部分的業(yè)務數(shù)據(jù),比如在用戶查詢股票持倉的時候,委托主站會處理對應每支股票的盈虧。委托主站甚至能更新下單客戶端,或者是根據(jù)客戶端的版本,強制更新客戶端的配置等等功能。委托主站可以接入下單客戶端連接到Transmid事務處理機。
交易的處理過程主要分為兩階段,第一階段為準備階段,Transmid事務處理機讀取數(shù)據(jù)包頭;第二階段為執(zhí)行階段,當事務處理機收到數(shù)據(jù)包之后,讀取數(shù)據(jù)包頭,事務處理機根據(jù)結果的交易信息內(nèi)容判斷交易是否成功,將返回的信息返回給客戶。下面為數(shù)據(jù)的直接交易,下單終端將信息發(fā)送給服務器,將結果返回給事務處理機,然后將正確結果返回給客戶。
3.3Transmid系統(tǒng)應用實例
Transmid事務處理機具有較好的實用性,可以進行各種交易的事物處理功能,可以對數(shù)據(jù)庫的數(shù)據(jù)進行插入、修改、查詢、刪除操作,同時可以實現(xiàn)數(shù)據(jù)的接收和發(fā)送,而且可以建立高速的傳輸通道,保證數(shù)據(jù)的完整性和一致性。本文主要對Transmid系統(tǒng)的取消證券交易處理過程測試,如圖5所示。
圖5 取消證券交易處理過程
本文主要介紹Transmid事務處理機在取消證券交易過程中的處理過程,其中SendData表示將交易數(shù)據(jù)發(fā)送到某一固定長鏈接上;RecvData表示從某一固定長鏈接上接收交易數(shù)據(jù);GetResult表示對交易結果進行判斷,將證券交易結果返回客戶,由此提高了分布式交易處理的效率,順利完成退票交易。
本文提出了基于交易中間件的Transmid事務處機模型,該模型采用了多線程技術和事務處理技術,作為券商與用戶的接口,方便了用戶證券的交易。通過測試,該模型層次清晰、易于實現(xiàn)、并發(fā)性能高,方便了用戶證券的交易。但在集群處理能力和分布式處理能力上還有一定的提升空間。
[1] 李志彤,呂國英.交易中間件的基本實現(xiàn)原理[J].計算機工程,2003,29(6):32-33.
[2] 尹東杰.基于交易中間件CICS的失業(yè)保險信息系統(tǒng)設計[D].上海:復旦大學,2011.
[3] 呂光.基于交易中間件的航班特殊服務請求控制系統(tǒng)的設計與實現(xiàn)[D].北京:北京大學,2011.
[4] 沈滌.基于交易中間件的住房公積金管理系統(tǒng)的開發(fā)與設計[D].上海:復旦大學,2008.
[5] 楊開杰,劉秋菊,徐汀榮.線程池的多線程并發(fā)控制技術研究[J].計算機應用與軟件,2010,27(1):168-170.
[6] 李小群,趙慧斌,孫玉芳.進程間通信機制的分析與比較[J].計算機科學,2002,29(11):16-21.
[7] 鄧正陽,陳和平,蘇鵬.動態(tài)腳本語言Lua與C++交互方法的研究與實現(xiàn)[J].計算機應系統(tǒng)應用,2010,19 (5):198-200.
[8] 胡前進,蔡永州,吳敏.基于MVC模式的Joomla!框架在Web系統(tǒng)組件擴展開發(fā)中的應用研究[J].現(xiàn)代教育技術,2009,19(6):97-100.
[9] 姚燕,高峰,郭萍.Oracle數(shù)據(jù)庫鏈接技術及其應用[J].氣象科技,2006,34:19-21.
[10] 郭志強.面向?qū)ο蟮姆植际街虚g件技術的研究與實現(xiàn)[D].重慶:重慶大學,2005.
The Design and Implementation of Transaction Middleware Processor System Based on Broker
ZHAO Wei1,ZHAO Jun2
(1.Jilin Police College,Changchun 130117;2.Changchun Normal University,Changchun 130022)
In this paper,a transaction middleware processor system based on broker is designed to aim at the interfaces of different brokers which face with a unified data format requested and it might not read what the users’data is requested.The transaction middleware processor uses the thread poo,inter process communication,Lua function and C/ C++interface interaction technology.The test shows that the middleware processor model has a clear model level,easy-to-implement and high concurrency.
a transaction middleware processor system;broker;high concurrency;Lua function
TP368.2
A
1672-9870(2015)06-0168-04
2015-11-04
趙維(1983-),女,碩士,助教,E-mail:541241178@qq.com