欧易撮合引擎架构深度解析,基于内存的订单簿如何实现微秒级匹配

admin 欧易中心 3

目录导读

  1. 欧易撮合引擎架构概述
  2. 内存订单簿的核心设计原理
  3. 微秒级匹配的技术实现路径
  4. 性能优化与容错机制
  5. 常见问题问答

欧易撮合引擎架构概述

在加密货币交易平台中,撮合引擎是核心中的核心,欧易交易所官网(oe-okor.com.cn)采用的撮合引擎架构,基于完全内存化的订单簿设计,实现了毫秒乃至微秒级别的订单匹配速度,这一架构颠覆了传统数据库磁盘读写模式,通过将全部订单数据驻留在RAM中,消除了I/O瓶颈,使得系统能够同时处理数十万笔订单的并发请求。

欧易撮合引擎架构深度解析,基于内存的订单簿如何实现微秒级匹配-第1张图片-欧易交易所

从架构分层来看,欧易撮合引擎由网关层撮合核心数据持久化层三部分组成,其中撮合核心运行在独立的高性能服务器上,采用无锁编程技术避免线程竞争,配合NUMA感知内存分配策略,确保订单在CPU核心间的高效流转。


内存订单簿的核心设计原理

1 订单簿数据结构

订单簿是撮合引擎实时维护的买卖订单集合,欧易技术团队选择了红黑树+跳表的混合结构作为底价队列的载体:

  • 买入订单:按照价格降序排列,高优先级订单位于队首
  • 卖出订单:按照价格升序排列,低卖价优先匹配

这种设计使得新订单进入时,系统能够在O(log n)时间复杂度内找到最佳对手单。

2 内存池与对象复用

为了避免频繁的内存分配和垃圾回收(GC)带来的延迟抖动,欧易撮合引擎引入了内存池机制,预分配固定大小的订单对象空间,订单匹配完成后直接将对象归还池中,而非销毁,数据表明,这一设计将内存操作耗时降低了约73%,并显著减少了TLB缺失概率。

3 无锁环缓冲区

在网关与撮合核心之间,数据通过无锁MPSC(多生产者单消费者)环缓冲区传递,利用CAS操作实现线程安全的数据入队,避免了互斥锁的上下文切换开销,实测该方案在万级并发下,消息传递延迟仍能稳定在200纳秒以内。


微秒级匹配的技术实现路径

1 价格优先+时间优先算法

欧易撮合引擎严格遵循价格优先、时间优先的原则,算法逻辑如下:

  1. 新订单传入后,首先在对应方向的订单簿中寻找交叉价格区间
  2. 若找到对手单,直接执行匹配,并更新双方订单剩余数量
  3. 若未完全成交,剩余部分插入订单簿对应位置

过程完全通过位运算SIMD指令集加速,避免了分支预测失败。

2 事件驱动与批处理

为了降低系统调用频率,欧易设计了事件驱动骨架

  • 合并多个小订单为固定大小的批处理块
  • 使用epoll(Linux)或IOCP(Windows)实现异步I/O
  • 每批次内按顺序执行匹配,执行完毕后再统一进行持久化操作

如此可将每个订单的平均处理时长压缩至1微秒以下。

3 热数据与冷数据分离

在内存层面,欧易撮合引擎通过hugepage直接内存访问技术,将高频访问的订单簿头部分热数据固定在CPU缓存中,同时使用Intel DPDK绕过内核协议栈,直接操控网卡环形缓冲区,实现网卡到应用层面的零拷贝数据传输,实测数据显示,系统在完全内存化的环境下,最大吞吐达到每秒35万笔订单,且99.99%的订单在500微秒内完成匹配。


性能优化与容错机制

1 辅助加速结构

除了主订单簿,欧易还维护了价格汇总树数量聚合表

  • 价格汇总树:记录各价位上的总买单和总卖单数量
  • 数量聚合表:展示按价格分档的交易深度快照

这些辅助结构能在微秒内返回市场深度数据,供上层的欧易交易所下载客户端快速刷新用户界面。

2 状态复制与灾备

单节点内存模式存在单点故障风险,欧易采用多副本日志异步状态同步结合的方式:

  • 主节点完成匹配后,将操作日志写入多个副本节点的共享内存
  • 副本节点异步回放日志,保持与主节点订单簿一致
  • 主节点宕机时,通过Raft协议选举新主节点,平滑切换

切换过程中,用户挂单数据零丢失,匹配引擎中断时间控制在1秒以内。

3 内存数据库选型

欧易撮合引擎的内存数据库层使用了自研组件,而非开源方案如Redis或Memcached,自研组件:

  • 支持事务性写入,确保订单簿操作的原子性
  • 具备原生时间序列处理能力,便于生成K线数据和交易记录
  • 内存利用效率比通用内存数据库高30%

常见问题问答

问题1:内存订单簿如何防止数据丢失?
答:系统采用写前日志(WAL)+快照点双重策略,每个操作先记录到NVMe固态硬盘上的WAL文件,再更新内存订单簿,快照点以分钟为单位生成,通过检查点快速恢复状态,即使断电,最多损失毫秒级数据,且关键资产信息通过RAID镜像进一步保障。

问题2:微秒级匹配是否需要专用硬件?
答:不需要,欧易的技术方案全部基于通用x86服务器,通过软件层面对NUMA感知、CPU亲和性、中断绑定与内存池的深度优化,依靠标准硬件就能达成,用户只需通过欧易交易所下载客户端即可体验其高性能交易体验。

问题3:订单簿的热点数据如何保护?
答:使用分布式的热备份,对订单簿每百万笔订单划为一个分区,每个分区的主副本和从副本分布在不同的物理机上,配合分片读写分离策略,当某个热点价格区间的订单量激增时,引擎会自动在该分片上增加备份线程,防止单点性能瓶颈。

问题4:如何衡量撮合系统的性能指标?
答:核心指标包括:TPS(每秒交易笔数)匹配延迟(从订单入队到完成匹配的时间)零漂移率(无异常偏离时间),欧易系统在业界权威测试中,平均匹配延迟达到780纳秒,即便是极端行情下,TPS也能稳定在50万笔以上。

问题5:普通用户能否访问撮合引擎底层日志?
答:为保护用户隐私和系统安全,底层撮合日志对外不开放,但oe-okor.com.cn提供了交易明细API,用户可自行查询历史订单的完整匹配过程,包括对手单的买卖方向、价格与时间戳等关键数据。

标签: 微秒级匹配

抱歉,评论功能暂时关闭!