大数据时代证券核心交易系统架构演化
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2. 大数据时代证券核心交易系统架构演化
上交所技术公司 刘凯
3. 目录
• 从马背到互联网:证券交易系统历史
• 上交所交易系统演进
• 证券交易系统架构的挑战
• 证券核心交易架构演化
4. 从马背到互联网:证券交易系统历史
• 证券交易所的诞生
• 问题
• 远洋贸易获利颇丰但是风险重重
• 如何分担风险共享利润?
• 首个交易所的诞生
• 1613年, 阿姆斯特丹证券交易所
• 第一只证券东印度公司证券
5. 从马背到互联网:证券交易系统历史
交易与清算 订单与行情 市场信息
人工时代 纸张 自行车 信鸽/马队
电子与机械时代 纸张 机械风动管 电报/电话
计算机与网络 计算机 X.25网络 电话
互联网时代 计算机 Internet/广域网 Internet/广域网
6. 从马背到互联网:证券交易系统历史
• Stage1:分散式的区域交易所
• 通信不便,美国高峰期有数百家交易所运转
• Stage2:国家性的交易所
• 部分合并,部分退出,形成每个国家几家主要交易所
• Stage3:电子交易所的竞争
• 信息时代带来的是交易所门槛的降低,依托信息技术的电子化交
易所能够向传统巨无霸挑战
• 另类交易系统,场外电子市场ECN,电子化交易所
• Stage4:交易所之间的全球化竞争与合作
• 合并,互联
7. 上交所交易系统演进
• 1990年11月26日成立,同年12月19日正式营业
8. 上交所交易系统演进
第三代:分布式集群系统(2009.11-至今)
第二代:商用小型机系统(1992.12-2009.11)
第三代交易系统2009年11月23日上线,使用多主机并行
撮合,最高支持10万笔每秒,全天容量2.4亿笔订单。
第一代:局域网系统(1990.12-1992.12)
建立在集群系统上,通过分层部署在关键应用、主机以
及网络三个方面皆有冗余,满足容灾和可扩展需求,在
发生灾备切换时可保证订单数据“零丢失”。
第二代交易系统建立在商用小型机系统上,通过双向卫星
和光缆建成覆盖全国的通讯网络,支撑了“从上海到全国,
从场内到场外,从营业部到集中交易”的交易方式变革。
1990年11月26日成立,同年12月19日正式营业,是第
一个直接采用计算机撮合系统进行交易的新兴交易所。
• 基于Novell服务器的局域网络
• 每秒处理3笔业务,月处理成交2万笔
• 市场的委托、行情、成交回报等环节仍需要手工完
成
Novell主机更换为基于惠普小型机UNIX操作系统
每秒200笔,日处理能力200万笔
1993年,采用单向卫星广播行情,双向卫星接收报单
1997年和1999年进行了两次设备和应用的重大升级,
系统处理能力提高到每秒2万笔,日处理能力800万笔
• 后随着不断的扩容和改造,性能和容量不断被刷新
•
•
•
•
9. 证券交易系统架构的挑战
10. 证券交易系统架构的挑战
高吞吐
§
§ 集中处理整个上海证券市场的证券交易
交易机会稍纵即逝,需要争抢
§
§ 一笔订单理论上可触发众多交易
数据传输和处理的集中突发是常态
§ 未来需要支持30-50万笔每秒处理
§ 挑战
串行交易/并行交易?
§
§ 主机内并行/分布式并行?
并行交易时的
同步
一致性保证
分布式事务
实时灾备切换…
11. 证券交易系统架构的挑战
低时延
§
§
§
实时处理性能对证券业务至关重要
§ 可预期性需求
§
§ 价格发现能力
市场状态的及时同步
目前普遍为单笔订单毫秒级延时
未来需要做到微秒级处理
挑战
§
§ 物理门槛:摩尔定律的失效
强校验机制
§
§ 100%安全性:备份的代价
处理的有序性和公平性
12. 证券交易系统架构的挑战
高可用
§
§ 是业务连续性保障,证券市场的关键
单个部件的可用性和整体可用性均需保
持高水平
§ 两地三中心的布局要求
挑战
§ 所有代码都有Bug?!
§
§ 所有环节不许有单点隐患
灾备实时切换数据0丢失
§ 关于安全与效率的平衡
13. 证券交易系统架构的挑战
灵活性
挑战
§
§ 业务支持的灵活性
升级部署的灵活性 § 业务模型的分析
§
§ 操控的灵活性
应急处理的灵活性 §
§ 底层架构的支持
数据结构的完善
§
§ 扩展的灵活性
全球化交易的灵活性 § 软件架构的可操作性
14. 大数据时代的特征
15. 证券核心交易架构演化-分布式架构
• 单体架构
• 分布式层级架构-可扩展
• 微服务 -可编排复用
16. 证券核心交易架构演化-分布式架构
• 选择
• 基于服务的架构 Vs 事件驱动的架构
• 事件驱动为主,兼顾基于服务
• 关键点
• Event Sourcing
• CQRS
16
17. 证券核心交易架构演化-Event Sourcing&CQRS
• Martin Fowler
• 整个系统以事件为驱动,所有
业务都由事件驱动来完成。
• 系统的数据以事件为基础,事
件要保存在某种存储上。
• 业务数据只是一些由事件产生
的视图,是可重演的。
18. 证券核心交易架构演化-Event Sourcing&CQRS
• 使用Event Sourcing进行节点灾备与恢复
• 依靠CQRS增加交易的性能
Order
State Machine
Master
State Machine
Slave
State Machine
Query
Slave
State Machine
Slave
19. 证券核心交易架构演化-Exactly Once
• 证券处理的特点
• 必须保证故障时数据处理 “Exactly Once”
• 保证单节点处理的幂等性
• 分布式架构的整体故障恢复
• 可以考虑类似分布式快照机制
• 或者考虑逻辑时钟的应用
20. 证券核心交易架构演化-分布式事务
• 证券交易中的事务
• 本地事务
• 分布式事务
• 分布式事务的选择
• SAGA
• TCC
• 交易系统中的实现
• 每一阶段事务均为一个正常处理事件
• 事务编号在事件处理节点中传递
• 事务管理器
21. 证券核心交易架构演化-高可用设计
• 状态复制
结果复制,状态同步
共享磁盘复制
输入复制,执行重演
TCP复制
组播复制
• 灾备切换(共识的建立)
手工切换
CoroSync+DL
M
Paxos & Raft
Zookeeper/etcd
22. 证券核心交易架构演化-传输模型变化
基于路由的架构
基于总线的架构
节点1
路由管理
节点1
路由表
节点2
路由表
节点3
Send to --------> Receive from
路由表
节点2
Publish --------> Subscrib
节点3
23. 证券核心交易架构演化-传输模型变化
基于点对点传输的结构
基于组播的结构
节点1
节点1
交换机
节点2
交换机
节点2
节点3
性能和公平性
节点3
24. 证券核心交易架构演化-低延时加速和并行
• 全内存实时数据处理
• NUMA节点优化
• CPU核心分配
• 缓存命中率
• 网络加速与Kernel bypass
• 低延时网卡
• 低延时交换机
• 软件硬件化
• FPGA
• 微观进程内的并行处理
• 多线程并行
• Barrier
• 顺序merge
• 分布式并行处理
• 多种模式-负载均衡
25. 证券核心交易架构演化-资源可调度
• 数据与计算资源相分离
• 计算资源可调度
• 内部状态可输出
• 应急场景可操作
• 进程内的资源管理器
• 计算资源:线程
• 内部状态:堆内存和共享内存
• 提供状态查询,应急修改等功能
26. 证券核心交易架构演化-分布式节点管理
• 一个分布式节点管理
•
•
•
•
•
参考数据上场
配置数据加载
日志和状态数据的监控
操作控制
升级部署
• Service Mesh与Sidecar的
• 节点业务的支持
• 支持类节点的互联
• 交易分布式节点的Sidecar
以系统为单
位的管理
以节点为单
位的管理
27. 证券核心交易架构演化-国产化的支持
调优最佳实践
系统性能优化工具
NUMA绑核+CPU预取,
队列操作时延显著下降
版本升级、锁优化、内存优化等手段调优,多并发场景整体性能提升较大
多并发场景下整体性能
版本升级:
NUMA绑核
C/C++性能分析
+
CPU预取配置
资源调度分析
• 打开CPU预取
• 修改内核代码
• 升级编译器,引入两个编
译选项(流水线&目标平
台指令集)
• 升级Glibc至2.3.1版本
8
7
6
锁优化:
5
• 修改业务逻辑,优化锁的
顺序,提升锁的执行效率。
4
3
内存屏障优化:
• 修改C++ atomic原子类
型指定的内存模型,提升
内存池性能
7.1
nr_alloc_success_++;
nr_alloc_success_.fetch_add(1,
std::memory_order_relaxed);
2
1
0
5.4
28.