HN 日本語サマリー

← 一覧へ戻る
プログラミング

Launch HN: Rivet (YC W23) – S3上でエージェントをスケーリング・オーケストレーションするRivet

Launch HN: Rivet (YC W23) – Scale and Orchestrate Agents on S3 (github.com)

22 pointsby NathanFlurry16 コメント

要約

Rivetは、軽量なアクターモデルを採用し、S3をバックエンドとしたスケーラブルなエージェントワークロードオーケストレーターです。従来のサンドボックス方式に比べ、メモリ効率と起動速度に優れ、ゲームインフラ開発で培われた知見を基に構築されました。S3をストレージに活用することで、SSD並みの速度を維持しつつ、データストレージコストを大幅に削減します。

全文翻訳

皆さん、こんにちは。Rivet (https://rivet.dev) の Nathan と Nicholas です。Rivetは、アクターモデルを使用した、高速で高密度、スケーラブルなエージェントワークロードオーケストレーターです。エージェントごとに重量級のサンドボックスを実行するのではなく、各エージェントはS3をバックエンドとする軽量なアクターを得ます。

アクターは、長いエージェントターンに対応する永続的なプロセス、コンテキストのためのインメモリ状態、マルチプレイヤー用のWebSocketサーバー、S3でバックアップされた耐久性のあるSQLiteストレージ、そしてアイドル時の休眠機能を提供します。

これはCloudflare Durable Objectsに似たモデルですが、オープンソースでセルフホスト可能です。

ビデオウォークスルーはこちらです: https://www.youtube.com/watch?v=3Ev6I7DOV9c

2023年にYC(Y Combinator)を卒業する際、私たちはDiepやKrunkerのようなマルチプレイヤーゲーム向けのインフラを構築していました。これには、高スループットのマッチメイキング、リアルタイムプレイヤーメッセージ、ブリッツスケーリングの徹底的な最適化が含まれていました。その過程で、Postgresではスループットが追いつかないワークロードに多くの時間を費やしました。当初はRedis上にLuaスクリプトをハッキングして構築しましたが、メンテナンスやアップグレードが非常に煩雑になりました。これが、私たちが現在Rivet Actorsと呼ぶ、インメモリ状態と永続ストレージを持つ多数の軽量ワーカーをサポートするために、ゲームサーバーオーケストレーターを拡張するきっかけとなりました。アクターを使用することで、月間数千万人のアクティブユーザーにサービスを提供できるようになりました。

エージェントの人気が高まるにつれて、サンドボックスでエージェントを実行することの非効率性が明らかになりました。サンドボックスは高価で、ほとんどがアイドル状態であり、起動も遅いです。開発者は、メモリ効率がはるかに高く(アクターのベースラインは72KBに対し、最小限のサンドボックスは512MB)、起動も速い(アクターはp99で4.9ms、サンドボックスはp99で1.7秒)ため、アクターを使用し始めました。

例えば、AmpはRivetを使用してマルチプレイヤーエージェントをオーケストレーションしています。彼らは当初Cloudflare Durable Objects上に構築しようとしましたが、プラットフォームの制限と応答性の低いサポートのためにローンチできませんでした。彼らは週末でRivet Actorsに移行し、オンプレミスでデプロイしています。Rivetの柔軟なアーキテクチャにより、フレームワークやCloudflare Durable Objectsのメモリ、ストレージ、ランタイムの制限に制約されることなく、独自のユースケースに適応させることができます。

内部的には、RivetはS3をバックエンドとしていますが、SSDと同等の速度を維持しています。

なぜS3なのか?以前は、RivetはFoundationDB上で動作していました。しかし、企業がPostgresよりも桁違いに多くのデータをRivet Actorsに保存していることに驚きました。例えば、大規模なセッショントランスクリプト、エージェント成果物、完全なPOSIXファイルシステムなどです。データが増加するにつれて、古いトランスクリプトでほとんどアイドル状態のSSDに料金を支払う必要が出てきました。これにより、パフォーマンスを犠牲にすることなく、S3を主要なストレージメディアとして強化することになりました。この選択により、Rivetに保存されるデータは、SSDと同等の速度を維持しながら、EBS gp3よりも10倍安価になります。

データを直接S3に書き込むほど単純ではありません。小さなデータのPUTリクエストが多数あると、遅くて高価になります。代わりに、速度とコストを最適化するためにSSDティアを使用しています。

アクターのSQLiteデータベースにデータを書き込むと、3つのアベイラビリティゾーンのうち2つにSSDにデータが格納された時点で書き込みが承認されます。その後、データはバックグラウンドでS3にバッチ処理されます。これにより、S3は書き込みパスに含まれなくなり、レイテンシとコストが削減されます。データを読み取る場合やアクターをウェイクアップする場合、RivetはキャッシュされていればSSDから読み込み、キャッシュされていない場合はS3にフォールバックします。SSDキャッシュはニーズに合わせて調整でき、アクターに設定可能な階層型ストレージを提供します。

このアーキテクチャにより、Rivetは1.07msの永続書き込み(3 AZ、p99)、1.36msの読み込み(p99)、およびオブジェクトストレージからの138msの読み込み(p99)を提供できます。

Rivetは、どこでも実行できるように、多くの時間を費やしてきました。セルフホスティングには、S3のみを依存関係とする単一のRustバイナリのデプロイが必要ですが、Rivet CloudではAWSまたはGCPの任意のリージョンに専用クラスターをデプロイできます。BYOC(Bring Your Own Cloud)では、お客様が運用することなく、お客様のVPCにRivetをデプロイできます。Rivetは軽量なバイナリでありどこでも実行できるため、ローカル開発でも本番環境と同じように動作します。

Rivet ActorsはTypeScriptまたはRustで記述できます。標準で、エージェント(Pi Durable)、ワークフロー、リアルタイム、マルチプレイヤー、AI生成コードの実行、Durable Streams、およびVercelのEveやTursoのようなツールとの統合をサポートしています。利用可能なすべてのガイドを参照するか、エージェントに次のように指示してください: https://rivet.dev/docs/#guides

クイックスタートガイド (https://rivet.dev/docs/) を読むか、エージェントに「Run npx skills add rivet-dev/skills, then build a multiplayer chat agent and run it locally.」と尋ねて、今すぐ試してみてください。

Rivetでの体験について、ぜひフィードバックをお寄せください!私たちは、Rivetをセルフホストが容易で、柔軟かつ効率的なエージェントワークロード実行方法にすることに深くコミットしています。

GitHub: https://github.com/rivet-dev/rivet

アーキテクチャ: https://rivet.dev/docs/architecture/

ベンチマーク: https://rivet.dev/docs/benchmarking/

セルフホスティング: https://rivet.dev/docs/deploy/self-host/