惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Privacy International News Feed
NISL@THU
NISL@THU
Know Your Adversary
Know Your Adversary
G
GRAHAM CLULEY
The Hacker News
The Hacker News
P
Privacy & Cybersecurity Law Blog
S
Schneier on Security
T
Troy Hunt's Blog
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
S
Security Affairs
WordPress大学
WordPress大学
T
Tailwind CSS Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
雷峰网
雷峰网
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
S
Securelist
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
有赞技术团队
有赞技术团队
爱范儿
爱范儿
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 三生石上(FineUI控件)
C
CERT Recently Published Vulnerability Notes
C
Cisco Blogs
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
Spread Privacy
Spread Privacy
Last Week in AI
Last Week in AI
S
Security @ Cisco Blogs
博客园 - 司徒正美
博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
罗磊的独立博客
博客园 - 叶小钗
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
J
Java Code Geeks
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位

博客园 - warm3snow

Loop Engineering — 从"写 prompt"到"设计循环",AI Agent 的下一次进化 Hermes 多角色实战:我做了一个智能投研系统 Claude Code 为什么放弃 RAG:用 grep 干代码搜索的真实架构 Agent Eval 最佳实践:从 Benchmark 到生产监控的完整落地指南 如何打造一支 AI 原生团队:5-7 人小团队的四步搭建指南 一份来自 Karpathy 的 AI 编程 skill 用 Backtrader 拆解量化交易:一周内你会真正理解的七件事 AI 写代码比你快 10 倍,你还剩什么?——读 mattpocock/skills 多方协作平台的领域模型:为什么必须是"联盟、租户、项目、任务"四层 从龙虾到爱马仕:一个老虾农的"叛逃"实录 读懂加密市场(五):进阶之路 读懂加密市场(四):交易者的内功 读懂加密市场(三):合约、DEX 与工具 读懂加密市场(二):建立你的认知框架 读懂加密市场(一):加密市场的游戏规则 读懂加密市场:系列总览 一张图看懂巴菲特 48 年投资帝国:知识图谱效果全展示 用 AI 构建巴菲特投资知识图谱:从 48 封公开信到可交互的投资智慧网络 「同事.skill」爆火:当 AI 学会"炼化"你的同事 在线支付系列(五):统一支付网关架构设计 在线支付系列(四):PayPal——一位海外买家的安全支付之旅 在线支付系列(三):Stripe & 信用卡——一件跨境商品的卡支付之旅 在线支付系列(二):支付宝 & 微信支付——一杯咖啡的扫码之旅 在线支付系列(一):一笔订单触发的支付之旅 Harness Engineering 最佳实践:从概念到落地的完整操作手册 Claude Code 源码泄露全复盘:51.2 万行代码裸奔,Anthropic 在同一个坑里摔了两次 数字货币交易所系列(四):DEX 深度解析——从 AMM 到链上订单簿,去中心化交易的技术与未来 数字货币交易所系列(三):安全、风控与监管——从 Mt.Gox 到 FTX,CEX 的信任是怎么建立(和崩塌)的?
数字货币交易所系列(二):CEX 核心技术架构——撮合引擎、钱包系统与充提链路的深度拆解
warm3snow · 2026-03-31 · via 博客园 - warm3snow

数字货币交易所系列(二):CEX 核心技术架构——撮合引擎、钱包系统与充提链路的深度拆解

导语

上一篇我们拆解了 CEX 的全部业务模块——现货、合约、理财、充提、Web3……产品线多到令人眼花缭乱。

但产品只是表层。一个 CEX 能不能用、好不好用、安不安全,最终取决于底层的技术架构。你点击"买入 BTC"的那一瞬间,背后至少涉及 5 个核心系统的协同工作:撮合引擎在微秒级完成订单匹配、钱包系统管理着数十亿美元的加密资产、充提系统监听着几十条公链的每一笔交易、清结算引擎实时计算保证金和盈亏、风控系统则在所有环节插了"安检门"。

