You are on page 1of 28

20

21






/精










大数据时代证券核心交易系统架构演化

/精





精上交所技术公司 刘凯
21
20
目录
• 从马背到互联⽹:证券交易系统历史



• 上交所交易系统演进


• 证券交易系统架构的挑战



• 证券核⼼交易架构演化

/精






21
20
从马背到互联网:证券交易系统历史
• 证券交易所的诞⽣


• 问题


• 远洋贸易获利颇丰但是风险重重


• 如何分担风险共享利润?



• 首个交易所的诞⽣

/精
• 1613年, 阿姆斯特丹证券交易所


• 第⼀只证券东印度公司证券






21
20
从马背到互联网:证券交易系统历史


交易与清算 订单与行情 市场信息



人工时代 纸张 自⾏车 信鸽/马队


电子与机械时代 纸张 机械风动管 电报/电话


计算机与网络 计算机 X.25⽹络 电话

/精
互联网时代 计算机 Internet/⼴域⽹ Internet/⼴域⽹







21
20
从马背到互联网:证券交易系统历史
• Stage1:分散式的区域交易所


• 通信不便,美国⾼峰期有数百家交易所运转



• Stage2:国家性的交易所


• 部分合并,部分退出,形成每个国家⼏家主要交易所


/精
• Stage3:电子交易所的竞争


• 信息时代带来的是交易所门槛的降低,依托信息技术的电⼦化交


易所能够向传统巨⽆霸挑战


• 另类交易系统,场外电⼦市场ECN,电⼦化交易所


• Stage4:交易所之间的全球化竞争与合作
• 合并,互联 选

21
20
上交所交易系统演进
• 1990年11月26日成立,同年12月19日正式营业






/精






21
20
上交所交易系统演进
第三代:分布式集群系统(2009.11-⾄今)



第二代:商用小型机系统(1992.12-2009.11)




第三代交易系统2009年11月23日上线,使用多主机并行
撮合,最高支持10万笔每秒,全天容量2.4亿笔订单。

/精
第一代:局域网系统(1990.12-1992.12)
建立在集群系统上,通过分层部署在关键应用、主机以


及⽹络三个⽅面皆有冗余,满⾜容灾和可扩展需求,在


发⽣灾备切换时可保证订单数据“零丢失”。
第⼆代交易系统建立在商用小型机系统上,通过双向卫星


和光缆建成覆盖全国的通讯网络,支撑了“从上海到全国,
从场内到场外,从营业部到集中交易”的交易⽅式变⾰。



• Novell主机更换为基于惠普小型机UNIX操作系统
每秒200笔,日处理能⼒200万笔


1990年11月26日成立,同年12月19日正式营业,是第 • 1993年,采用单向卫星⼴播⾏情,双向卫星接收报单
21

一个直接采用计算机撮合系统进⾏交易的新兴交易所。 • 1997年和1999年进⾏了两次设备和应用的重⼤升级,
• 基于Novell服务器的局域⽹络 系统处理能⼒提⾼到每秒2万笔,日处理能⼒800万笔
20

• 每秒处理3笔业务,月处理成交2万笔 • 后随着不断的扩容和改造,性能和容量不断被刷新
• 市场的委托、⾏情、成交回报等环节仍需要⼿⼯完

20
21
证券交易系统架构的挑战







/精





证券交易系统架构的挑战
高吞吐


挑战


§ 集中处理整个上海证券市场的证券交易 § 串⾏交易/并⾏交易?


§ 交易机会稍纵即逝,需要争抢 § 主机内并⾏/分布式并⾏?
⼀笔订单理论上可触发众多交易 并⾏交易时的


§ §
§ 数据传输和处理的集中突发是常态 同步


§ 未来需要支持30-50万笔每秒处理 ⼀致性保证

/精
分布式事务


实时灾备切换…






21
20
证券交易系统架构的挑战
低时延



§ 实时处理性能对证券业务⾄关重要 挑战
可预期性需求


§
§ 价格发现能⼒


§ 物理门槛:摩尔定律的失效
§ 市场状态的及时同步 强校验机制


§
§ 目前普遍为单笔订单毫秒级延时 § 100%安全性:备份的代价

/精
§ 未来需要做到微秒级处理 § 处理的有序性和公平性







21
20
证券交易系统架构的挑战
高可用


挑战



§ 是业务连续性保障,证券市场的关键 § 所有代码都有Bug?!


§ 单个部件的可用性和整体可用性均需保 § 所有环节不许有单点隐患
持⾼⽔平


§ 灾备实时切换数据0丢失
§ 两地三中⼼的布局要求

/精
§ 关于安全与效率的平衡







21
20
证券交易系统架构的挑战
灵活性


挑战


§ 业务支持的灵活性


§ 升级部署的灵活性 § 业务模型的分析


