基于Java开发证券交易撮合系统的尝试

目前国内各主要的证券交易所和衍生品交易所(不是说满大街的证券公司及其营业部)如上海证券交易所、深圳证券交易所、大连商品期货交易所等等为数不多的几家,其用来处理全国股民、期民所发委托的竞价撮合系统都是基于C/C++开发的,其系统的吞吐量通常不超过每秒10万笔。这些竞价撮合系统的撮合规则大多是基于价格优先、时间优先及其变体来实现的。

NASDAQ等国际上的交易所已经开始使用JAVA开发他们的竞价撮合系统。JAVA相比于C/C++自然在开发效率方面高出一筹。但Java程序的性能会比C/C++的对等物略差也是不争的事实。而且由于GC的存在,使得Java所实现的系统其时延会较C/C++下的对等物略长,也是不争的事实。

由此推论,Java会比较适合于对时延不那么敏感、同时对推出新产品的开发速度要求较高的金融应用。至于吞吐量,实践证明如果选用的数据结构和算法恰当,则Java开发的交易撮合系统的吞吐量仍然可以超过现下各交易所正在运行的交易撮合系统,同时通过对JVM的调优,平均时延也并不会变得非常恶劣。

证券交易系统所用的时间优先、价格优先的排队算法的细节,可以参考各大交易所的交易规则。

为了达到系统的高可用性,Java 已经有JGroups这样的开源软件可供使用。基于JGroups软件,后台可以部署多台并行运行的对等的交易撮合机,在券商的报盘系统和后台交易撮合机之间则部署若干接入主机完成前后台的隔离。中台的接入主机通过JGroups把来自券商的委托按完全相同的接收顺序给到不同的交易撮合机进行处理。在不同的交易撮合机中,可以JGroups选举产生唯一的一台master交易撮合机,由此master交易撮合机向前台发送应答。

猜你喜欢

转载自ganmomopian.iteye.com/blog/1860966