这一篇,我们深入 CEX 的引擎盖下面——每一个核心技术模块是怎么设计的?为什么这么设计?面临哪些工程挑战?


一、整体架构概览

先看一张简化的 CEX 技术架构全景图:

┌────────────────────────────────────────────────────────────────┐
│                         用户接入层                              │
│    Web/APP │ REST API │ WebSocket │ FIX 协议(机构)            │
└──────────────────────────┬─────────────────────────────────────┘
                           │
                    ┌──────┴──────┐
                    │   API 网关    │  认证、限流、路由
                    └──────┬──────┘
                           │
        ┌──────────────────┼──────────────────────┐
        │                  │                      │
        ▼                  ▼                      ▼
┌──────────────┐  ┌──────────────┐  ┌────────────────────────┐
│  撮合引擎     │  │  账户系统     │  │     行情系统            │
│ Matching     │  │ Account     │  │  实时行情 / K线 /深度   │
│ Engine       │  │ Service     │  │  推送服务               │
└──────┬───────┘  └──────┬───────┘  └────────────────────────┘
       │                 │
       ▼                 ▼
┌──────────────┐  ┌──────────────┐
│  清结算引擎   │  │  风控引擎     │  ← 第三篇重点
│ Clearing &   │  │ Risk Control │
│ Settlement   │  │ Engine       │
└──────┬───────┘  └──────────────┘
       │
       ▼
┌──────────────────────────────────────────────────────────────────┐
│                        钱包与链交互层                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────────────┐   │
│  │  热钱包   │  │  温钱包   │  │  冷钱包   │  │  链上监听服务  │   │
│  │ Hot      │  │ Warm     │  │ Cold     │  │  Chain Scanner │   │
│  └──────────┘  └──────────┘  └──────────┘  └────────────────┘   │
└──────────────────────────────────────────────────────────────────┘
       │
       ▼
┌──────────────────────────────────────────────────────────────────┐
│                    区块链网络(BTC / ETH / SOL / L2 ...)          │
└──────────────────────────────────────────────────────────────────┘

核心系统一共六大块

系统 职责 性能要求
撮合引擎 接收订单、匹配买卖、生成成交 微秒级延迟、百万级 TPS
账户系统 用户资产管理、余额变更 强一致性、高并发
清结算引擎 盈亏计算、保证金管理、强平 实时计算、精度极高
行情系统 实时行情推送、K线聚合 低延迟、高吞吐
钱包系统 资产托管、充提执行 安全性第一
风控引擎 异常检测、交易限制、反洗钱 实时拦截、零漏判

下面逐一深入。


二、撮合引擎:CEX 的心脏

撮合引擎(Matching Engine)是整个 CEX 最核心的组件——它决定了谁的订单和谁成交、以什么价格成交、成交多少数量。

2.1 订单簿(Order Book)

订单簿是撮合引擎的核心数据结构。想象一个双向拍卖市场:

卖方(Ask / Sell)           价格        买方(Bid / Buy)
─────────────────           ─────       ─────────────────
                            101.5       50 BTC    ← 最佳买价(Best Bid)
                            101.0       120 BTC
                            100.5       200 BTC
───────────────────────── 买卖价差(Spread)= 0.5 ─────────────
80 BTC    ← 最佳卖价        102.0
150 BTC                     102.5
300 BTC                     103.0
  • 买单(Bid):按价格从高到低排列——出价最高的排最前面
  • 卖单(Ask):按价格从低到高排列——要价最低的排最前面
  • 价差(Spread):最佳买价和最佳卖价之间的差距,反映流动性好坏

2.2 撮合算法

主流 CEX 采用 价格-时间优先(Price-Time Priority) 算法:

  1. 价格优先:出价高的买单先成交,要价低的卖单先成交
  2. 时间优先:同一价格的订单,先到的先成交(FIFO)

一笔市价买单的撮合过程:

