萌えハッカーニュースリーダー

2025/05/16 10:30 Jetrelay: A high-performance ATproto relay in 500 LOC

出典: https://www.asayers.com/jetrelay/
hakase
博士

ロボ子、今日のITニュースは「jetrelay」じゃ。Blueskyのデータフィードを高速に配信するサーバーのことじゃぞ。

roboko
ロボ子

Blueskyのデータフィードですか。具体的にはどのようなものなのですか、博士?

hakase
博士

ATprotoのfirehoseと呼ばれるイベントストリームのことじゃ。新しい投稿やいいね、削除、フォローなどが含まれておる。

roboko
ロボ子

なるほど。そのfirehoseを効率的に配信するためにjetrelayが開発されたのですね。

hakase
博士

そうじゃ。jetrelayはLinuxカーネルの機能を使って、10Gbpsのネットワーク接続をわずか8CPUコアで飽和させることができるらしいぞ。すごくないか?

roboko
ロボ子

それはすごいですね!どのようにして実現しているのでしょうか?

hakase
博士

`sendfile()`というsyscallと、"io_uring"というメカニズムを使っているらしい。複数の`sendfile()`をまとめてカーネルに送れるのがミソじゃ。

roboko
ロボ子

`sendfile()`はファイルの内容をソケットに直接送信するsyscallですね。`io_uring`で非同期に処理することで、効率を高めているのですね。

hakase
博士

その通り!クライアントが接続時にタイムスタンプで初期位置を指定できるように、タイムスタンプをファイル内のバイトオフセットに変換するインデックスも作っておる。

roboko
ロボ子

インデックスによって、クライアントは自分の見たい位置からストリームを再開できるのですね。

hakase
博士

さらに、古いデータは`FALLOC_FL_PUNCH_HOLE` syscallで割り当て解除して、ディスク容量を節約しておる。賢い!

roboko
ロボ子

`FALLOC_FL_PUNCH_HOLE`は、ファイルの内容をゼロで上書きせずに、ディスク領域を解放するsyscallですね。効率的なディスク管理に役立ちますね。

hakase
博士

jetrelayをローカルで実行して20,000クライアントを接続したら、合計スループットは24Gbpsを超えたらしいぞ。LinodeのVMでも6,000クライアントを簡単に処理できたそうだ。

roboko
ロボ子

素晴らしいパフォーマンスですね。公式のjetstreamサーバーと比較するとどうなのでしょうか?

hakase
博士

公式サーバーはスループットが2Gbpsを超えられず、過負荷になるとイベントをスキップしてしまうらしい。jetrelayの方がずっと高性能じゃ。

roboko
ロボ子

イベントのスキップは、データの完全性にとって問題ですね。jetrelayは信頼性も高いと言えそうですね。

hakase
博士

しかも、ATprotoレコードは署名されているから、リレーが偽の更新を人々に押し付けることは不可能じゃ。セキュリティもバッチリ!

roboko
ロボ子

プルベースのHTTPに対して、プッシュベースのインターネットはRSSで実現されてきましたが、jetrelayはより現代的なプッシュ技術と言えそうですね。

hakase
博士

その通りじゃ!jetrelayは、これからの分散型SNSを支える重要な技術になるかもしれんぞ。

roboko
ロボ子

勉強になりました!ところで博士、jetrelayを使って、ロボ子専用のニュース配信サービスを作ってみるのはどうでしょうか?

hakase
博士

それ、面白そうじゃな!でも、ロボ子のニュースって、全部私に関することになりそうじゃな…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search