趙維,趙雋
(1.吉林警察學(xué)院,長(zhǎng)春 130117;2.長(zhǎng)春師范大學(xué),長(zhǎng)春 130022)
基于劵商的Transmid事務(wù)處理機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
趙維1,趙雋2
(1.吉林警察學(xué)院,長(zhǎng)春130117;2.長(zhǎng)春師范大學(xué),長(zhǎng)春130022)
針對(duì)不同的券商接口,當(dāng)面對(duì)統(tǒng)一請(qǐng)求的數(shù)據(jù)格式時(shí),不同的券商就很可能無(wú)法“讀懂”用戶到底在請(qǐng)求什么數(shù)據(jù),本文設(shè)計(jì)了一個(gè)基于券商的Transmid事務(wù)處機(jī)系統(tǒng)。Transmid事務(wù)處理機(jī)系統(tǒng)采用了線程池、進(jìn)程間通信和Lua函數(shù)與C/C++接口交互技術(shù),通過(guò)測(cè)試,該模型層次清晰、易于實(shí)現(xiàn)、并發(fā)性能高。
Transmid事務(wù)處理機(jī);券商;并發(fā)性;Lua函數(shù)
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,人們?cè)絹?lái)越需要把來(lái)自不同企業(yè)的開發(fā)的軟件集成起來(lái),來(lái)獲得更大的信息資源共享。中間件作為連接不同平臺(tái)與終端用戶之間的軟件應(yīng)用而生。它具有標(biāo)準(zhǔn)協(xié)議和接口的通用軟件,為用戶提供了良好的可靠性、可用性、靈活性[1],圖1所示為中間件模型。

