一种高并发撮合交易系统及其使用方法

文档序号:30986415发布日期:2022-08-03 01:35阅读:418来源:国知局
一种高并发撮合交易系统及其使用方法

1.本发明涉及数字货币交易技术领域,具体涉及一种高并发撮合交易系统及其使用方法。


背景技术:

2.区块链是分布式数据存储、多中心的点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式,以解决信任为出发点,利用区块链技术来实现新的价值体系的形成。作为价值互联网的基石,区块链正在引领全球新一轮技术变革和产业变革,加快推动数字经济发展。如今区块链已经深入互联网的各行各业,正是因为区块链具有天然的不可篡改,可追溯,隐私保护的特性,创造了各种各样基于区块链而衍生的技术,如基于区块链的智能征信系统,非常切入时机,利用了区块链的不可篡改性,使得人民的征信问题如烙印一样,已经确认,就不可修改,完美的监视了全民的信任凭证问题。除了以上领域之外,其中最令人关心的就是区块链技术所引入的数字资产领域。人们从出生开始就要与金钱打交道,从原有的纸质货币到现在的数字化货币无不反映出人们对交易的渴望和互联网的高速发展,由于传统的货币需要花费大量精力去做防篡改防伪技术,消耗了大量的人力物力,又由于现有的支付宝和微信虽然从名义上讲是一种数字化的资产,但是其中心化的问题,很容易遭到黑客的攻击或者公司人员对其数据进行恶意篡改,从而引起社会的动荡,对人民和国家造成重大的财产损失。所以最后这些金融支付公司最后都需要接入央行的银联系统进行清算,小到每笔的扫描支付,这样大大减少了资产风险的发生。因此在新时代互联网背景下,借助区块链技术衍生的数字资产是非常有必要的,保障人民的财产安全。数字资产的流通离不开数字资产交易系统,如积分系统、电子证券系统等。
3.随着时间的推移和社会科技的发展,金融交易业务与计算机技术开始紧密结合起来。与其他金融业务相比,撮合交易系统具有时间集中、数据密集的特点,对交易速度和系统可靠性具有很高的要求。而传统的撮合交易系统都是采用多品种在一台小型机上进行集中式处理,基于数据库技术开发的撮合引擎无法应对订单量的急剧增长的情况,数据库很容易成为撮合交易系统的性能瓶颈,容易发生交易缓慢和系统故障问题,对投资者带来经济损失。
4.综上所述,研发一种高并发撮合交易系统及其使用方法,仍是数字货币交易技术领域中急需解决的关键问题。


技术实现要素:

