APP下载

基于劵商的Transmid事务处理机的设计与实现

2015-10-12赵维赵隽

关键词:处理机中间件下单

赵维,赵隽

(1.吉林警察学院,长春 130117;2.长春师范大学,长春 130022)

基于劵商的Transmid事务处理机的设计与实现

赵维1,赵隽2

(1.吉林警察学院,长春130117;2.长春师范大学,长春130022)

针对不同的券商接口,当面对统一请求的数据格式时,不同的券商就很可能无法“读懂”用户到底在请求什么数据,本文设计了一个基于券商的Transmid事务处机系统。Transmid事务处理机系统采用了线程池、进程间通信和Lua函数与C/C++接口交互技术,通过测试,该模型层次清晰、易于实现、并发性能高。

Transmid事务处理机;券商;并发性;Lua函数

随着互联网技术的飞速发展,人们越来越需要把来自不同企业的开发的软件集成起来,来获得更大的信息资源共享。中间件作为连接不同平台与终端用户之间的软件应用而生。它具有标准协议和接口的通用软件,为用户提供了良好的可靠性、可用性、灵活性[1],图1所示为中间件模型。

图1 中间件模型

中国近年来也先后有很多关于中间件的研究,如尹东杰研究了中间件在保险也上的设计应用[2],吕光研究了中间件在航空上的应用[3],沈涤研究了中间件在住房公积金上的应用[4],还有很多这样类型的研究,实际上中间件已经应用了我们生活中的各个方面。

本文主要提出一种基于券商的中间件Transmid事务处理机,它针对不同的券商,提供一种接口,方便用户和券商之间的联系。

1 相关技术

1.1线程池

线程池是用来存放线程的地方[5],由于它的容量有限,众多线程之间的调用需要一个线程池的管理机制,它管理线程的休眠和唤醒。一般为,每次外界程序都会通过一定的方式一次唤醒一个线程,同时休眠相应的一个线程,然后运行这个唤醒的线程,这种唤醒与休眠不是随机运行的,它是通过一定的算法结构进行的,比如线性队列,优先级排序,最大权值法等等。同时,线程是一个正在或将要执行的程序代码,所以它必然有一个接口,该接口实现线程想要的功能,比如访问数据库,实现图形界面等,因此,线程池需要一个缓冲区,在这个区间里,可以存放着比较活跃的线程。线程池所占的空间内存很小,但是却能起到很大的作用。

1.2进程间的通信技术

进程间通信[6](IPC,Inter-Process Communication)是进程或线程间传送数据或信号的一些技术或方法。计算机系统分配资源的最小单位是进程(严格说来是线程)。进程间通信方法包括消息队列、共享内存和信号量等。

共享内存,就是映射一段内存,这段内存能被其他进程所访问,这段共享内存被一个进程所创建,但多个进程都可以访问到这段内存。进程会把这个地址映射到一个虚拟地址。

共享内存是最快的进程间通信方式,它是为了解决其他进程间通信方式运行效率低的问题,从而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

消息队列,是独立于生成它的进程的内存中的一段存储区。一旦一个消息队列被创建,它总是可以被某个进程访问,只要这个进程具有正确的访问权限。消息队列中的每一条消息,都要被进行分类,我们可以通过编号,来进行这样的分类。消息队列里面有一个标志形式,用来表示正在被哪些进程共享与占用,进程可以通过消息队列进行互相交互,从而达到通信的目的,这是消息队列的重要作用。