用户提交:市价买入 100 BTC

订单簿卖方:
  102.0  →  80 BTC
  102.5  →  150 BTC
  103.0  →  300 BTC

撮合过程:
  Step 1: 吃掉 102.0 的 80 BTC  →  剩余需求 20 BTC
  Step 2: 吃掉 102.5 的 20 BTC  →  需求满足,撮合完成

成交结果:
  80 BTC @ 102.0 = 8,160
  20 BTC @ 102.5 = 2,050
  平均成交价 = 10,210 / 100 = 102.1

2.3 数据结构:红黑树 vs 跳表

订单簿的每个价位是一个价格层级(Price Level),每个层级下挂着该价位的所有订单队列。核心操作是:

  • 插入订单:O(log N)
  • 删除订单(成交/撤单):O(log N)
  • 查找最优价格:O(1) 或 O(log N)

两种主流实现:

数据结构 插入/删除 查找最优价 特点
红黑树(Red-Black Tree) O(log N) O(log N) 平衡性好,实现成熟
跳表(Skip List) O(log N) 期望 O(1) 可优化 并发友好,实现简单

实际生产环境中,很多交易所采用分层设计

  • 热门交易对(BTC/USDT):用内存中的定制化数据结构,预分配价格槽位,接近 O(1) 操作
  • 长尾交易对:用通用的红黑树或跳表

2.4 性能优化:百万级 TPS 是怎么做到的?

头部交易所宣称的撮合性能:

交易所 宣称性能
Binance 每秒 140 万笔订单
OKX 每秒 10 万笔撮合
Coinbase 未公开,但支撑数百亿日交易量

关键优化手段:

1. 单线程撮合 + 无锁设计

这是最反直觉的一点——撮合引擎的核心路径通常是单线程的。为什么?

因为订单簿的状态必须严格有序(价格-时间优先)。多线程并发修改会引入锁竞争,反而更慢。单线程 + 无锁队列(Disruptor 模式),避免了所有同步开销。

                    ┌──────────────┐
  订单流入 ──────►  │ Ring Buffer   │ ──────► 撮合线程(单线程)
 (多生产者)       │ (Disruptor)  │          │
                    └──────────────┘          ▼
                                         成交事件
                                           │
                              ┌────────────┼────────────┐
                              ▼            ▼            ▼
                         清结算        行情更新      账户变更
                        (多消费者异步处理)

2. 内存计算,避免 I/O

撮合过程全部在内存中完成,不涉及任何磁盘 I/O 或网络调用。订单簿的状态变更通过事件日志(Event Sourcing) 异步持久化——先撮合、后存储。

3. 分片(Sharding)

每个交易对独立一个撮合引擎实例,完全隔离。BTC/USDT 的撮合和 ETH/USDT 互不影响。

4. 内核绕过(Kernel Bypass)

高端场景下使用 DPDK(Data Plane Development Kit)或 RDMA 绕过操作系统内核,直接操作网卡收发数据包。网络延迟从微秒级压到纳秒级。


三、钱包系统:保管数十亿美元的"金库"

钱包系统是 CEX 安全性的核心——它管理着所有用户的加密资产。 历史上最大的交易所安全事件,几乎都发生在钱包环节。

3.1 冷/热/温三层架构

┌─────────────────────────────────────────────────────────┐
│                     钱包三层架构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌───────────┐    资产占比:~2-5%                       │
│  │  热钱包    │    连接:在线,直连区块链                  │
│  │ Hot Wallet │    用途:日常提币、小额出金                │
│  │           │    风险:最高(在线密钥可被攻击)           │
│  └─────┬─────┘                                         │
│        │ 定期补充                                       │
│  ┌─────┴─────┐    资产占比:~10-20%                     │
│  │  温钱包    │    连接:半在线,需人工审批触发             │
│  │Warm Wallet│    用途:热钱包补充、中等金额转账           │
│  │           │    风险:中等                             │
│  └─────┬─────┘                                         │
│        │ 人工审批 + 多签                                │
│  ┌─────┴─────┐    资产占比:~75-90%                     │
│  │  冷钱包    │    连接:完全离线(气隙隔离)              │
│  │Cold Wallet│    用途:大额资产长期存储                  │
│  │           │    风险:最低(物理隔离)                  │
│  └───────────┘                                         │
└─────────────────────────────────────────────────────────┘

