先日、Akkaの最新ドキュメントをチェックしてみたところ、何やら、Akka Remotingをリニューアルしているらしく、新版のコードネームは「Artery」というらしいです。
Akka Remoting (codename Artery)
ちなみに、従来の Akka Remoting は、Nettyを使って、実際のデータ転送部分は実現していました。
Artery では、このデータ転送部分の実装は、メッセージングライブラリである Aeron を使っており、この Aeron が Simple Binary Encoding (SBE) を使用しています。
Artery には、次のような特徴があります。
- TCP ではなく UDP ベースの実装
- 高スループット、低レーテンシー
- ユーザメッセージから内部制御メッセージを分離して安定性を向上させ、与えられたサブチャンネルを使った、ヘビーなトラフィック発生時の失敗の検知を抑制する
- 自由な配置
- 小さなメッセージによる干渉を避けるための大きなメッセージを使った分離されたサブチャンネルのサポート
- 小さなメッセージのためのオーバーヘッドを削減するための通信時のアクターパスの圧縮
- バイトバッファを直接使った高速なシリアライゼーション・デシリアライゼーションのサポート
- 実装の仕様のイベントによるユーザログを汚さない、実装の問題のデバッグを助けるための内蔵されたフライトレコーダー
- 大規模システムのローリングアップデートをサポートのための、Akkaのメジャーバージョン間で提供されるプロトコルの安定性
そして、 Artery で利用されている Aeron の特徴は、信頼性の低いメディアプロトコル上で動作することを前提としており、 UDP 以外でも、 InfiniBand なども想定されているようです。
また、実際の処理は、メディアドライバーという形で、プロトコル毎のサポートを実装しています。
現在は、 Java と C の実装があり、今回見つけることができませんでしたが、FPGA版もあるようです。
次に、 Aeron で利用されている SBE の特徴は次のようなものになります。
- 低レイテンシー
- Protocol Buffers よりも 16〜25倍高いスループット
- Java、C++、.NETの実装