信号量(Semaphore),也被称为信号灯,是在多线程环境下使用的一种变量,是可以用来保证两个或多个关键代码段不被同时调用。信号量通常是一个非负整数,所有通过它的线程/进程,都会将该整数减1(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程/进程,都将处于等待状态。

1.3Lua函数与C/C++接口交互技术

Lua函数是由Lua脚本语言实现[7]。Lua函数与C++脚本的交互分为两部分,第一部分是Lua函数访问C++的接口,第二部分是C++接口访问Lua函数。Lua程序被嵌入到C++程序中,目的是为了起到一个桥梁的作用。整个程序的功能由C++提供,而Lua程序只负责调用这些功能,并结合自身的优点,来对它们进行快速重组,以此,来控制各函数及模块之间的逻辑关系。Lua函数所调用的C函数的函数原型,在C程序中需要将这种函数类型的函数,注册到Lua状态机中,此后,Lua才能调用到C的函数。

Lua函数与C++或者C是通过“栈”完成数据互相访问的。在数据交互过程中,第一步是先将数据压入到“栈”里,之后“栈”会返回一个索引值,通过这个索引值,我们能够进行定位,索引值以1或-1为起始值,+1与-1分别表示不同的含义,+1表示在栈的底部进行索引,-1表示在栈的顶部进行索引。“栈”就是一个寄存区域,通过“栈”,Lua与别的语言就能相互进行交互操作,“栈”是它们进行相互交互的一个接口,如果没有栈,它们之间就不能相互沟通操作。

2 事物处理机的整体框架

本文将事物处理机分为Lua业务层、Lua脚本框架和Transmid.exe三层。通过对这三层进行明确分割,实现逻辑上的独立,提高通信效率。事物处理机的整体框架如图2所示。

图2 事物处理机的整体框架

2.1Lua业务层

Lua业务层主要包含三个配置表:xxxcomm. lua、xxxconfig.lua和config.lua,分别完成对Transmid事务处理机通讯协议、监听端口、调度方式、预处理线程数及营业部信息的配置。其中,通信协议的配置中,采用TCP或UDP,在快速接口中,采用TCP通信协议;监听接口的配置中,主要是指下单客户端、委托主站、事物处理机、各自使用的端口要协调一致,下单客户端和委托主站使用同一个监听端口,委托主站和事物处理机使用同一个监听端口;调度方式配置,主要是指按功能分发,营业部均衡、强制均衡或默认的方式,选择不同的券商。

2.2Lua脚本框架

Lua脚本框架主要包含Jmodel封装而成,JModel 是MVC[8]的重要插件,它是数据视图层,主要负责实现了数据按照配置表(xxxConfig.lua)、处理拼装请求以及从柜台返回数据后回填到对应的返回结构中,并且它负责了和底层C++框架的交互。

2.3Lua状态层

Lua状态层主要包含C/C++框架、线程池及xxxlink.dll动态链接库。其中,C/C++框架主要用来对Transmid事物处理机中与委托主站通信和数据储存,并且在数据存储方面,采用了Oracle数据库[9]。线程池主要针对Transmid事物处理机中有大量请求并发访问时,减少服务器创建和销毁对象的开销,重复利用资源。xxxlink.dll动态链接库为主程序提供方法,进程可以调用不属于其可执行代码的函数,并可以很容易地将更新应用于各个模块,而不会影响该程序的其它部分。

3 设计与实现

3.1Transmid设计

Transmid事务处理机主要实现不同券商与用户终端的接口,主要的功能需求如图3所示。

图3 事务处理机用例图

从图3可以看出Transmid事务处理机主要分为请求处理、应答处理、线程处理、客户端、服务器、日志处理、异常处理、管理功能和其他配置等,其中请求处理是主要处理客户下单发来的请求,应答处理主要做的是当有请求时,柜台要做出相应的处理,线程处理主要实现多线程处理,这样可以很有效地提高工作效率,处理好并发和同步操作,日志处理以及异常处理都是用于处理方便BUG的修改。

3.2Transmid交易框架

Transmid事物处理机在整个券商的交易系统中处于一个核心地位,它控制了整个交易系统,来链接下单终端和券商之间的操作,方面了操作提高了系统的运行速度,在一定程度上方便了系统的操作[10],在券商与终端的的框架图如图4所示。

图4 交易系统框架图

交易系统框架主要包含下单终端、委托主站、Transmid事物处理机和券商。其中,下单客户端主要是为用户提供委托下单用的程序,用户通常利用电脑软件、手机APP进行炒股,所用的客户端工具,即为下单客户端,用户利用自己的客户号或资金账号等,进行登录后,可以实现股票的功能,如委托、查询功能等;基金的功能,如申购认购等。委托主站主要负责所有交易类的请求的接入(当然,委托网关也会接入交易类请求,但是最终还是发送到委托主站上)。委托主站会处理部分的业务数据,比如在用户查询股票持仓的时候,委托主站会处理对应每支股票的盈亏。委托主站甚至能更新下单客户端,或者是根据客户端的版本,强制更新客户端的配置等等功能。委托主站可以接入下单客户端连接到Transmid事务处理机。

交易的处理过程主要分为两阶段,第一阶段为准备阶段,Transmid事务处理机读取数据包头;第二阶段为执行阶段,当事务处理机收到数据包之后,读取数据包头,事务处理机根据结果的交易信息内容判断交易是否成功,将返回的信息返回给客户。下面为数据的直接交易,下单终端将信息发送给服务器,将结果返回给事务处理机,然后将正确结果返回给客户。

3.3Transmid系统应用实例

Transmid事务处理机具有较好的实用性,可以进行各种交易的事物处理功能,可以对数据库的数据进行插入、修改、查询、删除操作,同时可以实现数据的接收和发送,而且可以建立高速的传输通道,保证数据的完整性和一致性。本文主要对Transmid系统的取消证券交易处理过程测试,如图5所示。

图5 取消证券交易处理过程

本文主要介绍Transmid事务处理机在取消证券交易过程中的处理过程,其中SendData表示将交易数据发送到某一固定长链接上;RecvData表示从某一固定长链接上接收交易数据;GetResult表示对交易结果进行判断,将证券交易结果返回客户,由此提高了分布式交易处理的效率,顺利完成退票交易。

4 结论

本文提出了基于交易中间件的Transmid事务处机模型,该模型采用了多线程技术和事务处理技术,作为券商与用户的接口,方便了用户证券的交易。通过测试,该模型层次清晰、易于实现、并发性能高,方便了用户证券的交易。但在集群处理能力和分布式处理能力上还有一定的提升空间。

[1] 李志彤,吕国英.交易中间件的基本实现原理[J].计算机工程,2003,29(6):32-33.

[2] 尹东杰.基于交易中间件CICS的失业保险信息系统设计[D].上海:复旦大学,2011.

[3] 吕光.基于交易中间件的航班特殊服务请求控制系统的设计与实现[D].北京:北京大学,2011.

[4] 沈涤.基于交易中间件的住房公积金管理系统的开发与设计[D].上海:复旦大学,2008.

[5] 杨开杰,刘秋菊,徐汀荣.线程池的多线程并发控制技术研究[J].计算机应用与软件,2010,27(1):168-170.

[6] 李小群,赵慧斌,孙玉芳.进程间通信机制的分析与比较[J].计算机科学,2002,29(11):16-21.

[7] 邓正阳,陈和平,苏鹏.动态脚本语言Lua与C++交互方法的研究与实现[J].计算机应系统应用,2010,19 (5):198-200.

[8] 胡前进,蔡永州,吴敏.基于MVC模式的Joomla!框架在Web系统组件扩展开发中的应用研究[J].现代教育技术,2009,19(6):97-100.

[9] 姚燕,高峰,郭萍.Oracle数据库链接技术及其应用[J].气象科技,2006,34:19-21.

[10] 郭志强.面向对象的分布式中间件技术的研究与实现[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

猜你喜欢

处理机中间件下单
浅谈家用餐厨垃圾处理机的现状
污泥干化处理机翻抛轴的模态分析
欧洲最大罐车企业FFB:如果你现在下单2020年才能提车
RFID中间件技术及其应用研究
雷达信号处理机显控及通信技术
基于Android 平台的OSGi 架构中间件的研究与应用
关于“赠品”的故事
打车
基于VPX标准的二次监视雷达通用处理机设计
中间件在高速公路领域的应用