§ 操控的灵活性 § 底层架构的支持


§ 应急处理的灵活性 § 数据结构的完善

/精
§ 扩展的灵活性 § 软件架构的可操作性
§ 全球化交易的灵活性







21
20
大数据时代的特征

20
21






/精





证券核心交易架构演化-分布式架构
• 单体架构




• 分布式层级架构-可扩展



/精
• 微服务 -可编排复用







21
20
证券核心交易架构演化-分布式架构
• 选择


• 基于服务的架构 Vs 事件驱动的架构


• 事件驱动为主,兼顾基于服务


• 关键点


• Event Sourcing


• CQRS

/精






21
20

16
证券核心交易架构演化-Event Sourcing&CQRS
• Martin Fowler


• 整个系统以事件为驱动,所有


业务都由事件驱动来完成。



• 系统的数据以事件为基础,事


件要保存在某种存储上。

/精
• 业务数据只是⼀些由事件产⽣


的视图,是可重演的。






21
20
证券核心交易架构演化-Event Sourcing&CQRS
• 使用Event Sourcing进⾏节点灾备与恢复



• 依靠CQRS增加交易的性能


Order
State Machine
Master



/精
State Machine


Slave




State Machine
Slave



21

Query State Machine


20

Slave
证券核心交易架构演化-Exactly Once
• 证券处理的特点


• 必须保证故障时数据处理 “Exactly Once”



• 保证单节点处理的幂等性


• 分布式架构的整体故障恢复


/精
• 可以考虑类似分布式快照机制


• 或者考虑逻辑时钟的应用






21
20
证券核心交易架构演化-分布式事务
• 证券交易中的事务


• 本地事务



• 分布式事务


• 分布式事务的选择


/精
• SAGA


• TCC


• 交易系统中的实现



• 每⼀阶段事务均为⼀个正常处理事件
• 事务编号在事件处理节点中传递 选

• 事务管理器
21
20
证券核心交易架构演化-高可用设计
• 状态复制



结果复制,状态同步 输入复制,执行重演




共享磁盘复制 TCP复制 组播复制

/精



• 灾备切换(共识的建立)


CoroSync+DL

手工切换 Paxos & Raft Zookeeper/etcd
M

21
20
证券核心交易架构演化-传输模型变化


基于路由的架构
基于总线的架构



节点1 路由管理


节点1


路由表

/精


路由表
节点2 节点3 路由表


节点2 节点3




21

Send to --------> Receive from Publish --------> Subscrib


20
证券核心交易架构演化-传输模型变化


基于点对点传输的结构
基于组播的结构



节点1


节点1


/精

交换机 交换机



节点2 节点3 节点2 节点3




21

性能和公平性
20
证券核心交易架构演化-低延时加速和并行
• 全内存实时数据处理 • 微观进程内的并⾏处理


• NUMA节点优化


• 多线程并⾏


• CPU核⼼分配 • Barrier


• 缓存命中率 • 顺序merge


/精
• ⽹络加速与Kernel bypass • 分布式并⾏处理


• 低延时⽹卡 • 多种模式-负载均衡


• 低延时交换机



• 软件硬件化
• FPGA 选

21
20
证券核心交易架构演化-资源可调度
• 数据与计算资源相分离


• 计算资源可调度


• 内部状态可输出


• 应急场景可操作


• 进程内的资源管理器


/精
• 计算资源:线程
• 内部状态:堆内存和共享内存



• 提供状态查询,应急修改等功能





21
20
证券核心交易架构演化-分布式节点管理
• ⼀个分布式节点管理 以系统为单 以节点为单


• 参考数据上场 位的管理 位的管理


• 配置数据加载



• 日志和状态数据的监控


• 操作控制

/精
• 升级部署


• Service Mesh与Sidecar的


• 节点业务的支持



• 支持类节点的互联
• 交易分布式节点的Sidecar 选

21
20
证券核心交易架构演化-国产化的支持


系统性能优化工具 调优最佳实践


NUMA绑核+CPU预取, 版本升级、锁优化、内存优化等手段调优,多并发场景整体性能提升较大


队列操作时延显著下降



版本升级: 多并发场景下整体性能

/精
• 升级编译器,引入两个编 8
NUMA绑核 译选项(流水线&目标平 7.1
台指令集)


C/C++性能分析 7
• 升级Glibc至2.3.1版本
+


6 5.4
锁优化:


CPU预取配置 • 修改业务逻辑,优化锁的 5


顺序,提升锁的执行效率。
• 打开CPU预取
4
资源调度分析


• 修改内核代码
3

nr_alloc_success_++; 2
21

内存屏障优化:
• 修改C++ atomic原子类
1
20

型指定的内存模型,提升 nr_alloc_success_.fetch_add(1,
内存池性能 std::memory_order_relaxed);
0
20
21






/精




You might also like