web-dev-qa-db-ja.com

バックプレーンのスケールアウトにおけるSignalRの制限を解決する方法

ASP.NET MVCとC#を使用しています。リアルタイムでデータを転送するためのSignalRが見つかりましたが、signalRにはいくつかの制限があります。

この問題による

バックプレーンを使用すると、最大メッセージスループットは、クライアントが単一のサーバーノードと直接通信する場合よりも低くなります。これは、バックプレーンがすべてのメッセージをすべてのノードに転送するため、バックプレーンがボトルネックになる可能性があるためです。この制限が問題になるかどうかは、アプリケーションによって異なります。たとえば、ここにいくつかの典型的なSignalRシナリオがあります:

  • サーバーブロードキャスト(株式相場表示など):サーバーがメッセージの送信速度を制御するため、このシナリオではバックプレーンが適切に機能します。
  • クライアント間(チャットなど):このシナリオでは、メッセージの数がクライアントの数に比例する場合、バックプレーンがボトルネックになる可能性があります。つまり、より多くのクライアントが参加するにつれて、メッセージの割合が比例して増加する場合です。
  • 高周波リアルタイム(リアルタイムゲームなど):このシナリオでは、バックプレーンは推奨されません。

私のプロジェクトは、高頻度のリアルタイム(リアルタイムゲームなど)にする必要があります。

また、リアルタイムのビデオチャットが必要です

私のシナリオ:

マスターサーバーとマルチスレーブサーバーがあり、クライアントはスレーブサーバーに接続し、スレーブサーバーはマスターサーバーに接続します。

例:サーバースレーブ1とサーバースレーブ2はマスターサーバーに接続され、クライアントAとクライアントBはスレーブ1に接続され、クライアントCとクライアントDはスレーブ2に接続されます。

クライアント-メッセージまたはデータの送信、またはクライアントとのライブチャット-D

このシナリオを実装するにはどうすればよいですか?

[更新-1]

その問題にsignalRを使用しない場合、何を使用すればよいですか?

[アップデート-2]

私のシナリオでは、マスターサーバーはルーターのように機能し、スレーブサーバーはスイッチのように機能します。スイッチに接続されているクライアントとルーターに接続されているスイッチ。client-Aがclient-Cにデータパケットを送信する場合、データパケットはルーターに送信する必要があります。ルーターはデータパケットを処理します。 10,000を超えています。

ありがとう。

22
Amir Movahedi

バックプレーンはメッセージ配信の遅延を引き起こしますが、これは低遅延の作業にはうまく機能しません。クライアントを処理するために絶対に複数のサーバーが必要であり、絶対に必要な最小の遅延がある場合、バックプレーンはおそらく機能しません。

ただし、ASPフォーラムで この会話 を確認してください。ポスターは、3,000の接続されたクライアント1つのサーバー上

よくあることですが、ここでのトレードオフは、レイテンシーと複雑さの間です。最適な解決策は、メッセージがターゲットクライアントを含むサーバーにのみルーティングされることです。これを実現するには、すべてのクライアント接続を追跡したり、さまざまなサーバーへの再接続に対処したりする方法が必要です。おそらく、数十時間のハードslogプログラミングでこれを解決できますが、そうすることで、ほとんどのSignalRが役立つ理由。

別の方法として、最初に頭に浮かぶのは ZeroMQ です。特にクライアントがブラウザベースの場合はもう少し作業が必要ですが、ZeroMQのプロジェクトの目標は低レイテンシと高スループットです。ただし、スケールアウトを自分で処理する必要があります...そして、複数のサーバーにわたる接続ポイントの追跡と再接続に戻ります。

これらのどちらも問題を解決しない場合は、アーキテクチャの変更を検討する必要があるかもしれません。 MMOの一般的な方法の1つは、関連するクライアントを同じサーバーに接続して、サーバー間の通信要件を減らすことです。リアルタイムデータを合法的に通信する必要があるクライアントは、バックプレーンの問題を心配する必要のない単一のサーバーにまとめられます。次に、このサーバーは、ワールド状態などを維持するために必要なものだけを「マスター」サーバーに通信します。

問題が発生する前に、問題を減らすようにアーキテクチャを計画してください...ただし、不要な作業に何週間も費やさないでください。 SignalRでいくつかのテストを行い、深淵に飛び込む前に、バックプレーンが実際にレイテンシーにどのような影響を与えるかを確認します。

27
Corey