これが私の問題です:
私のアプリケーションは、Web アプリケーション用の分散リアルタイム メッセージ ブローカーです。Web ブラウザーからのクライアントは、アプリケーション ノードの 1 つに接続します。ZeroMQ PUB/SUB メカニズムによって接続されたノード。1 つのクライアントがメッセージを送信すると、ノードはそれを PUB ソケットにパブリッシュし、他のノードはそれらのメッセージを SUB ソケットから受信し、接続されている独自のクライアントに送信します。
しかし、今はプレゼンスと履歴機能が必要です。プレゼンス - (すべてのノードに) 接続されているすべてのクライアントの説明を含むリストを提供します。履歴 - 最近送信されたいくつかのメッセージのリストを提供します。つまり、アプリケーションの状態全体を取得する必要があります。私はそれを達成するためにいくつかの方法を考えています:
1) 接続されたクライアントに関するすべての情報を中央サーバーに送信します。次に、クライアントがプレゼンスを要求すると、中央サーバーに要求し、応答をクライアントに返します。
2) すべての情報をすべてのノードに保持します。クライアントが任意のノードに接続すると、それに関する情報を他のノードに送信します - PUBLISH 操作を使用します。そのため、クライアントがプレゼンスを要求すると、すぐに応答を返すことができます。
3) すべてのノードから必要に応じて情報を収集します。現時点ではこれをどのようにプログラムするか想像できませんが、これにより重複する情報を取り除くことができ、メモリ消費の削減につながります。この場合、すべての情報をメモリに収めることについて心配する必要はありません。
4) Doosrdのような分散データ ストアを使用します。しかし、余分な依存関係があるため、このアイデアは好きではありません。
クライアントは、ノードへの接続ごとにプレゼンス情報を必要とし、クライアントの接続/切断ごとにプレゼンス情報が変更され、メッセージごとに履歴情報が変更されます。
これはオープンソースのアプリケーションであるため、接続されたクライアントの数をサポートする必要があるかどうかはわかりません。最終的にロード テストを実行すると、この数値が表示されます。
これらのプレゼンスおよび履歴データの信頼性について、強い要件はありません。
私は本当にあなたのアドバイスが必要です.これらのオプションのどれが私の問題を解決する正しい方法ですか. または、別のより良い方法がありますか?