← 返回文章列表
March 25, 2026
5 分钟阅读

Aeron:驱动半个HFT行业的消息传递系统揭秘

Aeron:驱动半个HFT行业的消息传递系统揭秘
#aeron
#hft
#低延迟
#消息传递
#java
#ipc
#raft
#金融

Aeron消息传递架构 Aeron:Media Driver、共享内存、三重缓冲日志——定义低延迟消息传递标准的架构。

谈到高频交易领域的消息传递系统,有一个名字在每次讨论中都会被提起——Aeron。由Martin Thompson及Real Logic团队(后来并入Adaptive Financial Consulting)开发,Aeron已成为在微秒决定一切的世界中数据传输的事实标准。

本文将逐一拆解Aeron的各个组件:Transport、Archive、Cluster和Sequencer。我们将深入了解其内部架构、核心优势,以及开始出现问题的地方。


概要

  • Aeron——面向低延迟应用的开源(Apache 2.0)消息传递系统
  • IPC延迟:通过共享内存约250纳秒往返
  • 吞吐量:每秒2000万+条消息
  • 四大产品:Transport(核心)、Archive(录制/回放)、Cluster(Raft)、Sequencer(全序)
  • 语言:Java(主要)+ C客户端(功能不完整)
  • 用户:数十家HFT公司、做市商和交易所

第一部分:Aeron Transport——一切的核心

架构:Media Driver

Aeron Media Driver

Aeron的核心组件是Media Driver。它是一个独立进程(或嵌入式库),负责管理所有数据传输。应用程序通过共享内存(/dev/shm中的mmap文件)与Media Driver通信。

┌──────────┐                    ┌──────────────┐                    ┌──────────┐
│ Publisher │ ── shm commands ─→│ Media Driver  │←─ shm commands ── │Subscriber│
│   (App)   │ ←─ shm responses─│  (process)    │─→ shm responses  │  (App)   │
└──────────┘                    │              │                    └──────────┘
                                │ Log Buffers  │
                                │ (data path)  │
                                └──────┬───────┘
                                       │
                                    Network
                                  (UDP/IPC)

核心数据结构:

  • ManyToOneRingBuffer(MPSC)——客户端向Media Driver发送命令
  • BroadcastTransmitter/Receiver——Media Driver向客户端发送响应
  • Log Buffers——用于数据的三重缓冲追加式日志
  • Position Counters——用于协调位置的原子计数器

Log Buffers:三重缓冲

Aeron中的数据通过Log Buffers传输——三个交替使用的term buffer。当一个缓冲区写满后,会切换到下一个(term rotation)。这使得publisher可以写入一个缓冲区,而subscriber同时从另一个缓冲区读取。

每个term buffer的大小从64 KB到1 GB不等,在创建Publication时固定。

协议

Aeron在UDP之上使用自定义wire protocol:

  • Data frames——带头部的实际数据(stream ID、session ID、term ID、offset)
  • Status Messages——流量控制(receiver报告其位置)
  • NAK——重传请求(receiver驱动)
  • Setup——连接建立
  • Heartbeat——活跃性检查

性能

公布的性能指标:

指标 数值
IPC(共享内存)RTT ~250纳秒
UDP单播RTT(裸金属) ~10微秒
UDP单播RTT(云端,AWS) <100微秒
吞吐量 >2000万条/秒
Aeron Premium(内核旁路)P99 39微秒
Aeron Premium P99.9 43微秒

这些数字令人印象深刻。但有一个关键点——它们是在Java上获得的,因此受到JVM相关因素的影响。


第二部分:Aeron Archive——录制与回放

Archive解决了将消息持久化到磁盘并支持从任意位置回放的问题。

工作原理

  1. Archive进程通过Aeron Transport订阅数据流
  2. 所有消息被写入分段文件存储到磁盘
  3. 需要时进行回放:Archive从已录制的数据创建新的Publication
  4. 客户端订阅回放流并接收历史消息

应用场景

  • 审计——监管机构要求保存所有消息
  • 故障恢复——新节点通过回放"追赶"领导者
  • 分析——回放数据流用于策略回测
  • 调试——重现精确的事件序列

第三部分:Aeron Cluster——Raft共识

Raft共识

Cluster是基于Raft共识的容错复制状态机。用于消息丢失不可接受的关键系统(撮合引擎、订单管理)。

