构建股票证券行情分析系统——服务器开发

由于不同证券交易所的行情接口可能不一样,所以接入不同交易所的行情,需要不同的源程序。这里讨论源程序的共性和技术上以及运维上的要求。

一、源程序

1、共性

一般源程序主要流程是

  • 初始化时读取配置,完成市场信息、码表、快照数据初始化;
  • 按照交易所的接口,接入行情数据,落盘保存方便复盘,并转换成标准格式,推送数据给下一级;
  • 收盘处理。

2、技术以运维

  • 由于市场环境是多变的,交易所会不时的增加新的证券商品和分类,所以作为源程序要适应这种变化,最好在初始化市场信息、码表的时候使用脚本语言实现。这样后期运维时只需要修改脚本,而不用升级源程序。我之前写的接入中金所的行情源程序基本上就是使用lua脚本实现的,这样中金所每次新增合约、新增期权、调整交易时间、新增外汇分类等,我都不用修改程序,运维人员只需收盘后替换下脚本即可,源程序会在初始化时调用新的脚本程序,生成符合要求的市场信息、码表等数据。
  • 证券行情数据对速度是非常苛刻的,所以速度上的要求源要以最快的速度把数据收下来,因此源程序不应该有复杂的逻辑,并且应该将接收数据和处理数据部分分在不同线程处理。
  • 在源程序初始化的时候,先断开所有下级连接,不要对下级提供服务,下级的任何连接和请求都应该屏蔽,因为这个过程中,源无法保证提供完整有效的数据,所以源要保证必须在初始化成功后,才能对下级提供服务。
  • 源程序在收盘后依然要提供完整的服务。
  • 停牌休市的记录,比如交易所节假日信息,最好由源提供,这样保证从源开始的数据的一致性。

二、传输程序

1、共性

一般传输程序流程是

  • 初始化是读取配置,接入源,并请求市场信息、码表、节假日信息等数据,完成初始化
  • 收到源数据,向下级推送

2、技术以运维

  • 传输应该只需配置源的IP:Port。
  • 传输的初始化,就是第一次开启以及每次源断开和传输的连接,传输都要重新初始化,先断开下级连接,并连接源,如果连不上就一直重试,初始化过程中也不对下级提供服务。
  • 传输不改变源传来的任何数据,就跟它的名字一样,就是一个传输功能,所以传输应该是非常简单高效的程序。

三、转码程序

1、共性

一般转码程序流程是

  • 初始化是读取配置,接入上一级,并请求市场信息、码表、节假日信息等数据,完成初始化
  • 收到上级数据,分析处理成分时数据、历史数据、快照数据、明细数据,并向下一级推送
  • 保存和载入分时数据、历史数据(分钟数据、日线数据等)、快照数据、明细数据
  • 收盘

2、技术以运维

  • 转码程序应该支持不连上一级,直接从本地保存的数据初始化,这样方便直接使用转码程序复盘。
  • 转码程序的初始化,就是第一次开启以及每次上一级断开和转码程序的连接,转码程序都要重新初始化,先断开下级连接,并连接上一级,获取市场信息、码表、节假日信息等数据,如果连不上就一直重试,初始化过程中也不对下级提供服务。
  • 对于从本地初始化的,不需要一定要连上上一级,直接从本地快照初始化好数据。
  • 转码程序需要保存所有基础数据,并保证数据的完整性一致性,这些数据可以直接给证券行情分析客户端程序使用。

四、小结

上面列举的服务端程序,是最基本的服务器程序,为了以后服务器的可扩展性,以上程序全都支持级联。比如源可以级联二级源,传输可以级联二级传输,转码可以级联转码CACHE

源:保证完整的保存交易所下发的数据。

传输:完整的传输源传过来的数据,传输缓存任何数据。

转码:转换源的数据为标准格式数据,并保证完整性和一致性,有分时数据、历史数据、快照数据、明细数据等。

 

五、服务器均衡

证券行情分析系统,最重要的指标就是数据的准确性和及时性,所以对于服务器的要求比较高,而一台服务器服务的客户数肯定有限。

面对大量用户海量数据的情况下,我们使用了源的级联,传输的级联,转码的级联,来分流用户和数据。多级能够分流服务器压力,但是会增加延迟,为了保证及时性,我们的源、传输、转码,分别明确了各自的功能。源只负责收交易所数据,不做其他事情,这样源基本上收到数据能够立马把数据传输下去,传输收到数据立马向下传输数据,转码收到数据加工保存(可能会消耗一点时间,这种数据加工是无论用什么方法都避免不了的),所以除了转码会耗时,其他的时间消耗就是网络时间了。

所以通过以上步骤,我们基本上已经实现了一个高效均衡系统,并且可扩展性也是非常好的。

 

六、维护

任何服务器系统开发完成后,大量的工作就是部署维护了,为了方便的部署维护,我们需要做一下事情

1、基本数据在源头配置,通过源头下发,这样可以做到一处配置,各处共享

2、下一级的运行,依赖上一级的运行,这样可以追本溯源。

3、运行时的日志记录,每一级程序都应该有对应的日志记录,记录初始化、运行中、收盘等信息,记录出错信息,最好能做到通过出错记录能够反推导出出问题的点。

4、运行是的实时监控,需要有一个实时监控平台,通过平台可以随时查看各级程序的运行状态,并控制各级程序的重入、修改配置等,比如:

分享到:

评论已关闭