核心原则:绝大部分资产放冷钱包,只有满足日常运营需要的极小部分放热钱包。

Coinbase 在其安全白皮书中透露,98% 的客户资产存储在冷钱包中。 Binance 的比例类似。

3.2 密钥管理方案对比

"Not your keys, not your coins"——但交易所怎么安全地管理数十万个地址的私钥?

方案 原理 优势 劣势
单签(Single Key) 一个私钥控制一个地址 简单 单点故障,密钥泄露即全部丢失
多签(Multi-Sig) N 个密钥中 M 个签名才能动钱(M-of-N) 消除单点故障 链上实现,Gas 成本高,跨链兼容差
MPC(多方计算) 私钥被拆分为多个分片,分布在不同设备/地理位置,联合计算签名但密钥从不完整出现 无单点故障、链上看是普通交易(Gas 低)、跨链通用 实现复杂、计算开销大
HSM(硬件安全模块) 专用硬件设备存储密钥,签名在硬件内完成 物理级安全 成本高、扩展性有限

当前趋势:头部交易所正在从多签迁移到 MPC。 原因是 MPC 在链上表现为普通交易(省 Gas),而且密钥分片可以跨地理位置分布,即使一个数据中心被完全攻破,攻击者也拿不到完整密钥。

2025 年 Bybit 被盗 15 亿美元 ETH 的事件,就是在冷钱包到温钱包的转账环节被攻破的——说明即使有冷钱包,转账流程的安全设计同样关键。

3.3 地址管理

一个头部交易所要管理的地址数量是惊人的:

  • 每个用户 × 每条支持的链 = 一个充值地址
  • 支持 500+ 币种、50+ 条链
  • 千万级用户 → 数亿个地址

地址分层管理:

根密钥(Master Key)
  │
  ├── HD 派生路径(BIP-32/BIP-44)
  │     m/44'/60'/0'/0/0  → 用户 1 的 ETH 充值地址
  │     m/44'/60'/0'/0/1  → 用户 2 的 ETH 充值地址
  │     m/44'/60'/0'/0/2  → 用户 3 的 ETH 充值地址
  │     ...
  │
  ├── 归集地址(Collection Address)
  │     用户充值后,资产归集到统一地址
  │
  └── 出金地址(Withdrawal Address)
        热钱包 → 用户提币目标地址

HD 钱包(Hierarchical Deterministic Wallet) 让交易所可以从一个根密钥派生出无限个子地址,而且只需备份根密钥。


四、充提系统:链上"收银台"

充提系统是 CEX 和区块链网络之间的桥梁。看起来简单的"充值到账",背后是一套精密的链上监听和资产管理流程。

4.1 充币流程

用户从外部钱包发起转账
         │
         ▼
┌─────────────────┐
│  区块链网络       │  链上交易广播
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  链上监听服务     │  扫描每一个区块
│  Chain Scanner  │  识别:是否有交易发到我们的充值地址?
└────────┬────────┘
         │  发现匹配交易
         ▼
┌─────────────────┐
│  确认数检查       │  BTC: 2-3 确认 ≈ 20-30 分钟
│  Confirmation   │  ETH: 64 确认 ≈ 13 分钟
│  Check          │  SOL: 1 确认 ≈ 0.4 秒
└────────┬────────┘
         │  确认数达标
         ▼
┌─────────────────┐
│  入账处理        │  增加用户账户余额
│  Credit         │  记录充值记录
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  资产归集        │  将分散在用户地址的资产
│  Consolidation  │  归集到交易所统一地址
└─────────────────┘  (节省 Gas + 便于管理)