圖1 中間件模型
中國(guó)近年來(lái)也先后有很多關(guān)于中間件的研究,如尹東杰研究了中間件在保險(xiǎn)也上的設(shè)計(jì)應(yīng)用[2],呂光研究了中間件在航空上的應(yīng)用[3],沈滌研究了中間件在住房公積金上的應(yīng)用[4],還有很多這樣類型的研究,實(shí)際上中間件已經(jīng)應(yīng)用了我們生活中的各個(gè)方面。
本文主要提出一種基于券商的中間件Transmid事務(wù)處理機(jī),它針對(duì)不同的券商,提供一種接口,方便用戶和券商之間的聯(lián)系。
1.1線程池
線程池是用來(lái)存放線程的地方[5],由于它的容量有限,眾多線程之間的調(diào)用需要一個(gè)線程池的管理機(jī)制,它管理線程的休眠和喚醒。一般為,每次外界程序都會(huì)通過(guò)一定的方式一次喚醒一個(gè)線程,同時(shí)休眠相應(yīng)的一個(gè)線程,然后運(yùn)行這個(gè)喚醒的線程,這種喚醒與休眠不是隨機(jī)運(yùn)行的,它是通過(guò)一定的算法結(jié)構(gòu)進(jìn)行的,比如線性隊(duì)列,優(yōu)先級(jí)排序,最大權(quán)值法等等。同時(shí),線程是一個(gè)正在或?qū)⒁獔?zhí)行的程序代碼,所以它必然有一個(gè)接口,該接口實(shí)現(xiàn)線程想要的功能,比如訪問(wèn)數(shù)據(jù)庫(kù),實(shí)現(xiàn)圖形界面等,因此,線程池需要一個(gè)緩沖區(qū),在這個(gè)區(qū)間里,可以存放著比較活躍的線程。線程池所占的空間內(nèi)存很小,但是卻能起到很大的作用。
1.2進(jìn)程間的通信技術(shù)
進(jìn)程間通信[6](IPC,Inter-Process Communication)是進(jìn)程或線程間傳送數(shù)據(jù)或信號(hào)的一些技術(shù)或方法。計(jì)算機(jī)系統(tǒng)分配資源的最小單位是進(jìn)程(嚴(yán)格說(shuō)來(lái)是線程)。進(jìn)程間通信方法包括消息隊(duì)列、共享內(nèi)存和信號(hào)量等。
共享內(nèi)存,就是映射一段內(nèi)存,這段內(nèi)存能被其他進(jìn)程所訪問(wèn),這段共享內(nèi)存被一個(gè)進(jìn)程所創(chuàng)建,但多個(gè)進(jìn)程都可以訪問(wèn)到這段內(nèi)存。進(jìn)程會(huì)把這個(gè)地址映射到一個(gè)虛擬地址。
共享內(nèi)存是最快的進(jìn)程間通信方式,它是為了解決其他進(jìn)程間通信方式運(yùn)行效率低的問(wèn)題,從而專門設(shè)計(jì)的。它往往與其他通信機(jī)制,如信號(hào)量,配合使用,來(lái)實(shí)現(xiàn)進(jìn)程間的同步和通信。
消息隊(duì)列,是獨(dú)立于生成它的進(jìn)程的內(nèi)存中的一段存儲(chǔ)區(qū)。一旦一個(gè)消息隊(duì)列被創(chuàng)建,它總是可以被某個(gè)進(jìn)程訪問(wèn),只要這個(gè)進(jìn)程具有正確的訪問(wèn)權(quán)限。消息隊(duì)列中的每一條消息,都要被進(jìn)行分類,我們可以通過(guò)編號(hào),來(lái)進(jìn)行這樣的分類。消息隊(duì)列里面有一個(gè)標(biāo)志形式,用來(lái)表示正在被哪些進(jìn)程共享與占用,進(jìn)程可以通過(guò)消息隊(duì)列進(jìn)行互相交互,從而達(dá)到通信的目的,這是消息隊(duì)列的重要作用。
信號(hào)量(Semaphore),也被稱為信號(hào)燈,是在多線程環(huán)境下使用的一種變量,是可以用來(lái)保證兩個(gè)或多個(gè)關(guān)鍵代碼段不被同時(shí)調(diào)用。信號(hào)量通常是一個(gè)非負(fù)整數(shù),所有通過(guò)它的線程/進(jìn)程,都會(huì)將該整數(shù)減1(通過(guò)它當(dāng)然是為了使用資源),當(dāng)該整數(shù)值為零時(shí),所有試圖通過(guò)它的線程/進(jìn)程,都將處于等待狀態(tài)。
1.3Lua函數(shù)與C/C++接口交互技術(shù)
Lua函數(shù)是由Lua腳本語(yǔ)言實(shí)現(xiàn)[7]。Lua函數(shù)與C++腳本的交互分為兩部分,第一部分是Lua函數(shù)訪問(wèn)C++的接口,第二部分是C++接口訪問(wèn)Lua函數(shù)。Lua程序被嵌入到C++程序中,目的是為了起到一個(gè)橋梁的作用。整個(gè)程序的功能由C++提供,而Lua程序只負(fù)責(zé)調(diào)用這些功能,并結(jié)合自身的優(yōu)點(diǎn),來(lái)對(duì)它們進(jìn)行快速重組,以此,來(lái)控制各函數(shù)及模塊之間的邏輯關(guān)系。Lua函數(shù)所調(diào)用的C函數(shù)的函數(shù)原型,在C程序中需要將這種函數(shù)類型的函數(shù),注冊(cè)到Lua狀態(tài)機(jī)中,此后,Lua才能調(diào)用到C的函數(shù)。
Lua函數(shù)與C++或者C是通過(guò)“?!蓖瓿蓴?shù)據(jù)互相訪問(wèn)的。在數(shù)據(jù)交互過(guò)程中,第一步是先將數(shù)據(jù)壓入到“?!崩铮蟆皸!睍?huì)返回一個(gè)索引值,通過(guò)這個(gè)索引值,我們能夠進(jìn)行定位,索引值以1或-1為起始值,+1與-1分別表示不同的含義,+1表示在棧的底部進(jìn)行索引,-1表示在棧的頂部進(jìn)行索引。“?!本褪且粋€(gè)寄存區(qū)域,通過(guò)“?!?,Lua與別的語(yǔ)言就能相互進(jìn)行交互操作,“棧”是它們進(jìn)行相互交互的一個(gè)接口,如果沒有棧,它們之間就不能相互溝通操作。
本文將事物處理機(jī)分為L(zhǎng)ua業(yè)務(wù)層、Lua腳本框架和Transmid.exe三層。通過(guò)對(duì)這三層進(jìn)行明確分割,實(shí)現(xiàn)邏輯上的獨(dú)立,提高通信效率。事物處理機(jī)的整體框架如圖2所示。

