李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 后端
  3. 正文

Aeron详解

2026年8月13日 628 0 2

Aeron 是一个开源的高性能消息传输系统,由 Martin Thompson 和 Todd Montgomery 在 Real Logic 创建,目前由 Adaptive Financial Consulting 主导维护。它是电子交易领域用于低延迟消息传输与高可用集群的全球技术标准,GitHub 组织地址为 aeron-io/aeron。

一、定位与设计目标

Aeron 是一个面向 Java、C/C++ 的超高效消息传输库,设计运行在 UDP、Infiniband 等不可靠介质之上,提供有序消息传输和可选的可靠性保证(通过丢包重传)。它对低延迟通信有极致的追求,适用于高频交易、实时游戏、VOIP、视频流等实时性场景。Java 实现被设计为稳态运行时不产生垃圾对象,从而降低内存压力和 GC 负担。

支持语言:Java、C/C++、.NET。

二、三大核心产品

Aeron 项目由三个层次的产品组成:

Aeron Transport(传输层)——底层消息传输。为单播与组播提供安全的数据流,同时支持本机的 IPC 消息传输,可交付个位数微秒级的可预测延迟,吞吐量超过每秒 2000 万条消息。

Aeron Archive(归档层)——在 Transport 之上提供消息归档与回放。允许消息流以全速率持久化到磁盘,使断连的服务能够重新连接并可靠恢复而不丢失消息。支持从指定位置回放,支持将录制从一个进程复制到另一个进程(用于近实时备份)。归档可被清除、截断或做 CRC 校验。

Aeron Cluster(集群层)——用于构建高性能、内存式、容错的事务型服务框架,具有自动故障转移和 99.999 分位数据不丢失 SLA,故障切换在一秒内完成。

三、架构与核心组件

Aeron 由三部分组成:Media Driver(媒体驱动)、Client API(客户端 API)、Publication/Subscription 模型。

Media Driver(媒体驱动)

Media Driver 负责在活跃 publication/subscription 使用的介质(UDP 或 IPC)上收发数据。它设计灵活,可以配置为极致高性能低延迟,也可以运行在资源受限环境。虽然概念上类似分布式消息代理,但缺少许多 broker 的功能——最好把它视作与消息代理不同的东西。

Driver Conductor 接受 publisher/subscriber 的命令并编排 Media Driver 的行为,同时负责名称解析;Sender 管理数据在介质上的发送;Client Conductor 负责与 Driver Conductor 通信。

Media Driver 可以嵌入运行,也可以作为独立进程运行。目录建议放在 /dev/shm 下,并保证足够存储空间。Media Driver 通常运行在独立进程/线程中,应用发送消息的唯一开销就是写共享内存缓冲区,网络传输全部由 Media Driver 在后台完成。接收端只需轮询 subscription 内存缓冲区检查新消息。

消息模型

通信抽象为流(称为 Channel):publisher 创建 Publication 发送消息,subscriber 通过 Subscription 接收消息,多个 subscriber 可以监听同一个 publication。

Publication 是开发者向 Subscription 发送数据的主要 API。offer 和 tryClaim 两个方法都是非阻塞的。发送的数据会追加到本地 Log Buffer,Media Driver 异步地将数据通过指定介质发送出去。未被 spy 的 publication 只有当 subscription 就绪时才能发送数据(UDP 和 IPC 都是如此)。单条消息的最大长度受 MTU 限制,可以通过 maxPayloadLength() 查询。

典型消息流

Publisher → Publication → Media Driver → Channel → Subscription → Subscriber,整个过程无锁,保证低延迟。

Java 示例:

// 发布端
Aeron aeron = Aeron.connect();
Publication publication = aeron.addPublication("aeron:udp?endpoint=localhost:40123", 1);
UnsafeBuffer buffer = new UnsafeBuffer(new byte[256]);
buffer.putStringUtf8(0, "Hello Aeron!");
while (!publication.offer(buffer)) { /* 背压重试 */ }

// 订阅端
Subscription subscription = aeron.addSubscription("aeron:udp?endpoint=localhost:40123", 1);
FragmentHandler handler = (buf, off, len, hdr) -> System.out.println(buf.getStringUtf8(off, len));
while (true) { subscription.poll(handler, 10); }

四、传输方式

Aeron 支持多种传输介质:

  • UDP 单播 / UDP 组播——网络通信
  • IPC(共享内存)——同机进程间通信,延迟纳秒级
  • MDC(Multi-Destination-Cast)——在不支持 UDP 组播的云环境中,MDC 通过单播流模拟组播,允许发布应用向一个 MDC 地址发送一次,由多个订阅方共同监听