关键挑战

  1. 链重组(Reorg)处理:区块链可能发生短暂的链重组,已确认的交易变成无效。所以需要足够多的确认数,且系统需要有重组回滚能力。
  2. 多链支持:50+ 条链,每条链的 RPC 接口、确认机制、交易格式都不同。需要为每条链开发适配器。
  3. 归集时机与 Gas 优化:以太坊 Gas 高时,小额充值的归集成本可能超过充值金额本身。需要智能调度——Gas 低时批量归集。

4.2 提币流程

用户发起提币请求
         │
         ▼
┌─────────────────┐
│  风控审核         │  金额检查、频率检查、地址黑名单
│  Risk Check     │  大额提币 → 人工审核
└────────┬────────┘
         │  审核通过
         ▼
┌─────────────────┐
│  余额扣减        │  冻结用户账户对应金额
│  Balance Lock   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  签名 & 广播     │  热钱包签名交易
│  Sign & Broadcast│  广播到区块链网络
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  链上确认追踪    │  追踪交易状态
│  Tx Tracking    │  确认成功 → 完成
│                 │  失败 → 重试或退款
└─────────────────┘

关键挑战

  1. Gas 管理:每条链的 Gas 费用实时波动。需要动态调整 Gas 价格——太低交易卡住,太高浪费成本
  2. Nonce 管理(以太坊系):每笔交易需要递增的 Nonce,并发提币需要严格的 Nonce 分配和重试机制
  3. 热钱包余额管理:提币量 > 热钱包余额时,需要自动触发温钱包补充流程
  4. 防重放:确保同一笔提币请求不会被执行两次

五、清结算引擎:谁欠谁多少钱?

清结算引擎是 CEX 的"会计系统"——每一笔成交后,谁的钱增加了、谁的钱减少了、保证金够不够、要不要强平,都由它来计算。

5.1 现货清结算

相对简单。Alice 用 10,000 USDT 买了 0.1 BTC:

Alice:   USDT -10,000  │  BTC +0.1
Bob:     USDT +10,000  │  BTC -0.1
交易所:  USDT +10 (手续费) │ BTC +0.0001 (手续费)

实时扣减,原子操作——要么全部完成,要么全部回滚。

5.2 合约清结算:复杂度指数级上升

合约交易的清结算涉及:

计算项 说明 频率
未实现盈亏(Unrealized PnL) 持仓的浮动盈亏 每次价格变动
已实现盈亏(Realized PnL) 平仓时的实际盈亏 每次平仓
保证金率 当前保证金 / 维持保证金 实时计算
资金费率结算 永续合约多空互付 每 8 小时
强制平仓(Liquidation) 保证金不足时自动平仓 实时触发
ADL(自动减仓) 极端行情下对手方盈利仓位强制减仓 极端行情触发

强平逻辑是最关键的部分。以逐仓为例:

维持保证金率 = 持仓价值 × 维持保证金率百分比

当:账户权益 ≤ 维持保证金
  → 触发强制平仓

强平价格(多头)= 开仓价格 × (1 - 1/杠杆 + 维持保证金率)
强平价格(空头)= 开仓价格 × (1 + 1/杠杆 - 维持保证金率)

例:100x 杠杆做多 BTC,开仓价 100,000
  强平价 ≈ 100,000 × (1 - 0.01 + 0.004) = 99,400
  → BTC 跌 0.6% 就爆仓

2021 年 5 月 19 日("519 事件"),BTC 在数小时内暴跌 30%,全网合约爆仓超过 80 亿美元。这对清结算引擎是极端考验——需要在极短时间内处理海量强平订单,同时防止"穿仓"(亏损超过保证金,交易所要自掏腰包)。

5.3 保险基金

