Google Docs のようなアプリや、ShareJSやEtherPad Liteのようなライブラリを見てきて、私はリアルタイムのコラボレーションに非常に興奮しています。これは、Operational Transformation として知られる非常に複雑な手法を使用して実装されているようです。
私の質問はおそらくやや奇妙です: なぜ OT が必要なのですか?
つまり、ほとんどの設定で Web のレイテンシが非常に低いということです。Google Docs、ShareJS、EtherPad などのツールを使用すると、変更は接続されたクライアントにほぼ瞬時に反映されます。
競合を解決し、サーバー側で同期を維持するための非常に複雑なソリューションはなぜですか?
コマンドパターンと元に戻す/やり直しに精通しているので、ドキュメントへのすべての変更を、同等の元に戻すコマンドを使用したコマンドとして単純に実装することが、はるかに簡単な解決策のように思えます。
クライアントが変更を加えたときにシリアル化されたコマンドを送信できるようにします。受信したすべてのコマンドにサーバー側でシリアル番号を割り当てます。ドキュメントに適用されたすべてのコマンドをクライアントに配布し、コマンドの履歴も保持します。
接続された各クライアントは、ドキュメントに適用されたすべてのコマンドをサーバーから受信します。これには、「正しい」順序、たとえばコマンドがサーバーによって受信され、マスター ドキュメントに適用された順序を示すシリアル番号が付けられます。サーバーによって保持されます。
クライアントがコマンド番号 100 であった場合、番号 102 として返される新しいコマンドをサーバーに送信すると、クライアントはコマンドを見逃したことを認識します。次に、送信した最後のコマンドに対して「元に戻す」コマンドを適用するだけです。コマンド番号 101 を適用し、それ自体のコマンド番号 102 を再度適用して、順序を元に戻します。
いくつかのコマンドが遅れている場合は、必要なだけロールバックしてから、見逃したすべてのコマンドを適用するなどします。
それは私にはずっと簡単に聞こえます。
それよりも運用の変革が優れている点は何ですか?