Aeron:高效可扩展的单播、多播消息传递工具

Aeron

Aeron是一个可靠高效的UDP单播、UDP多播和IPC消息传递工具。性能是消息传递中的关键。Aeron的设计旨在达到高吞吐量、低开销和低延迟。Aeron采用简单二进制编码(SBE),力求达到更好的消息编解码性能。

更多详细信息请参考Wiki,那里提供了使用说明、协议、FAQ等信息。

喜欢通过视频学习的朋友,可以观看StrangeLoop 2014上的Aeron Messaging。该视频虽然时间有点早,但是基本设计没有太大变化。现在的版本在性能上有所提升,并加入了一些新功能。

有关最新版本的变更信息和说明可以查看Change Log

最新的发布版本可以从Maven中央仓库下载

如何使用Aeron?

  1. Java编程指南
  2. C++11编程指南
  3. 最佳实践指南

Aeron工作机制

  1. 协议
  2. 设计概述
  3. 设计原则
  4. 控制流语义
  5. 多媒体驱动操作

如何成为Aeron黑客?

  1. 成为Aeron黑客
  2. 性能测试

协议

Aeron基于Apache 2.0开源协议发布。

目录结构

客户端API及常用类

示例

多媒体驱动

构建

Java构建

构建Aeron需要:

首先要把Agrona添加到本地maven仓库,构建并安装:

编译安装Agrona后,可以开始构建Aeron。

执行下面命令清理并构建所有模块:

C++构建

构建Aeron C++ API需要:

  • CMake 2.8.4或更高版本
  • 支持C++11的编译器
  • 构建HdrHistogram_c需要的条件。HdrHistogram同时依赖clang和zlib.h。

注意:Aeron支持Linux、Mac和Windows。Windows编译仅支持Visual Studio 2013和2015的64位版本。Cygwin、MSys等其他平台也可以编译,但目前已不再维护。

下面的脚本可以执行全部清理、构建和发布版本的测试工作:

如果喜欢CMake,可以用下列命令进行全部清理、构建和测试:

如果你安装了doxygen并且需要构建Doxygen文档,可以执行下面的命令:

如果需要将编译后的API打包,可以使用CPack打包package目标。之前打包过的文档会直接加入打包文件中。创建的打包文件格式为“TGZ;STGZ”,可以通过运行cpack命令修改:

运行示例

建立多媒体驱动会创建数据和构造器目录。在Linux中,可能位于/dev/shm/aeron/tmp/aeron目录。

当然,也可以指定数据和构造器目录。下面的例子中,使用了Linux上的共享内存’directory’,也可以指定为普通的文件系统。

可以在命令行运行 BasicSubscriber。在Linux上,会指向 /dev/shm 共享内存目录,所以请确保 MediaDriver 也进行了相同的配置!

可以在命令行运行 BasicPublisher 。在Linux上,会指向 /dev/shm 共享内存目录,所以请确保 MediaDriver 也进行了相同的配置!

在命令行中可以运行 AeronStat 工具读取系统计数器

多媒体驱动打包

多媒体驱动默认会打包到应用程序中,可以在下面的路径找到:

疑难问题

  1. 在Linux上,订阅者(subscriber) 示例会抛出异常 java.lang.InternalError(在编译的Java代码中,对unsafe内存访问造成的错误)

    该问题通常是因为磁盘空间不足。

    要避免出现该异常,请检查磁盘空间是否足够。

    在Linux上的示例代码中,(根据你的配置不同)可能会出现在 /dev/shm/aeron/tmp/aeron 目录下。

    可以在这个帖子中找到类似的问题。

    注意:如果在Linux Docker中运行请注意,在 /dev/shm 上Docker默认只分配64 MB共享内存。示例程序会迅速消耗掉这些内存。

    要避免这个问题,可以在Docker容器中 privileged 模式下执行下列命令:

    mount -t tmpfs -o remount,rw,nosuid,nodev,noexec,relatime,size=1024M tmpfs /dev/shm

    这样会将 /dev/shm 大小提高到1 GB。希望够用:)

开源地址:https://github.com/real-logic/Aeron

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

1 收藏

资源整理者简介:唐尤华

做自己喜欢的,编程、喝茶、看世界 个人主页 · 贡献了108个资源 · 18 ·    


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer