YandexがYaFFを公開、Protobuf向けゼロコピーフォーマット

YaFFとは何か、なぜ注目されているのか

Yandexといえば、ロシア発の大手テクノロジー企業として知られていますが、エンジニアリングの分野では長年にわたって独自の技術を積み重ねてきた会社でもあります。今回公開されたYaFFは、その社内で培われた高性能シリアライゼーション技術をオープンソースとして外部に提供するものです。

そもそもProtobufとは、Googleが開発したデータシリアライゼーションの仕組みで、サーバー間の通信やデータ保存に広く使われています。ただ、通常の使い方ではデータを「読む」たびに内部でデシリアライズという変換処理が走ります。読み取りの頻度が高いサービスでは、この処理が積み重なってCPUに少なくない負荷をかけることがあります。

YaFFはそこに着目した技術です。データをメモリ上に展開した状態のまま直接読めるゼロコピーの仕組みを採用することで、読み取りのたびに発生する変換処理をなくし、ネイティブのC++構造体に近い速度でフィールドにアクセスできるようにしています。

YaFFの仕組みと3つのレイアウト

YaFFの内部設計で面白いのは、用途に応じて3種類のレイアウトを使い分けられる点です。頻繁にアクセスされるホットなデータにはFlat Layoutを使い、フィールドの疎なオブジェクトやスキーマが変わりやすいケースにはSparse Layoutを選ぶことができます。そしてその二つをつなぐ中間的な位置づけとしてDynamic Layoutも用意されており、状況に応じて速度・メモリ効率・スキーマの柔軟性のバランスを調整できる設計になっています。

たとえば、毎秒数万件のリクエストを処理するAPIサーバーで、レスポンスに含まれる固定フィールドを高速に読みたい場面であればFlat Layoutが力を発揮します。一方で、スキーマが段階的に進化しているプロジェクトや、フィールドの多くがnullになるようなオブジェクトを扱う場合にはSparse Layoutが適しています。

また、mmap(メモリマップドファイル)との互換性があるため、ディスクから読み込んだデータをそのままゼロコピーで扱えるというのも、キャッシュを重視したシステムには嬉しいポイントです。

FlatBuffersとの違いはどこにあるか

ゼロコピーのシリアライゼーションライブラリといえば、GoogleのFlatBuffersがよく知られています。YaFFもゼロコピーという点では同じ方向性を持っていますが、その設計思想には明確な違いがあります。

FlatBuffersはゼロコピーを実現するために独自のスキーマ定義(.fbs)を使い、Protobufとは別のエコシステムを形成しています。一方YaFFは、既存の.protoスキーマをそのまま使い続けることを前提としています。つまり、すでにProtobufを使っているシステムに対して、スキーマを書き直すことなく物理レイアウトだけを最適化するという、補完的な位置づけで設計されているのです。

既存のProtobufメッセージとの双方向変換にも対応しているため、システム全体を一度に移行するのではなく、ボトルネックになっている箇所から少しずつ試すという進め方ができます。これはプロダクション環境でリスクを抑えながら導入したいエンジニアにとって、現実的な選択肢になりやすいと思います。

実際にどんな場面で役立つか

YaFFが特に効果を発揮しやすいのは、読み取りの頻度が極めて高いサービスです。たとえば、ランキングや推薦システムのように大量のエントリを高速にスキャンする処理、あるいはキャッシュサーバーからデータを繰り返し読み出すようなユースケースが代表的です。

C++でバックエンドを書いているチームが、CPUのプロファイルを取ったときにProtobufのデシリアライズが上位に現れているような状況であれば、YaFFを試してみる価値はあるでしょう。逆に、書き込みが主体のシステムや、Python・Goなどの他言語をメインで使っている環境には、現時点では直接は適用できないことも念頭に置いておく必要があります。

フリーランスへの影響

YaFFは技術的な対象が絞られているツールです。C++でバックエンド開発を受けているフリーランスエンジニアや、パフォーマンスチューニングを専門とするインフラ系の案件を手掛けている方には、実務に直結する可能性があります。特に、Protobufを使った高負荷なシステムの最適化をクライアントから依頼されているケースでは、提案のカードの一枚として知っておくと役立ちそうです。

一方で、Webサービスのフロントエンドやノーコードツールを中心に活動している方にとっては、今すぐ影響が出る話ではないかもしれません。ただ、Yandexのような大手がこうした低レイヤーの最適化技術をオープンソースで公開するのは、業界全体としてサーバーコストやCPU効率への関心が高まっている流れの一つとも読めます。クラウドのコスト削減をテーマにした案件に関わっている方は、背景知識として頭に入れておくと会話がしやすくなるかもしれません。

まとめ

YaFFはC++とProtobufを使っている方向けに作られた、実務寄りのオープンソースプロジェクトです。GitHub上でApache 2.0ライセンスで公開されているので、気になる方はリポジトリを覗いてみてください。C++バックエンドの開発や最適化に携わっている方は、まず小さなプロジェクトで試してみるのが良い出発点になると思います。

参考:元記事(MarkTechPost)

コメント

タイトルとURLをコピーしました