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。它是一个独立进程(或嵌入式库),负责管理所有数据传输。应用程序通过共享内存(/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解决了将消息持久化到磁盘并支持从任意位置回放的问题。
工作原理
- Archive进程通过Aeron Transport订阅数据流
- 所有消息被写入分段文件存储到磁盘
- 需要时进行回放:Archive从已录制的数据创建新的Publication
- 客户端订阅回放流并接收历史消息
应用场景
- 审计——监管机构要求保存所有消息
- 故障恢复——新节点通过回放"追赶"领导者
- 分析——回放数据流用于策略回测
- 调试——重现精确的事件序列
第三部分:Aeron Cluster——Raft共识

Cluster是基于Raft共识的容错复制状态机。用于消息丢失不可接受的关键系统(撮合引擎、订单管理)。
工作原理
- Leader接收所有传入命令
- 通过Aeron Transport将每条记录复制到followers
- 多数节点确认后——记录被视为committed
- 已committed的记录被应用到状态机
特性
- 自动leader选举和故障转移(<1秒)
- 强一致性(通过leader实现线性化读取)
- 热系统升级
- 吞吐量:Raft共识下每秒数百万条消息
第四部分:Aeron Sequencer——统一事件排序
Sequencer是为资本市场优化的新产品(2025年)。
问题
在做市和交易所中,所有参与者看到相同的事件顺序至关重要。Sequencer提供全序排列(total ordering)——为所有消息建立统一的全局序列。
架构
- 构建于Aeron Cluster之上
- 分布式日志,复制到多台机器
- 多读者——多个应用读取同一日志
- 团队解耦——团队在统一排序框架内独立工作
局限性
Sequencer是Adaptive Financial Consulting的商业产品。闭源。继承了Cluster的所有弱点。
Aeron的弱点

尽管有诸多优点,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。
参考链接:
- Aeron GitHub: github.com/real-logic/aeron
- Aeron Wiki: github.com/real-logic/aeron/wiki
- Martin Thompson(创始人): mechanical-sympathy.blogspot.com
- ZigBolt(我们的替代方案): 文章 | 网站
- Marketmaker.cc: marketmaker.cc
引用
@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
量化研究与策略