7 ポイント 投稿者 GN⁺ 2023-10-19 | 1件のコメント | WhatsAppで共有
  • Reflectは、Figma、Notion、Google SheetsのようなマルチプレイヤーWebアプリケーションを構築するための新しいフレームワークです。
  • これは、クライアント側同期フレームワークであるReplicacheの発展版であり、マルチプレイヤーアプリの開発をより簡単にするためにフルマネージドのサーバーを追加しています。
  • Reflectは今回、初めて一般公開されました。
  • このフレームワークは、共同編集における競合解決の問題を扱い、すべてのユーザーが同じ内容を見られるようにし、競合が自然に解決されるようにします。
  • CRDTs(Conflict-Free Replicated Data Types)のようなWebエコシステムで人気のあるツールとは異なり、Reflectはビデオゲーム業界で広く使われているTransactional Conflict Resolution技術を使用します。
  • Reflectの独自の利点と違いは、この同期エンジンの中核的な選択から生まれています。
  • Reflectは、mutatorsと呼ばれるJavaScript関数を使って変更を実装し、mutatorが呼び出されるmutation recordを生成します。
  • Mutationはローカルで適用された後にサーバーへストリーミングされ、サーバーは到着時間に従ってmutationを線形化し、次の正規の状態を生成します。
  • Reflectは、動きの速いアプリケーションを処理でき、以前のものの確認を待っている間にもmutationを追加できます。
  • このフレームワークには、巻き戻し、フォーク、ブランチ作成が可能な高速データストアと、流入するmutationに追随できる高速なサーバー側ストレージが必要です。
  • Reflectのアプローチは高い汎用性があり、算術演算、リスト操作、高水準の不変条件の強制など、さまざまな処理に適しています。
  • Reflectのサーバーは権威的であり、mutationの結果を自ら再計算し、その結果をすべてのクライアントが確認できます。
  • このサーバー権限により、きめ細かな認証や、サーバー上での他のコード実行が可能になります。
  • Reflectはさらに、スキーマ検証やマイグレーションといった利点も提供します。
  • Reflectの同期戦略であるTransactional Conflict Resolutionは、シンプルで柔軟かつ強力であり、マルチプレイヤーアプリケーションを構築するうえで優れた選択肢です.

1件のコメント

 
GN⁺ 2023-10-19
Hacker Newsの意見
  • この記事は、ゲームスタイルの同期機能を備えたマルチプレイヤーWebアプリフレームワーク Reflect について議論している。
  • ホームページ上の Reflect デモはインタラクティブで、ユーザーがタスク完了に興奮を示しているように見え、とても興味深い。
  • Reflect はオープンソースではないため、中核インフラではオープンソースソフトウェアを優先する企業での採用が制限される可能性がある。
  • Reflect は以前 Replicache という名前で知られており、現在は高速な同期サーバーを含んでいる。
  • このフレームワークでは、ユーザーがシンプルで逐次的なコードで競合の処理方法を決められ、これは CRDTs と比べた優位点と見なされている。
  • Reflect のデータモデルとコーディングモデルは、そのシンプルさゆえに高く評価されている。
  • Reflect でリスト操作を実装する際の課題、特に複数ユーザーから同時に更新が行われるシナリオについての議論がある。
  • あるユーザーは Reflect で使われている紛らわしい用語を指摘し、ゲーム以外のソフトウェアでは「マルチプレイヤー」ではなく「マルチユーザー」を提案している。
  • CRDT ライブラリには変更を検証する中央権限が欠けていることが多いため、Reflect が認証をどのように処理するのかという疑問がある。
  • Reflect の戦略は、ゲーム開発で多数のエンティティの状態を同期するために使われる「決定論的同期」と比較されている。
  • Reflect が mutators のアップグレードをどのように処理するのか、またクライアントとサーバーの処理間で起こりうる不一致にどう対処するのかという質問が提起されている。
  • あるユーザーは、マルチプレイヤーエンジンで高頻度メッセージングを処理するにはブラウザ内で UDP プロトコルが必要だと述べ、TCP と WebSocket のオーバーヘッドを批判している。