Channel 通过 URI 描述,例如 aeron:udp?endpoint=host:port 或 aeron:ipc。

五、Aeron Cluster 与 Raft

Aeron Cluster 是解决容错交易系统难题的方案:采用单线程状态机模型简化设计,避免了多线程域模型带来的竞态、死锁和调试复杂度。通过状态机复制实现容错——多副本并行运行,一份失败另一份可自动接管。Raft 共识算法负责协调状态机保持同步。

Aeron Cluster 实现 Raft 共识算法,提供日志复制,让多个节点保持相同状态,并通过自动领导者选举确保集群中始终只有一位 leader。Raft 主要是日志复制协议,因此 Aeron Cluster 用 Aeron Archive 来持久化日志。Consensus Module 是关键组件,它与 Archive 协调持久化消息,并向其他节点复制/确认消息,然后把消息投递给 Clustered Services——即开发者提供的应用逻辑。

共识过程:leader 计算大多数(至少半数)成员已经落盘的位置,发送给 followers 作为 CommitPosition(Raft 中的最新提交条目)。若某成员宕机,数据也至少存在另一成员上可恢复。leader 和 followers 随后可处理到 CommitPosition,将新提交的条目应用到复制状态机(即你的服务)。服务通过 Egress channel 响应客户端,只有 leader 的响应会被送出,followers 的响应被 Aeron Cluster 静默丢弃。

需要注意的权衡:Raft 客户端可能在 leader 故障时丢失数据。以 Artio FIX 引擎搭配 Aeron Cluster 构建交易系统为例,leader 故障期间用户 FIX session 发出的数据可能丢失。客户端实现必须做出决策——例如断开所有 FIX session 并提供协议验证订单/成交状态。

六、性能表现

在 AWS 2025/2026 基准测试中:

  • Aeron Transport Premium 可达到 29 微秒的往返延迟,Aeron Cluster Premium 可达到 98 微秒往返延迟。开源版本相比上代提升 70%(Transport)与 64%(Cluster)。Premium 相比开源版本仍领先 33%(Transport)与 29%(Cluster)
  • 在 100 万消息/秒时,Aeron Premium 依然维持 P99 延迟,内核旁路让 Premium 相比开源版本在高吞吐下 P99 延迟降低超过 50%

Google Cloud 测试:开源版 Aeron 消息传输往返时间 57 微秒,Premium 降至 18 微秒;吞吐从 80 万条/秒提升到 470 万条/秒。Aeron Cluster 开源版延迟 109 微秒,Premium 降至 36 微秒;吞吐从 25 万条/秒提升到 220 万条/秒(约 8.8 倍)。

当前版本 1.50.3(RabbitMQ 对比文中提到)Aeron 的 IPC 延迟在几百纳秒级,网络吞吐在商用硬件上超过每秒百万消息。

七、关键性能技术

  • 无锁设计——保证可预测的延迟与吞吐
  • 直接内存访问——利用堆外缓冲区,速度更快、减少 GC 停顿
  • 共享内存 IPC——同机走 /dev/shm,零拷贝
  • Mechanical Sympathy——与现代 CPU 缓存架构协同,避免伪共享等问题
  • 单写者原则——每个 Log Buffer 有明确写入者,避免竞争

八、与其他方案对比

Kafka 强在持久化与可伸缩性,适合分析管道,选择它是因为持久化和回放比超低延迟更重要;ZeroMQ 轻量灵活但缺少内建的可靠性与顺序保证;Chronicle Queue 强在低延迟磁盘持久化,适合事件溯源。关键差异在于:Aeron 即便在 100 万消息/秒下仍能保持微秒级延迟,而 Kafka 在超过每分区约 10 万消息/秒时延迟通常会显著下降。

九、典型使用场景

  • 高频/算法交易(订单簿、撮合引擎、市场数据分发)
  • 实时风控与信用检查
  • 低延迟微服务通信(替代 gRPC 于内部关键路径)
  • FIX 引擎(如 Artio)后端
  • 实时分析与遥测

十、生态与配套

  • Agrona——高性能数据结构库,Aeron 的基础依赖
  • SBE(Simple Binary Encoding)——配套的极致高效二进制序列化
  • Artio——基于 Aeron 的开源 FIX 引擎
  • aeron-rs——Rust 客户端(aeron-rs 实现客户端功能,需要下载/编译来自 real-logic/aeron 的 Media Driver。集成测试假设 aeronmd 可执行文件在 PATH 中)

