一、数据管道概述:做市商业务背景、数据管道的定义与价值、核心设计目标

做市商系统,说白了就是一台「印钞机」——前提是你的数据管道得够快、够稳。

我最早接触做市商系统是在2016年,当时帮一家自营交易公司搭建高频数据链路。那会儿大家还在用RabbitMQ硬扛行情数据,结果呢?每秒10万笔的行情一来,队列直接打满,交易员拍桌子骂娘。嗯,从那以后我就明白了一个道理:数据管道不是辅助系统,它就是做市商的生命线

1.1 做市商业务背景:为什么数据管道如此关键?

做市商的核心业务很简单:同时挂出买单和卖单,赚取买卖价差。但实际操作起来,远比想象中复杂。

你想想看,一个做市商系统要同时处理:

  • 行情数据:来自交易所的实时价格、深度、成交量
  • 订单数据:自己挂的单、撤的单、成交回报
  • 风控数据:仓位、资金、风险敞口
  • 策略信号:定价模型算出来的目标报价

这些数据流,每一条都必须在微秒级完成处理。为什么?

举个例子:你在Binance上做BTC/USDT的做市,挂了一笔买单在30000。突然行情跳水到29950,你的定价模型必须在几毫秒内更新报价。慢了?对手方直接吃掉你的老价格,你瞬间亏钱。

核心痛点:做市商的数据管道,本质上是在跟时间赛跑。谁延迟低,谁就能抢到最优价格;谁吞吐高,谁就能覆盖更多交易对。

我在项目中遇到过最极端的情况:某次行情剧烈波动,每秒产生超过50万笔行情更新。如果管道设计不当,数据积压、系统雪崩、最终导致巨额亏损。说白了,数据管道的质量,直接决定了做市商的生死

1.2 数据管道的定义与价值:它到底是什么?

数据管道,用大白话说就是:把数据从源头搬到目的地,中间可能还要洗一洗、算一算、存一存

但在做市商场景下,这个定义要更精确:

维度 传统数据管道 做市商数据管道
延迟要求 秒级到分钟级 微秒到毫秒级
吞吐量 MB/s GB/s
数据一致性 最终一致 强一致(订单数据)
容错机制 重试+死信队列 主备切换+内存快照

它的价值体现在三个层面:

  1. 业务层面:让做市策略能「看到」真实的市场状态,做出正确报价
  2. 技术层面:解耦各个子系统,让行情、订单、风控各自独立演进
  3. 运维层面:提供可观测性,出了问题能快速定位

我记得有一次线上事故,行情源突然断连。因为管道设计时做了多源冗余,系统自动切换到备用行情源,交易员甚至没察觉到异常。这就是数据管道的价值——让灾难变得「无感」

1.3 核心设计目标:低延迟、高吞吐、可扩展

这三个目标,是做市商数据管道的「不可能三角」。为什么这么说?

低延迟:数据从产生到消费,端到端延迟控制在10微秒以内。这要求:

  • 避免网络传输(尽量用共享内存或RDMA)
  • 减少序列化开销(用FlatBuffers代替JSON)
  • 零拷贝技术(内核旁路)

高吞吐:单节点每秒处理百万级消息。这要求:

  • 无锁数据结构(比如Disruptor RingBuffer)
  • 批量处理(攒一批再发,减少系统调用)
  • 异步非阻塞IO(epoll、io_uring)

可扩展:支持水平扩展,加机器就能扛更多流量。这要求:

  • 无状态设计(每个节点都能独立处理)
  • 分区机制(按交易对或策略分片)
  • 动态路由(新增节点自动发现)

避坑指南:我曾经在一个项目里,为了追求极致低延迟,把所有逻辑都塞进单线程。结果行情量翻倍后,单线程CPU打满,延迟反而飙升。后来我学乖了——低延迟和高吞吐需要平衡,不能走极端

这三个目标之间其实有冲突:

  • 要低延迟,就得减少批处理大小,但会降低吞吐
  • 要高吞吐,就得加大批处理,但会增加延迟
  • 要可扩展,就得引入分布式协调,但会增加延迟

那怎么办?我的经验是:分层设计。把数据管道拆成两层:

  • 快路径:处理核心行情和订单,追求极致低延迟,不做持久化
  • 慢路径:处理风控、日志、统计,追求高吞吐和可扩展

这样,快路径扛实时压力,慢路径保证数据完整。两全其美。

1.4 知识体系总览

下面这张图,是我做数据管道设计时最常用的框架。它把整个管道拆成了四个层次,每一层都有明确的目标和关键技术。

做市商数据管道核心架构 数据源层 交易所行情 | 订单回报 | 风控信号 | 策略指令 传输层 共享内存 | RDMA | TCP/UDP | 零拷贝 处理层 数据清洗 | 行情聚合 | 订单路由 | 风控校验 存储层 内存数据库 | 时序数据库 | 日志存储 | 快照 数据流方向 核心目标:低延迟(微秒级) | 高吞吐(百万级/秒) | 可扩展(水平扩容)

这张图我用了好多年,每次做新项目都拿它当模板。你仔细看:每一层都只做一件事,层与层之间通过明确定义的接口通信。这样,哪一层出了问题,改那一层就行,不影响其他层。

个人建议:刚开始设计数据管道时,别想着一步到位。先搭一个「能跑」的版本,把数据源到存储的链路打通。然后再逐步优化延迟和吞吐。我见过太多团队,花三个月设计完美架构,结果上线第一天就崩了——因为没考虑实际网络抖动。

好了,这一章我们聊了做市商数据管道的背景、定义和核心目标。下一章,我会深入讲解数据管道的分层架构设计,包括每一层具体用什么技术、怎么选型、有哪些坑要避开。


公众号:蓝海资料掘金营,微信deep3321