分布式期货行情交易系统-架构设计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

 


前言

一、系统架构图

根据对系统的分析以及本身开发人员对技术的熟练度,选取消息队列kafka来实现对系统的解耦,选取zookeeper来对整个系统进行分布式管理,数据库选用了开源分布式数据库TDengine。

系统架构图如下图:

二、功能分析

1.客户端

客户端通过配置连接不同的前置服务器,更优的做法是客户端根据网络测试自动选择最优前置建立scoket长连接。

2. 前置

设计行情系统为开放系统(无需注册科直接使用),则用户是匿名连接,按规则为每个连接生成全局不同guid(前置id_socket)来标识客户端。

交易和行情分别建立单独的长连接。

行情请求是匿名的,可以提交给任意K线服务处理,可以通过Kafka本身实现负载均衡(后面将在Kafka系统介绍中讲);

交易请求在第一条登录请求确定交易服务后,后继的请求都必须持续由该服务处理,因此,对交易请求通过负载均衡算法(交易账号和期货公司编码作为hash算法key)来实现消息的分发。

3.实时行情采集

通过行情API获取实时行情,异步处理:入库(如果存储的话),同时生成基础K线数据入库。

4.K线服务

根据客户端的请求来查询数据库TDengine及Redis,生成客户端所需的K线数组。

5.交易服务

交易服务分为多个进程:用户管理主进程及交易子进程(每一种类型的交易API运行一个进程),交易子进程和用户管理主进程通过socket通信(也可通过其他方式进行进程间通信)。

用户管理主进程启动后开启服务端口监听,然后启动交易子进程,交易子进程启动后与用户管理主进程建立连接。

交易子进程是必须支持多交易用户同时登陆。

用户管理主进程根据提交的交易客户(客户端提交登录请求时设定使用哪种类型的接口,一般是**CTP服务器/**恒生服务器)转交给相应的交易子进程处理。

6 云条件单

  • 价格触发云条件单

价格云条件单触发主要是实时行情,实时行情来源有两种:一种是实时行情服务提交到消息队列kafka中的数据,另一种是来源于行情API。为了保证速度选用行情API。

收到条件单处理逻辑分三步:1.根据交易合约编码先分组;2.按大于或者小于再分组;3.组内根据触发价格顺序排序。

触发处理逻辑:收到实时行情,根据实时行情合约编码查找分组,大于组中触发价格大于实时行情价格的所有单子触发,小于组中触发价格小于实时行情价格的所有的单子触发。

  • 时间触发云条件单

避免服务器时间存在不准确的可能性,利用实时行情的时间来触发时间云条件单。

注意事项

国内期货品种已超过50个品种,每个品种相对活跃的合约约为3个,实际每秒钟收到实时行情数据约为50 * 3 * 2=300多条,每条行情数据按2KB计算,每秒钟有600多K数据,因此如果要保存实时行情数据需要巨大的存储空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值