SQL Server による SignalR スケールアウト

作成者: Patrick Fletcher

警告

このドキュメントは、最新版の SignalR を対象としていません。 ASP.NET Core SignalR を参照してください。

このトピックで使用されるソフトウェアのバージョン

このトピックの以前のバージョン

SignalR の以前のバージョンの詳細については、「SignalR の以前のバージョン」を参照してください。

質問とコメント

このチュートリアルの感想、改善に関するフィードバックをページの下部にあるコメント欄にお寄せください。 チュートリアルに直接関連しない質問がある場合は、ASP.NET SignalR フォーラムまたは StackOverflow.com に投稿できます。

このチュートリアルでは、SQL Server を使用して、2 つの個別の IIS インスタンスにデプロイされている SignalR アプリケーション全体にメッセージを配布します。 このチュートリアルは 1 台のテスト マシンで実行することもできますが、最大限の効果を得るには、SignalR アプリケーションを 2 台以上のサーバーにデプロイする必要があります。 また、いずれかのサーバーまたは別の専用サーバーに SQL Server をインストールする必要があります。 もう 1 つの選択肢は、Azure 上の VM を使用してチュートリアルを実行することです。

Diagram that shows arrows going from S Q L Server to V M to computers. One arrow labeled Update starts at V M and goes to S Q L Server.

前提条件

Microsoft SQL Server 2005 以降。 バックプレーンは、SQL Server のデスクトップとサーバーの両方のエディションをサポートします。 SQL Server Compact Edition や Azure SQL Database はサポートされていません。 (アプリケーションが Azure でホストされている場合は、代わりに Service Bus バックプレーンを検討してください)

概要

詳細なチュートリアルに進む前に、これから行うことの概要を簡単に説明します。

  1. 新しく空のデータベースを作成します。 バックプレーンによって、このデータベースに必要なテーブルが作成されます。

  2. 次の NuGet パッケージをアプリケーションに追加します。

  3. SignalR アプリケーションを作成します。

  4. 次のコードを Startup.cs に追加して、バックプレーンを構成します。

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

    このコードでは、TableCountMaxQueueLength の既定値を使用してバックプレーンを構成します。 これらの値の変更については、「SignalR パフォーマンス」: 「スケールアウト メトリック」を参照してください。

データベースの構成

アプリケーションが Windows 認証と SQL Server 認証のどちらを使用してデータベースにアクセスするかを決定します。 いずれにしても、データベース ユーザーにログイン、スキーマ作成、テーブル作成のアクセス許可があることを確認します。

バックプレーンが使用する新しいデータベースを作成します。 データベースには任意の名前を付けることができます。 データベースにテーブルを作成する必要はありません。バックプレーンにより必要なテーブルが作成されます。

Screenshot of the Object Explorer dialog box. The folder labeled Databases is selected.

Service Broker を有効にする

バックプレーン データベースに対して Service Broker を有効にすることをお勧めします。 Service Broker は、SQL Server でのメッセージングとキューイングのネイティブ サポートを提供し、バックプレーンがより効率的に更新プログラムを受信できるようにします。 (ただし、バックプレーンは Service Broker なしでも機能します)

Service Broker が有効になっているかどうかを確認するために、sys.databases カタログ ビューの is_broker_enabled 列に対してクエリを実行します。

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Screenshot of a window displaying the sys dot databases catalog view.

Service Broker を有効にするには、次の SQL クエリを使用します。

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Note

このクエリがデッドロックしているように見える場合は、DB に接続されているアプリケーションがないことを確認します。

トレースを有効にしている場合、トレースには Service Broker が有効かどうかも表示されます。

SignalR アプリケーションを作成する

次のいずれかのチュートリアルに従って SignalR アプリケーションを作成します。

次に、SQL Server でのスケールアウトをサポートするようにチャット アプリケーションを変更します。 まず、SignalR.SqlServer NuGet パッケージをプロジェクトに追加します。 Visual Studio の [ツール] メニューで、[NuGet パッケージ マネージャー]を選択し、[パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。

Install-Package Microsoft.AspNet.SignalR.SqlServer

次に、Startup.cs ファイルを開きます。 Configure メソッドに次のコードを追加します。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

アプリケーションのデプロイと実行

SignalR アプリケーションをデプロイするための Windows Server インスタンスを準備します。

IIS ロールを追加します。 WebSocket プロトコルを含む "アプリケーション開発" 機能を含めます。

Screenshot that shows the Add Roles and Features Wizard dialog box. Server Roles and WebSocket Protocol are selected.

管理サービスも含めます ([管理ツール] の下に表示されます)。

Screenshot that shows the Add Roles and Features Wizard dialog box. Server Roles and Management Service are selected.

Web Deploy 3.0 をインストールします。 IIS マネージャーを実行すると、Microsoft Web Platform をインストールするよう求めるメッセージが表示されるか、インストーラーをダウンロードできます。 Platform Installer で、Web Deploy を検索し、Web Deploy 3.0 をインストールします

Screenshot with web deploy 3 point 0 selected in the search results.

Web 管理サービスが実行されていることを確認します。 そうでない場合は、サービスを開始します。 (Windows サービスの一覧に Web 管理サービスが表示されない場合は、IIS ロールを追加したときに管理サービスがインストールされていることを確認してください。)

最後に、TCP のポート 8172 を開きます。 これは、Web 配置ツールが使用するポートです。

これで、開発用コンピューターからサーバーに Visual Studio プロジェクトをデプロイする準備ができました。 ソリューション エクスプローラーで、ソリューションを右クリックし、[発行] をクリックします。

Web 配置の詳細なドキュメントについては、Visual Studio および ASP.NET の Web 配置コンテンツ マップに関するページを参照してください。

アプリケーションを 2 台のサーバーにデプロイする場合は、個別のブラウザー ウィンドウで各インスタンスを開き、それぞれがもう一方から SignalR メッセージを受信することを確認できます。 (もちろん、運用環境では、2 台のサーバーはロード バランサーの背後に配置されます。)

Screenshot of two browser windows open showing the application deployed to two servers.

アプリケーションを実行すると、SignalR によってデータベースにテーブルが自動的に作成されていることがわかります。

Screenshot of the Object Explorer dialog box displaying folders and files.

SignalR はテーブルを管理します。 アプリケーションがデプロイされている限り、行の削除やテーブルの変更などを行わないでください。