2016-08-11 16 views
1

Silverlight Webアプリケーションがあります。このWebアプリケーションは、4つのサーバーで実行され、その前にNLBがあります。私はWebアプリケーションでSignalRを使用する必要があります。SignalR - NLBサーバーの変更とスケールアウト方法の提案

このシナリオについて考えてみましょう。 クライアント#1がサーバー#1に接続されていて、すべて正常です。彼らはハブを通して完全にお互いにコミュニケーションしています。そして、突然NLBがクライアント#1をサーバー#2に割り当てました。

今、Connection and Hubはどうなりますか?彼らはどのように通信するでしょうか? クライアント#1とサーバー#1の接続はどのように設定されていますか?

PS:NLBについてよくわかりません。多分それは愚かな質問ですが、私は良い説明を見つけることができませんでした。

私の2番目の疑問は、スケールアウト(Azure、SQL、Redis)の中で、おそらく多くのクライアント(10K未満)を持つ.NET Silverlightアプリケーションに最適ですか?

私はMS SQL、SQL Serverを私のアプリケーションでよく使用します。

+1

バックプレーンを使用する必要があります。 SignalRは、Redis、SQL Server、およびService Busにフックを提供します。 –

答えて

1

私はこの非常に有益なvideoを見た後、私の質問に対する答えを見つけました。

基本的に、新しい接続は、クライアントが他のサーバーノードに割り当てられたときに自動的に確立されます。古い接続は失われますが、いずれにしてもバックプレーンを使用している場合はすべてのクライアントに通知できます。したがって、これは問題ではありません。

また、ハブオブジェクトは一時オブジェクトであるため、新しい単一操作ごとに新しいハブオブジェクトが作成されるため、問題はありません。したがって、これも問題ではありません。サーバーとクライアントの間に永続的なハブオブジェクトはありません。サーバーとクライアントが1台であっても、すべての操作でハブが破壊されて作成されます。

唯一の問題は、グループを使用している場合、他のサーバーに接続するときにクライアントのグループ情報が失われることです。サーバーはグループまたはグループメンバーシップのリストを保持しません。その場合、データベースを使用する必要があり、データベースから手動で更新することができます。新しい接続がクライアントと新しいサーバーの間に確立されると、db内のこのクライアントを検索できます。そのクライアントのグループ情報が見つかった場合は、再度そのグループに手動で再登録できます。

バックプレーンの選択には、最速または最善の方法はありません。 Azure Service Bus、Redis、SQLの間では、この方法がより高速であると言えるでしょう。それは本当にあなたのアプリケーションに依存します。既にMS Azureサービスを使用している場合、WebアプリケーションのAzure実装を選択します。あなたがあなたのアプリでRedisを使用しているなら、Redisに行きます。それ以外の場合はSQLを選択できます。私が言ったように、それらのすべては多かれ少なかれ同じです。あなたのウェブアプリに最も適したものを選んでください。

これらはすべてSignalRの公式サイトから得られたものですpage. このサイトは、SignalRチュートリアルとapiガイドサイトとして最適です。すべてのセクションに進むことを強くお勧めします。