5.针对现有技术所存在的上述缺点,本发明在于提供一种高并发撮合交易系统及其使用方法,所提供的系统具有高吞吐量、低延迟、高可用以及分布式效果。
6.为实现上述目的,本发明提供了如下技术方案:
7.本发明的第一方面:提供了一种高并发撮合交易系统,包括:
8.安全管理模块:用于用户登录或登出交易系统;
9.显示行情模块:用于显示当前交易系统中的每个模拟货币行情,展示最新的成交价格;
10.订单撮合模块:交易系统的核心部分,根据用户发送的交易指令,按照排序规则对订单按照顺序进行处理,并根据所规定的撮合算法满足用户的订单交易需求,生成撮合结果;
11.订单查询模块:用于用户查询持仓信息、成交信息、历史成交以及历史委托数据信息;
12.交易单元控制模块:用于对模拟货币进行管理;
13.资产清算模块:用于实时的对用户资产进行清算,并根据成交数据对用户的资产数据进行更新;
14.系统监控模块:用于实时监控后台各项指标信息,并根据给定的查询条件反馈相应的查询结果;
15.网关:用于对接口进行安全认证校验、风控处理、转发请求以及收集订单数据,并派发给相应的撮合引擎进行处理;
16.数据库:用于存储交易系统中交易的订单数据。
17.本发明进一步设置为:所述模拟货币行情包括收盘价、开盘价、最高价、最低价、成交量、成交额、涨跌幅信息以及深度行情信息。
18.本发明进一步设置为:所述订单撮合模块由多个部署在服务器中相同的撮合引擎节点构成,所述撮合引擎节点为进行交易撮合的服务器节点。
19.本发明进一步设置为:所述按照排序规则对订单按照顺序进行处理,是指买入队列价格从上到下正序排列并且市价委托排在最高限价委托前面,卖出队列价格从上到下逆序排列并且市价委托排在最低限价委托前面的顺序进行处理。
20.本发明进一步设置为:所述对模拟货币进行管理,包括货币名称修改、交易规则修改、最小购买量、最大购买量、手续费、交易状态、货币精度、交易币种以及结算币种的管理。
21.本发明的第二方面:还提供了一种高并发撮合交易系统的使用方法,包括以下步骤:
22.(1)通过安全管理模块输入登录密码,经网关登录鉴权后登录交易系统;
23.(2)用户通过示行情模块查看当前交易系统中的每个模拟货币行情,以及最新的成交价格;
24.(3)用户发送交易指令,形成生成委托订单,经网关登录鉴权后,与数据库中已经存在的订单进行撮合匹配;
25.(4)撮合引擎节点从数据库查询订单,并放入相应的内存队列中按照所规定的撮合算法进行撮合交易;
26.(5)撮合引擎节点达成成交后,由资产清算模块实时的对用户资产进行清算,并根据成交数据对用户的资产数据进行更新,并同步交易的订单数据存储于数据库,完成交易。
27.本发明进一步设置为:在步骤(4)中,所述撮合交易的原则如下:
28.市价撮合:不需要指定买入或卖出价格,只根据当前最新行情价格来成交,只要对方市价委托单队列有数据就与对方市价撮合订单队列的数据进行撮合,直到市价队列为空或者当前市价委托撮合完毕;
29.限价委托买单:需要指定买入的价格,先于卖盘市价委托单队列进行撮合,直到市价委托单为空,若当前委托单仍有剩余则继续与卖盘限价队列进行撮合,找到限价队列中价格小于等于当前委托单价格的订单数据进行撮合,一直到当前委托单被撮合完成或者卖盘订单队列找不到价格小于等于当前出价的订单数据;
30.限价撮合卖单:需要指定卖出的价格,先于买盘市价委托单队列进行撮合,直到市价委托单为空,若当前委托单仍有剩余则继续与买盘限价队列进行撮合,找到限价队列中价格大于等于当前委托单价格的订单数据进行撮合,一直到当前委托单被撮合完成或者买盘订单队列找不到价格大于等于当前出价的订单数据。
31.本发明进一步设置为:在步骤(4)中,所述撮合交易的流程如下:
32.市价买入委托:当委托单进入网关,将作为参数发送到撮合引擎之后,撮合引擎首先会从卖出队列头部找到市价委托单,如果头部订单为空,即市价委托队列为空,则直接撤单取消当前买入操作,否则,则进行匹配成交操作,如果焦点单的数量还有剩余则继续与当前市价委托单进行成交匹配,否则当前撮合结束生成对应的成交记录;
33.市价卖出委托:当委托单进入网关,将作为参数发送到撮合引擎之后,撮合引擎首先会从买入队列头部找到市价委托单,如果头部订单为空,即市价委托队列为空,则直接撤单取消当前卖出操作,否则,则进行匹配成交操作,如果焦点单的数量还有剩余则继续与当前市价委托单进行成交匹配,否则当前撮合结束生成对应的成交记录。
34.有益效果
35.采用本发明提供的技术方案,与已知的公有技术相比,具有如下有益效果:
36.(1)本发明提高了撮合系统内存数据检索速度;
37.(2)本发明解决了传统基于数据库撮合速度过慢的问题,有效的提升了撮合速度;
38.(3)本发明解决了撮合交易系统单点故障问题,提高了系统的可靠性。
附图说明
39.图1为本发明一种高并发撮合交易系统的系统图;
40.图2为本发明一种高并发撮合交易系统中撮合队列内存结构图;
41.图3为本发明一种高并发撮合交易系统的使用方法中市价交易撮合的流程图;
42.图4为本发明一种高并发撮合交易系统的使用方法中限价交易撮合的流程图;
43.图5为本发明一种高并发撮合交易系统中优化方案的架构图;
44.图6为本发明一种高并发撮合交易系统中仲裁模型的示意图;
45.图7为本发明一种高并发撮合交易系统中撮合引擎处理模型的示意图。
具体实施方式
46.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述;显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
47.在本发明的描述中,需要说明的是,术语“上”、“下”、“内”、“外”、“顶/底端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描
述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
48.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“设置有”、“套设/接”、“连接”等,应做广义理解,例如“连接”,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通;对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
49.实施例1:
50.请参照图1所示,本发明提供了一种高并发撮合交易系统,包括:安全管理模块:用于用户登录或登出交易系统;显示行情模块:用于显示当前交易系统中的每个模拟货币行情,展示最新的成交价格;订单撮合模块:交易系统的核心部分,根据用户发送的交易指令,按照排序规则对订单按照顺序进行处理,并根据所规定的撮合算法满足用户的订单交易需求,生成撮合结果;订单查询模块:用于用户查询持仓信息、成交信息、历史成交以及历史委托数据信息;交易单元控制模块:用于对模拟货币进行管理;资产清算模块:用于实时的对用户资产进行清算,并根据成交数据对用户的资产数据进行更新;系统监控模块:用于实时监控后台各项指标信息,并根据给定的查询条件反馈相应的查询结果;网关:用于对接口进行安全认证校验、风控处理、转发请求以及收集订单数据,并派发给相应的撮合引擎进行处理;数据库:用于存储交易系统中交易的订单数据。
51.在本实施例中,系统监控模块实时监控后台各项指标信息,包括日内交易量、月内交易量、用户数量、交易单元数量等,并给据给定的查询条件返回相应的查询结果。
52.其具体功能如下:

