Aeron:驅動半個HFT行業的訊息傳遞系統揭秘
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。优势与劣势。}
}
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.