十一、部署要点

推荐 Java 11 或更高版本;生产环境推荐 Linux,可利用高精度定时器与高级网络特性。推荐至少 8 个专用物理 CPU 核心。Archive 使用 NVMe SSD;ulimit 至少 65536;Media Driver 目录放在 /dev/shm 以利用共享内存;Aeron 缓冲区使用堆外内存,避免 JVM GC 暂停,以获得可预测的微秒级延迟。

十二、商业模式

Aeron 采用开源 + Premium 双轨:开源版本为 Apache 2.0 许可,Premium 版本提供内核旁路、更高吞吐等能力,由 Adaptive Financial Consulting 商业支持。

总结:Aeron 是把消息中间件"broker 化"和"低延迟"这两条历来对立的路走通的方案——它没有中心 broker,靠共享内存 + UDP 直连 + Raft 实现了微秒级延迟的可靠传输和秒级故障切换的容错集群,是当今电子交易基础设施的事实标准之一。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Aeron详解

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: Aeron JAVA MQ 消息
最后更新:2026年8月13日

岁月同一天 11 月 12 日

回望过去的今天,你在写什么

  • AI
    1 年前 2025年11月12日
    高性价比大模型部署实战:共绩算力 + QWEN-2.5-7B 从入门到生产全指南

    在大模型应用落地过程中,算力成本往往成为中小企业和个人开发者的核心痛点——传统云服务商单卡4090每小时费用高达数十元,…

  • AI
    1 年前 2025年11月12日
    深度拆解 MemGen:Agent 生成式隐式记忆框架的原理、源码与实战

    在智能体(Agent)的能力进化中,记忆系统是决定其“自进化”能力的核心——它需要像人类一样,在推理过程中动态调用、重构…

相关文章
  • SpringBoot整合Elasticsearch游标查询(scroll)2020年10月16日
  • 【收藏】Java问题排查相关工具工具箱2019年10月16日
  • 分代ZGC这么牛?底层原理是什么?2025年4月9日
  • Java设计模式-原型模式2020年1月10日
  • CPU飙高,系统性能问题如何排查?2020年10月9日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

  • HuoLv 2

    没看懂,有点太专业了 :9:

    macOSmacOSFirefox 153.0Firefox 153.0中国中国-河北-邢台
    2026年8月13日
    00 回复
    • 李锋镝博主

      @Huo 哈哈哈~谦虚了不是

      macOSmacOSChrome 151.0.0.0Chrome 151.0.0.0中国中国-北京
      2026年8月14日
      00 回复
  • 待到重阳日,还来就菊花。

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
    给主题增加了游客中心功能心气没了,干什么都不得劲给服务器加了WAF我觉得是时候公布我的导航网站了游本昌去世关于主题加载速度优化的一点儿小演进
    RocketMQ入门级教程 MySQL数据库之存储过程与存储函数 GPT-5.1深度测评:从智能升级到情感共鸣,AI交互的下一个里程碑 使用itext和freemarker来根据Html模板生成PDF文件,加水印、印章 WorkBuddy介绍 MySQL主键索引和普通索引的区别
    最近评论
    李锋镝 发布于 3 天前(11月09日) 我也刷到了,说是恶意引流的
    皮皮社长 发布于 3 天前(11月09日) 我刷到的,怎么是说剧本骗流量的?如果真的是用来骗流量,那真恶心。欺骗网友感情。
    李锋镝 发布于 3 天前(11月09日) 现在我这个是十个,其实也够用了
    老张博客 发布于 3 天前(11月09日) 雷池唯一不好的就是只能免费5个网站。
    fairy 发布于 6 天前(11月06日) 机器人快来我这里吧!
    标签聚合
    MySQL Theme WordPress Claude 架构 数据库 K8s Spring 日常 AI编程 IDEA 分布式 Redis JVM AI 多线程 SpringBoot SQL JAVA ElasticSearch
    友情链接
    • Honesty
    • sssr7844的博客
    • 懋和道人
    • lijie blog
    • 韩情脉脉
    • 林羽凡
    • 志文工作室
    • 哥斯拉
    • 知向前端
    • 彬红茶日记
    • 瓦匠个人小站
    • Mr.Sun的博客
    • 刘永博客
    • 搬砖日记
    • 老张博客
    • Serendipity
    • 韩小韩博客
    • 皮皮社
    • 九仞之行

    COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

    lifengdi.com 十年之约虫洞

    Domain age badge for lifengdi.com

    Theme Kratos-plus By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号