撮合引擎状态监控:监控当前撮合引擎的交易状态、撮合订单数量和系统的负载情况;

统计查询:根据用户、交易量、交易单元多个维度对其信息进行统计,并按照给定的查询条件查询相关信息;

明细查询:根据会员、交易单元、时间等条件查询资金、订单明细、成交明细数据。
53.需要说明的是,传统的基于数据库撮合系统的性能瓶颈的主要来自于数据库中执行撮合的业务逻辑。本发明首先要把撮合业务从数据库中剥离,设计合适的内存表结构,将所有涉及交易的数据都加载到内存中来,将传统的基于数据库的撮合引擎改为基于内存表的纯内存撮合引擎。由于传统的撮合交易系统采用单一节点部署,所有的交易产品都共用一个撮合引擎,业务模型比较单一整体实现起来较为简单。后期如果继续增加不同类型的交易产品,涉及有关交易产品的委托订单量也随之增大。所在的服务器网络带宽、磁盘空间、cpu计算资源都会面临极大的挑战,无法随着业务的扩展而实现对应系统的扩展,整体性能将会出现瓶颈,影响交易体验。更严重的如果发生系统断电、程序错误、系统故障等问题将会造成系统不能对外正常提供服务。因此本发明所提供的撮合交易系统相对于传统的撮合系统,做了两个方面的优化,一是对撮合系统性能的优化,提高订单的撮合速度;二是对撮合系统可靠性的优化,在系统发生故障的情况,可以及时的发现故障并快速切换到正常状态的节点(服务状态正常并且内存状态与发生故障的节点内存状态一致)对外提供服务。
54.作为一种实施方式,本发明的整个交易系统的软件划可以分为三个主要部分:
55.①
前端部分:用于向用户展示可视化的交易软件。
56.②
路由部分:即上图的网关用于收集用户的订单数据并将订单根据路由规则分发到具体的可以处理的集合(称为一个set),从而实现了交易系统的水平扩展。
57.③
订单处理部分:用于处理用户发送的委托单并按照撮合算法进行订单匹配生成对应的成交记录,最后响应处理结果到客户端。
58.为了减少对外提供服务暂停的时间,如图5所示,单个set必须包含多个并行处理的撮合引擎(简称tp),当发生故障的时候,同一个set中的其余状态正常的tp都有机会接管故障节点后续交易工作。单个set中的所有tp都同属一个组,每个组都有自己的标识。相同组中的tp都是保持独立运行状态,只要将tp实现为某种接受单一输入序列的状态机,主从tp以相同的初始化状态开始运行,以同样的顺序处理相同的订单序列。因此在网络和系统运行正常的情况下,可以保证同一个组中的所有tp都保持相同的内存状态。由于对于收到的每笔订单来说,客户端应用程序只需要收到一份委托确认和成交确认,因此在一个tp组里面只需要有一个特殊实例向前端回送委托确认和成交确认,这个特殊实例即称为“主tp”。将整个撮合交易系统按照set进行分组,提高了系统横向扩展的能力,更重要的是提高了撮合系统的并行处理能力,从而增加了系统的吞吐量和撮合效率。
59.对于撮合交易系统的高可用性设计,需要考虑同一个组的高可用。剩下的事情只是如何在需要的时候能够在同一个组中的一堆独立并行运作的tp节点中自动选举产生一个主tp节点,为此本发明引入了一种仲裁模式,如图6所示,在多个节点中额外加入一个仲裁节点,它根据节点之间的工作状态、网络状态进行决策,决策节点的状态变化或强制选举某一节作为主节点。仲裁节点定时的检测主从节点的通讯连接状况,自动的对异常状况进行检测,根据当前检测的结果进行决策。对于属于同一组的tp来说,保证内存状态同步是非常重要的,否则在故障切换的时候,选择一个非同步节点作为主节点接管后续操作,很有可能会发生订单丢失的情况。因此要设计一种内存状态同步的方法,既要保证内存状态同步一致也要考虑同步的性能,对于此问题的解决办法,本发明采用jraft框架作为内存状态机的实现,其框架封装了raft的所有协议并提供了快照保存和快照恢复机制。
60.由于单个tp的性能瓶颈在于消息队列和数据库撮合部分。因此本发明采用纯内存的基于无锁异步事件驱动的撮合引擎架构来提单个tp的处理速度。使用disruptor作为当前撮合引擎的底层框架,具体处理模型图7所示,主tp内部有一个单一的订单接收线程定时的从网关中拉取最新的数据投递到环形缓冲区中,整个投递过程是无阻塞的,直接返回成功投递的响应。环形缓冲区和事件处理器都基于disruptor组件实现的,分别对应了ringbuffer和eventhandler。事件处理器可以按照处理的先后顺序进行编排,处理器之间可以设置串行和并行的方式,不同处理器之间可以通过消息进行传递。将整个交易流程分解为一个个小的执行单元,提高单tp节点的并行处理能力。为了提高撮合流程中对数据的检索速度,在系统初始化阶段将所有涉及交易有关的数据库的数据预先加载到内存表中,tp节点会源源不断的接收来自网关发送来委托单,按照撮合算法处理生成成交记录。对于那些尚未完全成交的委托单,都通过orderbook(订单薄)结构进行存储,撮合算法所读取的待匹配的委托单都来自orderbook。
61.最后所生成的成交记录用于下游报盘系统的资产清算、行情数据的生成、用户成交的回报,因此具有重要的作用。为了防止数据丢失,所以要对生成的成交记录进行持久化
保存,本发明将数据持久化过程转为异步操作,所有生成的成交记录都投递给指定的kafka的主题中。由后续订阅该主题的消费组件进行按需消费,从而提高了整个撮合流程的速度。
62.为完成系统的业务功能,撮合引擎内存区域由6个表组成,其中前5张内存表与业务逻辑有关,都与数据库表建立一一对应关系。订单簿表用来缓存尚未成交的委托单,按照“价格优先,数量优先,时间优先”原则存储到订单薄表的队列中,具体如下:
63.①
会员表member
64.存储会员的信息,包括会员id,姓名,类型,状态等信息,还存储了资产账户表的地址引用,成交记录表的地址引用,委托单表的地址引用。
65.②
资产账户表memberwallet
66.存储会员的资产信息,包括会员id,模拟货币资产的余额,冻结数量,交易币种的地址引用。
67.③
委托单表exchangeorder
68.存储会员委托的订单信息,包括会员id,订单编号,委托币种,委托时间,委托方向,委托量,会员id。
69.④
成交记录表exchangetrade
70.存储系统中委托单成交的相关信息,包括订单编号,订单明细编号,成交数量,成交额,成交币种,成交方向,成交时间,会员id。
71.⑤
交易币种表exchangecoin
72.存储交易币种的各种相关信息。具体包括交易币种id、币种名称、启用状态、最低购买量、最大限购量、手续费率,买卖权限等。
73.⑥
订单簿表orderbook
74.存储系统中等待撮合或者尚未撮合的委托数据,具体包含买方市价对列、卖方市价队列、买方限价对列、卖方限价队列,买方和卖方的盘口最优档数据。
75.本发明利用内存读取数据快速的特性,将上述表的数据都从数据库中加载到内存中,提高撮合引擎查找数据的速度。
76.进一步的,模拟货币行情包括收盘价、开盘价、最高价、最低价、成交量、成交额、涨跌幅信息以及深度行情信息。
77.进一步的,订单撮合模块由多个部署在服务器中相同的撮合引擎节点构成,撮合引擎节点为进行交易撮合的服务器节点。
78.进一步的,按照排序规则对订单按照顺序进行处理,是指买入队列价格从上到下正序排列并且市价委托排在最高限价委托前面,卖出队列价格从上到下逆序排列并且市价委托排在最低限价委托前面的顺序进行处理,如图2所示。
79.进一步的,对模拟货币进行管理,包括货币名称修改、交易规则修改、最小购买量、最大购买量、手续费、交易状态、货币精度、交易币种以及结算币种的管理。
80.需要说明的是,为了实现快速故障恢复,本发明将撮合引擎服务节点进行冗余化操作,同时在多个服务器中部署相同的撮合引擎节点,多个节点共同与自己的哨兵进行网路通信,定时发送心跳包从而使得哨兵确定当前节点的健康状态,如果其中某一结点超时心跳一定的次数,则哨兵将会默认将此节点标记为失效节点,下次主备切换发生的情况下不会将此纳入后备节点。某台主节点的撮合引擎遇到不可预测的事故发生系统崩溃的时
候,就会快速的切换到另外一台备节点,这其中的快速发现借助了这一个特殊的检测组件哨兵,当哨兵发现主节点发现故障的时候会快速的将主节点切换为备节点,从而使得备节点成为当前系统的主节点。
81.实施例2:
82.本发明还提供了一种高并发撮合交易系统的使用方法,包括以下步骤:
83.(1)通过安全管理模块输入登录密码,经网关登录鉴权后登录交易系统。
84.(2)用户通过示行情模块查看当前交易系统中的每个模拟货币行情,以及最新的成交价格。
85.(3)用户发送交易指令,形成生成委托订单,经网关登录鉴权后,与数据库中已经存在的订单进行撮合匹配。
86.(4)撮合引擎节点从数据库查询订单,并放入相应的内存队列中按照所规定的撮合算法进行撮合交易。
87.进一步的,如图3-4所示,撮合交易的原则如下:
88.市价撮合:不需要指定买入或卖出价格,只根据当前最新行情价格来成交,只要对方市价委托单队列有数据就与对方市价撮合订单队列的数据进行撮合,直到市价队列为空或者当前市价委托撮合完毕;
89.限价委托买单:需要指定买入的价格,先于卖盘市价委托单队列进行撮合,直到市价委托单为空,若当前委托单仍有剩余则继续与卖盘限价队列进行撮合,找到限价队列中价格小于等于当前委托单价格的订单数据进行撮合,一直到当前委托单被撮合完成或者卖盘订单队列找不到价格小于等于当前出价的订单数据;
90.限价撮合卖单:需要指定卖出的价格,先于买盘市价委托单队列进行撮合,直到市价委托单为空,若当前委托单仍有剩余则继续与买盘限价队列进行撮合,找到限价队列中价格大于等于当前委托单价格的订单数据进行撮合,一直到当前委托单被撮合完成或者买盘订单队列找不到价格大于等于当前出价的订单数据。
91.撮合交易的流程如下:
92.市价买入委托:当委托单进入网关,将作为参数发送到撮合引擎之后,撮合引擎首先会从卖出队列头部找到市价委托单,如果头部订单为空,即市价委托队列为空,则直接撤单取消当前买入操作,否则,则进行匹配成交操作,如果焦点单的数量还有剩余则继续与当前市价委托单进行成交匹配,否则当前撮合结束生成对应的成交记录;
93.市价卖出委托:当委托单进入网关,将作为参数发送到撮合引擎之后,撮合引擎首先会从买入队列头部找到市价委托单,如果头部订单为空,即市价委托队列为空,则直接撤单取消当前卖出操作,否则,则进行匹配成交操作,如果焦点单的数量还有剩余则继续与当前市价委托单进行成交匹配,否则当前撮合结束生成对应的成交记录。
94.(5)撮合引擎节点达成成交后,由资产清算模块实时的对用户资产进行清算,并根据成交数据对用户的资产数据进行更新,并同步交易的订单数据存储于数据库,完成交易。
95.此外,需要说明的是,撮合价格计算方法撮合成交的前提是:买入价(a)必须大于或等于卖出价(b),即a》=b。计算依据:计算机在撮合时实际上是依据前一笔成交价而定出最新成交价的。
96.假设前一笔的成交价格为c,最新成交价为d;则,当a《=c时,d=a;(如果前一笔成
交价高于或等于买入价,则最新成交价就是买入价);
97.b》=c时,d=b;(如果前一笔成交价低于或等于卖出价,则最新成交就是卖出价);
98.b《c《a时,d=c;(如果前一笔成交价在卖出价与买入价之间,则最新成交价就是前一笔的成交价)。
99.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不会使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1