电子撮合系统是典型的高性能场景下的信息化系统,研发的核心难点集中在算法设计、系统架构、数据一致性等多个关键方面。
当下,鹏交所每日成交订单仅一百多笔,可随着上市公司数量的增多以及股民和机构投资者不断涌入,订单量定会呈爆发式增长。
他清楚地记得,前世鹏交所在电子撮合系统上线当年,日均订单量就飙升至五千笔,1998年首批基金公司进场后,更是迅猛增长到日均十万笔。而到了后来全民炒股的21世纪20年代,每日订单量竟高达三到五亿笔。
依据这些经验,秦奕将如今设计的这个电子撮合系统峰值处理能力定在每秒五百笔,他预计这个系统在未来五年内应该能稳定运行,不会出现大问题。
为实现电子撮合算法,团队首先得设计一个适合动态插入、撤单且能动态排序的数据结构。
堆、跳表、红黑树这两类高效数据结构及相关算法已被完整提出,秦奕无需给团队详细介绍其中的算法设计,只需把去年出版的那本《算法导论》拿给负责算法设计的团队成员研读即可。
数据结构之外,由于撮合系统会同时接收不同营业部发来的订单信息,必然涉及多线程处理。
在多线程环境下,订单的插入、撤单和撮合操作,都要保证数据一致性,而要让性能不被这一致性要求拖累,就必须采用优化的乐观锁机制。
秦奕召集团队成员,详细讲解了这一机制的要点,成员们认真记录,不时提出疑问,大家围绕着技术难题展开热烈讨论。
系统可靠性与容错同样是巨大挑战。为保证交易不间断运行,避免宕机或数据丢失,交易数据需实时落盘。但以现有的技术条件,频繁的I\/o操作严重拖累性能,团队需要设计轻量级的预写日志结构。
团队成员们围坐在会议桌前,对着电脑上的数据和设计图纸,反复探讨如何优化,有人提出一种思路,马上就有人从不同角度分析其可行性与不足。
此外,系统崩溃后,要快速重建内存中的订单簿和账户状态,可当下缺乏高效的快照机制,恢复时间难以把控。团队成员只能不断摸索,尝试不同的方法,在实验室里模拟系统崩溃场景,一次次记录数据恢复时间,调整参数,只为找到最佳解决方案。
在实时风控规则集成方面,要在撮合过程中嵌入风控逻辑,且保证风控检查在毫秒级内完成。
但目前没有现成且方便合适的规则引擎,所以团队又得开发一个类似的库,确保风控逻辑一旦需要修改,无需停机重编译,毕竟一旦撮合系统停机就可能给证券交易所带来巨大的损失。
秦奕和团队里负责这块的成员一起,查阅大量资料,参考国内外相关案例,一点点搭建框架,编写代码。
在网络通信与协议设计上,为高效传输订单和行情数据,像是http这类用于传输文本的常规可读性协议是无法满足需求的,团队需自定义二进制协议,减少传输开销。