圖2 事物處理機(jī)的整體框架
2.1Lua業(yè)務(wù)層
Lua業(yè)務(wù)層主要包含三個(gè)配置表:xxxcomm. lua、xxxconfig.lua和config.lua,分別完成對(duì)Transmid事務(wù)處理機(jī)通訊協(xié)議、監(jiān)聽端口、調(diào)度方式、預(yù)處理線程數(shù)及營(yíng)業(yè)部信息的配置。其中,通信協(xié)議的配置中,采用TCP或UDP,在快速接口中,采用TCP通信協(xié)議;監(jiān)聽接口的配置中,主要是指下單客戶端、委托主站、事物處理機(jī)、各自使用的端口要協(xié)調(diào)一致,下單客戶端和委托主站使用同一個(gè)監(jiān)聽端口,委托主站和事物處理機(jī)使用同一個(gè)監(jiān)聽端口;調(diào)度方式配置,主要是指按功能分發(fā),營(yíng)業(yè)部均衡、強(qiáng)制均衡或默認(rèn)的方式,選擇不同的券商。
2.2Lua腳本框架
Lua腳本框架主要包含Jmodel封裝而成,JModel 是MVC[8]的重要插件,它是數(shù)據(jù)視圖層,主要負(fù)責(zé)實(shí)現(xiàn)了數(shù)據(jù)按照配置表(xxxConfig.lua)、處理拼裝請(qǐng)求以及從柜臺(tái)返回?cái)?shù)據(jù)后回填到對(duì)應(yīng)的返回結(jié)構(gòu)中,并且它負(fù)責(zé)了和底層C++框架的交互。
2.3Lua狀態(tài)層
Lua狀態(tài)層主要包含C/C++框架、線程池及xxxlink.dll動(dòng)態(tài)鏈接庫(kù)。其中,C/C++框架主要用來(lái)對(duì)Transmid事物處理機(jī)中與委托主站通信和數(shù)據(jù)儲(chǔ)存,并且在數(shù)據(jù)存儲(chǔ)方面,采用了Oracle數(shù)據(jù)庫(kù)[9]。線程池主要針對(duì)Transmid事物處理機(jī)中有大量請(qǐng)求并發(fā)訪問(wèn)時(shí),減少服務(wù)器創(chuàng)建和銷毀對(duì)象的開銷,重復(fù)利用資源。xxxlink.dll動(dòng)態(tài)鏈接庫(kù)為主程序提供方法,進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù),并可以很容易地將更新應(yīng)用于各個(gè)模塊,而不會(huì)影響該程序的其它部分。
3.1Transmid設(shè)計(jì)
Transmid事務(wù)處理機(jī)主要實(shí)現(xiàn)不同券商與用戶終端的接口,主要的功能需求如圖3所示。

圖3 事務(wù)處理機(jī)用例圖
從圖3可以看出Transmid事務(wù)處理機(jī)主要分為請(qǐng)求處理、應(yīng)答處理、線程處理、客戶端、服務(wù)器、日志處理、異常處理、管理功能和其他配置等,其中請(qǐng)求處理是主要處理客戶下單發(fā)來(lái)的請(qǐng)求,應(yīng)答處理主要做的是當(dāng)有請(qǐng)求時(shí),柜臺(tái)要做出相應(yīng)的處理,線程處理主要實(shí)現(xiàn)多線程處理,這樣可以很有效地提高工作效率,處理好并發(fā)和同步操作,日志處理以及異常處理都是用于處理方便BUG的修改。
3.2Transmid交易框架
Transmid事物處理機(jī)在整個(gè)券商的交易系統(tǒng)中處于一個(gè)核心地位,它控制了整個(gè)交易系統(tǒng),來(lái)鏈接下單終端和券商之間的操作,方面了操作提高了系統(tǒng)的運(yùn)行速度,在一定程度上方便了系統(tǒng)的操作[10],在券商與終端的的框架圖如圖4所示。

