テクノロジーコミュニティでは、アクターモデルプログラミングを一般の開発者に提供する新しいシステム Rivet Actors について、特に Cloudflare の Durable Objects や Erlang のような従来のアクターシステムとの比較を中心に活発な議論が行われています。
アーキテクチャと状態管理
Rivet Actors は、 FoundationDB を活用した高度な状態管理システムを実装し、RPCコール後の自動的な状態永続化を提供します。このシステムは、開発者に _state
プロパティを通じて簡素化された状態管理アプローチを提供し、明示的な状態管理コードを必要とせずに単純な JavaScript 操作を可能にします。この実装は、アクター間通信におけるの一貫性保証とトランザクション処理に関する議論を引き起こしています。
KV APIを直接使用する場合、これは正しい動作です。アクターには
this._state
プロパティもあり、RPCコール後に変更された場合は自動的に FDB に書き込まれます。これにより、開発者は状態の書き込みやそれに関連するエッジケースを気にすることなく、this._state.count += 1
のような標準的な JS コードを記述して、迅速にプロトタイプを作成することができます。」
コア技術:
- ランタイム: V8 および Deno
- 状態ストレージ: FoundationDB
- OLTP: CockroachDB
- モニタリング: ClickHouse
- キャッシング: Valkey
- メッセージバス: NATS
- ロードバランシング: Traefik
ユースケースとパフォーマンス
コミュニティメンバーは、高い競合性と強い一貫性が必要なシナリオにおける Rivet Actors の実用的な適用例を強調しています。これには、共同文書編集、CRDTシンクを使用したローカルファーストアプリケーション、ステートフルなマルチプレイヤーゲーム、チャットシステムなどが含まれます。特に注目すべき点は、未使用時に自動的にスケールダウンする機能で、これは Improbable のメタバースバックエンドなどの類似システムで問題となっていた運用コストの課題に対応しています。
主要なユースケース:
- コラボレーション型アプリケーション
- ローカルファースト型アプリ
- AI エージェント
- ゲームサーバー
- チャットアプリケーション
- CRDT 同期およびストレージ
- レート制限
- スケジューリングシステム
Rivet Actors の GitHub リポジトリを紹介し、リアルタイムアプリケーションにおけるコラボレーション機能を強調しています |
開発者エクスペリエンスと言語サポート
議論の重要なポイントは、 Rivet がアクターモデルプログラミングを一般の開発者にとってより身近なものにするアプローチです。一部のコミュニティメンバーは Erlang/Elixir に同様の機能が存在することを指摘する一方で、 TypeScript のようなメインストリームな言語をサポートする Rivet のアプローチを評価しています。これにより、従来のアクターシステムと現代的な実装との間のトレードオフに関する幅広い議論が生まれています。
技術的進化
2023年の Hacker News での以前の議論以降、 Rivet は、オーケストレーション層の完全な書き直し、分離ランタイムの立ち上げ、セルフホスティング機能の改善など、大きな変更を経験しています。コミュニティは特に、 Nomad のような従来のオーケストレーションツールを独自のワークフローエンジンに置き換えたことなど、これらの開発に強い関心を示しています。
これらの議論から、合理的な運用コストと開発者のアクセシビリティを維持しながら、従来の分散コンピューティングパラダイムと現代の開発ニーズの間のギャップを埋めることができるアクターモデルシステムへの関心が高まっていることが分かります。
参考:Rivet: Run and scale real-time applications with Rivet Actors