Yandex、データ高速化技術を公開
Yandex Open-Sources YaFF: A Zero-Copy Wire Format for Protobuf With Near-Struct Read Speed

Yandexが、データ処理を劇的に速くし、コンピューターの負担を10〜20%削減する新しい技術「YaFF」をオープンソースとして公開しました。
TLDR YaFFはYandexがオープンソース化した、Protobuf向けのゼロコピーワイヤーフォーマットです。Apache 2.0ライセンスで、現在はC++版v0.1.0が提供されています。.protoファイルは真実の情報源として維持され、物理的なメモリレイアウトのみが変更されます。Yandexのベンチマークでは、Flat Layoutはホットデータ(頻繁にアクセスされるデータ)をFlatBuffersより約3.8倍速く読み込み、生のC++ structの1.2倍の速度に収まっています。Fixed、Flat、Sparse、Dynamicの4つのレイアウトがあり、読み込み速度とスキーマの柔軟性をトレードオフします。Dynamicがデフォルトです。YaFFはYandexの広告レコメンデーションシステムで稼働しており、本番環境の規模でCPU使用量を10〜20%削減したと報告されています。導入は段階的に行えます。まず一つのホットパス(処理負荷の高い部分)に導入し、その境界でProtobufとの双方向変換を行います。YandexはYaFF (Yet another Flat Format) をApache 2.0ライセンスでオープンソース化しました。これは高性能なC++シリアライゼーションライブラリです。YaFFはProtobufエコシステム向けにゼロコピーワイヤーフォーマットを提供します。あなたの.protoファイルは単一の真実の情報源として維持されます。このフォーマットは、データがメモリ内でどのように配置されるかのみを変更します。サーバーサイドのランタイムに重点を置いています。YaFFとは何か YaFFはProtobufの代替品ではありません。Protobufメッセージの代替ワイヤーフォーマットです。同じ.protoスキーマから、Protobufに似たC++ APIが生成されます。読み込みにパース(解析)のステップは不要なため、フィールドはバッファから直接取得されます。パフォーマンスにそれほど敏感でないコードは、ワイヤーフォーマットをProtobufメッセージにパースし直すことも可能です。この双方向変換があるため、モジュールごとの段階的な導入が現実的になります。一つのホットパスにYaFFを導入し、残りの部分はProtobufのままにできます。YaFFが解決する問題 Protobufのパース処理は、高負荷のバックエンドでCPU使用率の二桁パーセンテージを占めることがあります。大規模なシステムでは、これは数千の物理コアに相当します。一般的なゼロコピーの選択肢は、同じくGoogle製のFlatBuffersです。しかし、FlatBuffersはProtobufのドロップイン(そのまま置き換えられる)ではなく、別途スキーマと変換レイヤーを維持する必要があります。FlatBuffersはProtobufと意味的に互換性がありません。移行するには、スキーマの重複、異なるスキーマ進化ルール、手書きのフィールドコンバーターが必要になります。多くのチームは、そのコストが見合わないと結論付けています。YaFFはそのギャップ、つまりゼロコピー読み込みを狙っています。
この記事について質問
記事の内容に答えます。記事外のことは都度ウェブで調べます。