圖4 交易系統(tǒng)框架圖
交易系統(tǒng)框架主要包含下單終端、委托主站、Transmid事物處理機(jī)和券商。其中,下單客戶端主要是為用戶提供委托下單用的程序,用戶通常利用電腦軟件、手機(jī)APP進(jìn)行炒股,所用的客戶端工具,即為下單客戶端,用戶利用自己的客戶號(hào)或資金賬號(hào)等,進(jìn)行登錄后,可以實(shí)現(xiàn)股票的功能,如委托、查詢功能等;基金的功能,如申購(gòu)認(rèn)購(gòu)等。委托主站主要負(fù)責(zé)所有交易類的請(qǐng)求的接入(當(dāng)然,委托網(wǎng)關(guān)也會(huì)接入交易類請(qǐng)求,但是最終還是發(fā)送到委托主站上)。委托主站會(huì)處理部分的業(yè)務(wù)數(shù)據(jù),比如在用戶查詢股票持倉(cāng)的時(shí)候,委托主站會(huì)處理對(duì)應(yīng)每支股票的盈虧。委托主站甚至能更新下單客戶端,或者是根據(jù)客戶端的版本,強(qiáng)制更新客戶端的配置等等功能。委托主站可以接入下單客戶端連接到Transmid事務(wù)處理機(jī)。
交易的處理過(guò)程主要分為兩階段,第一階段為準(zhǔn)備階段,Transmid事務(wù)處理機(jī)讀取數(shù)據(jù)包頭;第二階段為執(zhí)行階段,當(dāng)事務(wù)處理機(jī)收到數(shù)據(jù)包之后,讀取數(shù)據(jù)包頭,事務(wù)處理機(jī)根據(jù)結(jié)果的交易信息內(nèi)容判斷交易是否成功,將返回的信息返回給客戶。下面為數(shù)據(jù)的直接交易,下單終端將信息發(fā)送給服務(wù)器,將結(jié)果返回給事務(wù)處理機(jī),然后將正確結(jié)果返回給客戶。
3.3Transmid系統(tǒng)應(yīng)用實(shí)例
Transmid事務(wù)處理機(jī)具有較好的實(shí)用性,可以進(jìn)行各種交易的事物處理功能,可以對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行插入、修改、查詢、刪除操作,同時(shí)可以實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送,而且可以建立高速的傳輸通道,保證數(shù)據(jù)的完整性和一致性。本文主要對(duì)Transmid系統(tǒng)的取消證券交易處理過(guò)程測(cè)試,如圖5所示。

圖5 取消證券交易處理過(guò)程
本文主要介紹Transmid事務(wù)處理機(jī)在取消證券交易過(guò)程中的處理過(guò)程,其中SendData表示將交易數(shù)據(jù)發(fā)送到某一固定長(zhǎng)鏈接上;RecvData表示從某一固定長(zhǎng)鏈接上接收交易數(shù)據(jù);GetResult表示對(duì)交易結(jié)果進(jìn)行判斷,將證券交易結(jié)果返回客戶,由此提高了分布式交易處理的效率,順利完成退票交易。
本文提出了基于交易中間件的Transmid事務(wù)處機(jī)模型,該模型采用了多線程技術(shù)和事務(wù)處理技術(shù),作為券商與用戶的接口,方便了用戶證券的交易。通過(guò)測(cè)試,該模型層次清晰、易于實(shí)現(xiàn)、并發(fā)性能高,方便了用戶證券的交易。但在集群處理能力和分布式處理能力上還有一定的提升空間。
[1] 李志彤,呂國(guó)英.交易中間件的基本實(shí)現(xiàn)原理[J].計(jì)算機(jī)工程,2003,29(6):32-33.
[2] 尹東杰.基于交易中間件CICS的失業(yè)保險(xiǎn)信息系統(tǒng)設(shè)計(jì)[D].上海:復(fù)旦大學(xué),2011.
[3] 呂光.基于交易中間件的航班特殊服務(wù)請(qǐng)求控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京大學(xué),2011.
[4] 沈滌.基于交易中間件的住房公積金管理系統(tǒng)的開發(fā)與設(shè)計(jì)[D].上海:復(fù)旦大學(xué),2008.
[5] 楊開杰,劉秋菊,徐汀榮.線程池的多線程并發(fā)控制技術(shù)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(1):168-170.
[6] 李小群,趙慧斌,孫玉芳.進(jìn)程間通信機(jī)制的分析與比較[J].計(jì)算機(jī)科學(xué),2002,29(11):16-21.
[7] 鄧正陽(yáng),陳和平,蘇鵬.動(dòng)態(tài)腳本語(yǔ)言Lua與C++交互方法的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)系統(tǒng)應(yīng)用,2010,19 (5):198-200.
[8] 胡前進(jìn),蔡永州,吳敏.基于MVC模式的Joomla!框架在Web系統(tǒng)組件擴(kuò)展開發(fā)中的應(yīng)用研究[J].現(xiàn)代教育技術(shù),2009,19(6):97-100.
[9] 姚燕,高峰,郭萍.Oracle數(shù)據(jù)庫(kù)鏈接技術(shù)及其應(yīng)用[J].氣象科技,2006,34:19-21.
[10] 郭志強(qiáng).面向?qū)ο蟮姆植际街虚g件技術(shù)的研究與實(shí)現(xiàn)[D].重慶:重慶大學(xué),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