zhuhaiqiang
作者zhuhaiqiang·2019-12-02 16:49
项目经理·银行

基于MongoDB的清算系统在期货行业的应用研究

字数 2494阅读 4066评论 0赞 1

作者:滕飞飞 ,国盛期货有限责任公司

摘要

金融行业的应用系统大多都是基于传统的RDBMS数据库或者是商业内存数据库,而面向大数据领域的内存数据库应用尚不多见。随着金融互联网行业的兴起,出现了大量对于大数据处理、实时在线分析需求的应用系统,一些优秀的开源内存数据库也不断涌现,开源内存数据库在互联网行业渐渐成为主流选择。本文主要论述建立基于MongoDB内存数据库的期货清算系统模型的过程,并通过实际生产数据验证模型的准确性,论证内存数据库技术在期货行业应用的可行性。本文首先从清算系统的新需求以及数据模型的建立两方面进行描述,其次通过压力测试来证明方案的可行性,最后对应用领域做简单的设想。

一、 前言

金融行业的应用系统,无论是交易、风控还是结算系统,大部分都是基于传统的RDBMS数据库或者是商业内存数据库。基于面向大数据领域的内存数据库应用,在金融领域尚不多见。随着金融互联网行业的兴起,出现大量对于大数据处理、实时在线分析需求的应用系统,一些优秀的开源内存数据库也不断涌现,例如Redis、MongoDB、HBase、PostgreSQL、Neo4j等等,由于其在各自的特定领域的优异表现,使得开源内存数据库在互联网行业渐渐成为主流选择。比如淘宝,为了适应其业务快速发展的需要,开发了自己的内存数据库OceanBase,取代了以ORACLE、EMC、IBM为代表的数据库、存储、软件供应商方案,节省了大量的资金投入。

2013年6月,瑞典的Avanza银行成功上线了GigaSpaces Technologies公司提供的eXtreme Application Platform (XAP)内存数据库平台。这说明内存数据库在金融领域关键业务环节上的应用成为可能。在内存数据库上跑企业应用的一个好处就是能够针对交易进行实时的分析。

本文主要论述建立基于MongoDB内存数据库的期货清算系统模型的过程,并通过实际生产数据验证模型的准确性,论证内存数据库技术在期货行业应用的可行性。本文首先从清算系统的新需求以及数据模型的建立两方面进行描述,其次通过压力测试来证明方案的可行性,最后对应用领域做简单的设想。

二、 清算系统研究的新思路

传统的结算系统,只能在所有的客户清算、结算完成之后,才能够进行下一步的流程,包括结算单的发布,保证金监控中心数据的报送,以及交易系统初始化数据的生成。这限制了系统的灵活性。

设想一下,假如一个交易会员甚至是一个客户不能完成结算,都将会导致所有其他会员不能按时完成结算。随着交易所夜盘的推出、大量期货新品种以及期权的上线,对于结算系统提出了更高的要求。除了需要具备高性能之外,还必须具有高可扩展性、高适用性,才能满足业务的需求。这此背景下,实现清算系统的分客户、分交易所、分产品、分合约甚至是分时进行清算的要求就迫在眉睫。

现有的系统主要是跑在Oracle、mysql数据库和Java平台上,已经无法快速满足期货行业未来的扩展计划。尽管结算业务应用的紧耦合架构对性能进行了最大限度的优化,但这也导致了系统灵活性很差,几乎无法做出任何变动。

在此背景下,本次主要研究开源内存数据库技术如何应用于期货行业,特别是探索如何在新清算系统当中的应用,并据此建立了清算核心数据模型。

三、 模型分析

清算系统的分层清算模型:

图1

从图1可以看到,无论按照什么层次进行清算,最后都是落实到单个交易编码的单个合约上面的。在此启发下,产生了交易编码合约账户的设计思想。这一思想的核心是将投资者资金账户进行分级,分成投资者资金总账户、交易编码合约分账户、交易编码策略组合保证金分账户和交易编码风险组合保证金分账户。如图2示:

图2 分级模型图

分级模型的分析:
对国内交易所现行的保证金制度,包括双边保证金、组合持仓保证金、锁仓保证金、单向大边保证金以及中金所正在研究的策略组合保证金收取方式,使用合约分账户模式就可以很好的支持。

对于风险组合保证金收取方式,由于是在投资组合顶层收取的,最后不能落实到单个合约分账户中,所以在合约分账户中不能体现。但是因为该模型的高可扩展性,可以按照分账户的格式设立风险组合保证金分账户。

由于该数据模型具有弱数据结构的特点,并且具有近乎无限的扩展性,所以能够很好的支持新业务的开发。例如如果要实现子账户的功能,只需要在唯一键中加入subaccount字段。

四、 模型测试

此次数据模型基于JAVA平台,实现针对上期所、中金所保证金、手续费、盈亏的计算,同时实现针对国债期货平今手续费的减免。

一般来说,一个系统的高扩展性是通过牺牲性能来实现的,所以需要对该模型的性能以及稳定性进行测试。

原始测试数据为2014年4月29日某国内大型期货有限公司中金所交易数据,当日交易客户加昨持仓客户总数为2890个客户,51097笔当日成交数据,将数据同比例扩大后,作为压力测试数据。

图3 清算处理时间统计图

从图3我们可以得出以下几个结论:
1、 保证金、手续费、盈亏的计算效率和数据集的规模几乎没有相关性,都是在5秒以内计算完成,性能和稳定性很好。

2、 数据的导入、整合过程和数据集的规模呈现线性关系而不是指数关系,这也符合我们的期望。

3、 55万笔以下,系统运行平稳;55万笔之后数据导入处理性能出现较大的波动。在90万笔之后波动幅度大大增加,但总体仍在可接受范围内。出现这种情况和进行测试的台式机配置过低有关。

从测试结果来看,数据导入及整合环节符合期望,但是其对保证金、手续费、盈亏的处理速度非常高效,且和数据集的规模几乎没有相关性,稳定性很好。由此可以证明这套数据模型完全能够满足当前清算系统改进的需求,同时鉴于该模型近乎无限的可扩展性,能够满足今后新业务的扩展。

五、 应用前景

期货行业还有很多实时性的需求,比如做市商系统、风控系统、资管系统、实时分析系统等,这些应用由于需要大量的计算,对于实时性的要求比较苛刻,在这些应用当中只能采用基于内存的架构。上述模型很好的满足了实时性、稳定性的要求,对新系统的开发具有极大的参考价值。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广