为了应对穿仓,交易所维护一个保险基金(Insurance Fund)

  • 来源:强平订单在市场上成交时,如果成交价优于破产价,差额归入保险基金
  • 用途:当强平订单无法以优于破产价成交时,由保险基金补贴
  • 最后防线:如果保险基金也不够,就触发 ADL(自动减仓)——从盈利最多的对手方仓位中"借"

Binance 合约保险基金规模约 10 亿美元量级,OKX 约 5 亿美元量级。


六、高可用与容灾设计

CEX 是 7×24 小时运营的——不能停机,不能丢数据,不能算错钱。

6.1 核心设计原则

原则 实现
无单点故障 所有核心组件至少双活
数据不丢 事件溯源 + WAL(Write-Ahead Log)+ 异步复制
快速故障转移 主备切换 < 1 秒
降级能力 极端流量下可降级非核心功能(如行情推送频率)

6.2 撮合引擎高可用

撮合引擎是最不能挂的组件。典型方案:

┌────────────┐     事件流      ┌────────────┐
│ 主撮合引擎  │ ────────────► │ 备撮合引擎   │
│  (Active)  │               │ (Standby)  │
└────────────┘               └────────────┘
      │                            │
      │  所有输入事件同步复制         │
      │  备机重放事件,维持同步状态    │
      │                            │
      ▼                            ▼
  正常服务                    主机故障时接管
                             (状态已同步,< 1 秒切换)

关键点:不是简单的主备数据库复制,而是通过事件溯源(Event Sourcing)——备机完整重放所有订单事件,保持和主机完全一致的订单簿状态。 切换时无需任何数据恢复。

6.3 限流与熔断

极端行情时(如 BTC 暴跌 20%),交易量会在几分钟内暴增 10 倍以上。没有限流保护,系统必然崩溃。

策略 说明
API 限流 每用户每秒请求上限(通常 10-50 次)
订单频率限制 每交易对每秒下单上限
批量撤单保护 防止做市商瞬间撤掉所有流动性
熔断机制 价格在短时间内波动超过阈值,暂停交易 N 秒

七、数据流:一笔交易的完整生命周期

把上面所有系统串起来,看看"用户买 1 BTC"这一笔交易的完整链路:

1. 用户 APP 点击"买入 1 BTC"
   │
2. │→ API 网关:认证 + 限流 + 路由
   │
3. │→ 风控前置检查:余额是否充足?是否触发频率限制?
   │
4. │→ 账户系统:冻结 USDT(预扣保证金)
   │
5. │→ 撮合引擎:订单进入订单簿
   │    └→ 价格-时间优先匹配
   │    └→ 生成成交事件
   │
6. │→ 清结算引擎:计算双方资产变更 + 手续费
   │
7. │→ 账户系统:更新 Alice 和 Bob 的余额
   │
8. │→ 行情系统:更新最新价、深度、K线
   │    └→ WebSocket 推送给所有订阅者
   │
9. │→ 持久化:成交记录写入数据库 + 事件日志

总耗时(从订单到成交确认):< 5 毫秒(内部链路)

八、总结

CEX 的技术架构,本质上是在解决一个矛盾三角

         性能
        /    \
       /      \
    安全 ──── 一致性
  • 性能:撮合引擎要快到微秒级,行情推送不能有延迟
  • 安全:管着几十亿美元的资产,密钥管理不能有丝毫差错
  • 一致性:每一分钱都不能算错,清结算必须精确到小数点后 8 位

在这三者之间取得平衡,就是 CEX 技术团队每天在做的事情。

但技术架构只是防线的一半。另一半是——风控系统如何检测异常?安全事件发生时如何应对?监管框架如何约束交易所行为? 这些问题,我们下一篇来拆解。


下一篇:数字货币交易所系列(三)——安全、风控与监管:从 Mt.Gox 到 FTX,CEX 的信任是怎么建立(和崩塌)的?

关注公众号「coft」,获取更多 AI 时代的深度洞察和技术实战干货。