一、低延迟架构概述:做市系统的核心挑战

做市系统,说白了就是一台「抢跑机器」。

我做了这么多年低延迟系统,最深的感触是:做市商赚的不是预测的钱,而是速度的钱。你比别人快1微秒,你就能在价格变动前完成挂单;你慢1微秒,可能就被别人「插队」了。

嗯,咱们先聊聊做市系统到底面临哪些核心挑战。

1.1 核心挑战:速度、稳定、公平

做市系统的核心挑战,我总结为三个词:

  • 速度——从行情到达,到策略计算,再到订单发出,整个链路必须在微秒级完成。我在项目中遇到过,某次行情波动剧烈,系统延迟从5微秒飙到50微秒,结果就是连续被吃单,一天亏了上百万。
  • 稳定性——系统不能「抖」。你想想看,如果延迟忽高忽低,策略参数根本没法调。我曾经见过一个团队,他们的系统平均延迟只有3微秒,但P99延迟到了200微秒——这种系统根本没法用。
  • 公平性——交易所对做市商有严格的考核,比如挂单时间占比、买卖价差等。如果你的系统延迟不稳定,很容易触发交易所的惩罚机制。

一句话总结:做市系统的本质,是在极短的时间内,完成「行情接收→策略计算→订单发送」的闭环。任何一个环节的延迟,都会直接转化为亏损。

1.2 延迟的来源分析

延迟到底从哪来?我习惯把延迟拆成四个部分:

延迟类型 典型来源 量级(参考)
网络延迟 网卡、交换机、光纤传输 1-100微秒
内核延迟 系统调用、中断处理、上下文切换 1-50微秒
应用延迟 协议解析、策略计算、内存分配 0.1-10微秒
硬件延迟 CPU缓存未命中、内存访问、PCIe传输 0.01-1微秒

这里我想特别强调一点:很多人只关注「网络延迟」,觉得换个好网卡就万事大吉了。其实不然。我在优化一个系统时发现,网络延迟只占20%,剩下的80%都耗在了应用层的协议解析和内存拷贝上。说白了,你网卡再快,如果应用层代码写得烂,照样白搭。

避坑指南:我曾经花了两周时间优化网络延迟,结果只降了2微秒。后来发现,把协议解析从JSON换成二进制编码,直接降了15微秒。所以,先做profile,再动手优化。

1.3 低延迟架构的设计目标

低延迟架构的设计目标,其实就三个:

  • 确定性——延迟要可预测,不能忽高忽低。我习惯用「P99延迟」作为核心指标,而不是平均值。平均值好看没用,极端值才要命。
  • 最小化——把每个环节的延迟压到极致。比如,从网卡到应用层,能不能做到零拷贝?从策略计算到订单发送,能不能做到无锁?
  • 可观测——每个环节的延迟都要能监控。我见过太多系统,出了问题只能靠猜。没有监控,你连问题在哪都不知道。

1.4 设计原则:我的经验之谈

做低延迟架构,我总结了几个原则:

  1. 减少拷贝——数据每拷贝一次,延迟就增加一次。能零拷贝就零拷贝,能共享内存就别用消息队列。
  2. 避免锁竞争——锁是延迟的「放大器」。我建议用无锁数据结构,或者用原子操作替代锁。
  3. 预分配资源——运行时动态分配内存,是延迟抖动的主要来源。我习惯在启动时就把所有内存分配好,运行时只复用。
  4. 绑定CPU核心——把关键线程绑定到特定CPU核心上,避免上下文切换。我曾经见过,一个线程被调度到不同核心上,延迟直接翻倍。
  5. 使用低延迟硬件——比如Solarflare网卡、FPGA加速卡。但要注意,硬件只是辅助,软件才是根本。

注意:不要盲目追求「极致低延迟」。我见过有人为了省1微秒,把代码写得极其复杂,结果出了问题根本没法调试。记住,可维护性也是架构设计的一部分。

1.5 知识体系总览

下面这张图,是我对低延迟架构知识体系的总结。你可以把它当作整个课程的「地图」:

低延迟架构知识体系 做市系统低延迟架构 核心挑战 速度 · 稳定性 · 公平性 延迟来源 网络 · 内核 · 应用 · 硬件 设计目标 确定性 · 最小化 · 可观测 设计原则 减少拷贝 · 避免锁竞争 预分配 · 绑核 · 低延迟硬件 每个分支都是后续章节的核心内容 从挑战出发,到延迟分析,再到目标和原则

1.6 小结

这一章,我们聊了做市系统的核心挑战、延迟的来源、设计目标和原则。说白了,低延迟架构不是堆硬件,而是从系统层面,把每个环节的延迟都压到极致。

我个人习惯,在开始任何优化之前,先画一张「延迟链路图」,把从行情接收到订单发送的每个环节都列出来,然后逐个测量、逐个优化。这样心里才有底。

嗯,下一章我们会深入聊「硬件选型与网络优化」,到时候我会分享一些具体的硬件配置和调优经验。


专注资料整理