工作原理

  1. Leader接收所有传入命令
  2. 通过Aeron Transport将每条记录复制到followers
  3. 多数节点确认后——记录被视为committed
  4. 已committed的记录被应用到状态机

特性

  • 自动leader选举和故障转移(<1秒)
  • 强一致性(通过leader实现线性化读取)
  • 热系统升级
  • 吞吐量:Raft共识下每秒数百万条消息

第四部分:Aeron Sequencer——统一事件排序

Sequencer是为资本市场优化的新产品(2025年)。

问题

在做市和交易所中,所有参与者看到相同的事件顺序至关重要。Sequencer提供全序排列(total ordering)——为所有消息建立统一的全局序列。

架构

  • 构建于Aeron Cluster之上
  • 分布式日志,复制到多台机器
  • 多读者——多个应用读取同一日志
  • 团队解耦——团队在统一排序框架内独立工作

局限性

Sequencer是Adaptive Financial Consulting的商业产品。闭源。继承了Cluster的所有弱点。


Aeron的弱点

JVM开销与GC暂停

尽管有诸多优点,Aeron存在一些根本性的局限:

1. JVM依赖

即使使用了off-heap内存,JVM safepoints仍会暂停所有线程。GuaranteedSafepointInterval=300000只是一个权宜之计,而非真正的解决方案。JIT预热在启动后的最初几分钟增加了不可预测性。

C客户端存在,但功能不完整——没有Archive,没有Cluster。

2. Media Driver开销

独立进程意味着通过共享内存的额外一跳。嵌入模式则绑定到JVM。两种情况都带来额外的不可预测性。

3. 固定的Log Buffers

三个term buffer,大小在创建时固定。没有自适应内存管理。太大则浪费内存;太小则频繁term rotation。

4. 没有原生内核旁路

网络仅支持UDP。不支持io_uring、DPDK、AF_XDP。Aeron Premium添加了内核旁路,但它是闭源付费产品。

5. SBE——独立依赖

XML schema、Java代码生成器、独立的构建步骤。没有语言内集成。

6. 没有零拷贝网络

数据从套接字复制到log buffer。在Linux 6.0+上,io_uring支持零拷贝发送/接收,但Aeron并未利用这一特性。


替代方案

项目 语言 优势 劣势
Aeron Java/C 成熟、经过验证、完整生态系统 JVM开销,开源版无内核旁路
ZigBolt Zig 20纳秒SPSC、零拷贝编解码器、无GC 年轻项目(v0.2.1)
Chronicle Queue Java 持久化,每天数十亿条消息 JVM GC,重量级
ZeroMQ C 简单API,多种传输方式 无可靠性层,无集群支持
DPDK C 极致性能 复杂,需要硬件支持

我们Marketmaker.cc开发了ZigBolt——基于Zig语言的开源Aeron替代方案。没有JVM,没有GC,具有comptime编解码器和20纳秒SPSC延迟。详情请参阅我们的ZigBolt文章


结论

Aeron是一个杰出的工程项目,为低延迟消息传递树立了标准。其架构设计(三重缓冲日志、基于NAK的可靠性、Raft集群)已成为行业典范。

但世界在不断前进。Zig和Rust等语言可以在没有JVM开销的情况下实现相同(甚至更好)的结果。通过io_uring和DPDK的内核旁路开启了纯UDP无法企及的可能性。而comptime代码生成使得独立的XML schema和Java代码生成器成为历史遗产。

Aeron将在数十家公司的生产环境中继续运行多年。但对于新项目,值得考虑替代方案——包括ZigBolt


参考链接:


引用

@article{soloviov2026aeron,
  author = {Soloviov, Eugen},
  title = {Aeron: 驱动半个HFT行业的消息传递系统揭秘},
  year = {2026},
  url = {https://marketmaker.cc/zh/blog/post/aeron-messaging-overview},
  description = {Aeron架构解析——Transport、Archive、Cluster、Sequencer。优势与劣势。}
}
免责声明:本文提供的信息仅用于教育和参考目的,不构成财务、投资或交易建议。加密货币交易涉及重大损失风险。

MarketMaker.cc Team

量化研究与策略

在 Telegram 中讨论
Newsletter

紧跟市场步伐

订阅我们的时事通讯,获取独家 AI 交易见解、市场分析和平台更新。

我们尊重您的隐私。您可以随时退订。