0

ASP.NET アプリケーションでSignalRを使用しています。私のアプリケーションが必要とするのは、さまざまなサーバーから更新されたグループ データをプレスすることです。SignalR のドキュメントによると、これを行うのは私の責任です。これは、1 つ以上のサーバーからデータを収集する外部サーバー/サービスを使用する必要があり、そのデータを 1 か所からクエリできることを意味します。

MemCachedは高速で、そこに格納する必要があるデータは揮発性であるため、最初はMemCachedが最適な候補であると考えました。問題は、コレクションを保存する必要があることです。たとえば、ユーザー ID を持つコレクション A を使用すると、2000 のユーザー ID を持つコレクション A と 40,000 の ID を持つコレクション B を持つことができます。問題は、このコレクションを更新し、id を削除して挿入する必要があることです。コマンドは複数のサーバーから開始され、コレクション全体を読み取っていずれかの Web サーバーで更新する必要があるため、データの一貫性が失われるのではないかと心配しています。Web サーバー A はデータを更新する可能性がありますが、サーバー B はサーバー A が更新を完了する前にデータを読み取ります。同時実行の競合があります。

ASP.NET 4.5 アプリケーションでこの種の戦略を実装する最善の方法を探しています。これは、メモリ内データベースを使用するか、データの整合性を保証しないかの選択になる可能性があると思います。

私の問題に対する最善の解決策は何かお聞きしたいです。

これが私の問題の例です:

  • MemCached サーバー - コレクション (コレクション A、B、C、D など) を格納します。各コレクションには、ユーザー ID が格納されます。これは、数千の ID、さらにはそれ以上になる可能性があります。

  • Web サーバー - SignalR がインストールされた私の Amazon EC2 Web サーバー。ロード バランサーの背後にある可能性があります。これらのサーバーは memcached サーバーにアクセスし、コレクション名 (「Collection_23」など) で完全なコレクション アイテムを取得する必要があります。アイテム (ユーザー ID) を削除し、アイテムを追加できる必要があります。これはすべて、可能な限り高速にする必要があります。

私は自分自身を正しく説明したことを願っています。ありがとう。

4

2 に答える 2

3

または、 Redisを使用することもできます。Memcachedのように、すべてがインメモリから提供されます。Redis には、単純なキーと値のデータストア以外にも多くの機能があります。特定のケースでは、データの一貫性を保証するRedis transactionsを使用できます。

于 2012-10-02T19:17:44.393 に答える
0

別の投稿のコメントには、redis プロバイダーへのリンクが示されています。リンクが壊れています。メインの SignalR プロジェクトに統合されているようです: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Redis

ここに redis nuget があります: http://www.nuget.org/packages/Microsoft.AspNet.SignalR.Redis

ここのドキュメント: http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis

于 2013-11-18T17:42:15.107 に答える