以下のプロジェクトに最適なアーキテクチャを設計したいと考えています。ユーザーがデータを共有する他のユーザーとの間で通知を送受信できる任意のデバイス(デスクトップ、モバイルなど)でアプリケーションを実行しています。ストリーミングデータアーキテクチャ
基本的に、ユーザーは自分がアプリケーションで行っていることを他のユーザーと共有することができ、他のユーザーは変更のリアルタイムで通知を受けることができます。また、ユーザーは他のユーザーが許可している通知のみを受け取ることができます。
たとえば、ユーザーが画面上のウィジェットを移動すると、アプリケーションは新しいウィジェットの位置を保存し、画面上で変更を行うためにこの新しい位置をリアルタイムで他のユーザーに通知する必要があります。この必要性のために、パブリッシュ・サブスクライブ・パターンを持つイベント駆動型アーキテクチャーが見えます。しかし、アプリケーションが例えばウィジェットを共有するためのユーザのリストを取得する必要があるときにも、同期要求 - 応答パターンを処理する必要があると思います。
私はストリーミングデータアーキテクチャが記述されているStreaming Data book by Manningを簡単に見ましたが、この種のアーキテクチャが私のニーズに合っているかどうかはわかりません。実装部分の1つの違いの1つは、イベントソースプロデューサがアプリケーション内のイベントコンシューマでもあるということです(本の中では、イベントソースプロデューサは別のパブリックストリーミングAPIであり、実際のアプリケーションは唯一のコンシューマです)
私の考えは、データの取り込みとデータアクセスのためのWebSocket、メッセージリポジトリとしてのブローカのようなカフカ、そしてカフカのトピックを消費し、DBにデータを保存する別の分析サービスという本が少し続くと思います。データ取り込みとデータアクセスの両方にWebSocketを1つしか使用できない場合、1つの質問があります。
これらのニーズを満たすために使用する詳細なアーキテクチャとツールはありますか?
実装では、クライアント部分のjavascriptとサーバー部分のJavaを考慮します。
複数のユーザーがGoogleドキュメントのように同じ画面を編集できますか?または、特定の画面の「ライター」で、他のすべてが「読者」だけであるユーザーは1人だけですか? –
@AdiLevinすべてのユーザーが編集できます。 – rico