Horizontale Skalierung in SignalR mit RedisSignalR Scaleout with Redis

durch Mike Wassonby Mike Wasson

Warning

Diese Dokumentation ist nicht für die neueste Version von SignalR.This documentation isn't for the latest version of SignalR. Sehen Sie sich ASP.NET Core SignalR.Take a look at ASP.NET Core SignalR.

In diesem Thema verwendeten SoftwareversionenSoftware versions used in this topic

Vorherige Versionen dieses ThemasPrevious versions of this topic

Weitere Informationen zu früheren Versionen von SignalR, finden Sie unter ältere Versionen von SignalR.For information about earlier versions of SignalR, see SignalR Older Versions.

Fragen und KommentareQuestions and comments

Lassen Sie Feedback, auf wie Ihnen in diesem Tutorial gefallen hat und was wir in den Kommentaren am unteren Rand der Seite verbessern können.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Wenn Sie Fragen, die nicht direkt mit dem Tutorial verknüpft sind haben, können Sie sie veröffentlichen das ASP.NET SignalR-Forum oder StackOverflow.com.If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

In diesem Tutorial verwenden Sie Redis zur Verteilung von Nachrichten in einer SignalR-Anwendung, die auf zwei separaten IIS-Instanzen bereitgestellt wird.In this tutorial, you will use Redis to distribute messages across a SignalR application that is deployed on two separate IIS instances.

Redis ist ein Schlüssel-Wert-Speicher im Arbeitsspeicher.Redis is an in-memory key-value store. Darüber hinaus unterstützt er ein messaging-System mit einem Veröffentlichen/Abonnieren-Modell.It also supports a messaging system with a publish/subscribe model. Die Redis-SignalR-Backplane verwendet das Pub/Sub-Feature, um Nachrichten an andere Server weiterzuleiten.The SignalR Redis backplane uses the pub/sub feature to forward messages to other servers.

In diesem Tutorial verwenden Sie drei Server:For this tutorial, you will use three servers:

  • Zwei Server unter Windows, das Sie zum Bereitstellen einer SignalR-Anwendung verwenden werden.Two servers running Windows, which you will use to deploy a SignalR application.
  • Ein Server unter Linux, das Sie zum Ausführen von Redis verwenden.One server running Linux, which you will use to run Redis. Die Screenshots in diesem Tutorial verwendet Ubuntu 12.04 TLS.For the screenshots in this tutorial, I used Ubuntu 12.04 TLS.

Wenn Sie drei physische Servern für die Verwendung nicht haben, können Sie virtuelle Computer auf Hyper-V erstellen.If you don't have three physical servers to use, you can create VMs on Hyper-V. Eine weitere Option ist zum Erstellen von VMs in Azure.Another option is to create VMs on Azure.

Obwohl in diesem Tutorial die offizielle Redis-Implementierung verwendet wird, es gibt auch eine Windows Port von Redis aus MSOpenTech.Although this tutorial uses the official Redis implementation, there is also a Windows port of Redis from MSOpenTech. Setup und Konfiguration sind unterschiedlich, aber die Schritte sind identisch.Setup and configuration are different, but otherwise the steps are the same.

Note

Horizontale Skalierung in SignalR mit Redis unterstützt Redis-Cluster nicht.SignalR scaleout with Redis does not support Redis clusters.

ÜbersichtOverview

Bevor wir mit dem ausführlichen Tutorial eingehen, sieht ein schnellen Überblick darüber, welche Aktionen Sie ausgeführt werden.Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Installieren Sie Redis, und starten Sie den Redis-Server.Install Redis and start the Redis server.

  2. Fügen Sie diese NuGet-Pakete für Ihre Anwendung hinzu:Add these NuGet packages to your application:

  3. Erstellen einer SignalR-Anwendung.Create a SignalR application.

  4. Fügen Sie den folgenden Code, "Startup.cs" So konfigurieren Sie die Rückwandplatine:Add the following code to Startup.cs to configure the backplane:

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
            app.MapSignalR();
        }
    }
    

Ubuntu in Hyper-VUbuntu on Hyper-V

Verwenden Windows Hyper-V, können Sie problemlos eine Ubuntu-VM unter Windows Server erstellen.Using Windows Hyper-V, you can easily create an Ubuntu VM on Windows Server.

Laden Sie die Ubuntu-ISO-Datei von http://www.ubuntu.com .Download the Ubuntu ISO from http://www.ubuntu.com.

Fügen Sie einen neuen virtuellen Computer in Hyper-V hinzu.In Hyper-V, add a new VM. In der virtuelle Festplatte verbinden Schritt select erstellen Sie eine virtuelle Festplatte.In the Connect Virtual Hard Disk step, select Create a virtual hard disk.

In der Installationsoptionen Schritt select Imagedatei (.iso), klicken Sie auf Durchsuchen, und navigieren Sie zu die ISO für Ubuntu-Installation.In the Installation Options step, select Image file (.iso), click Browse, and browse to the Ubuntu installation ISO.

Installieren Sie RedisInstall Redis

Führen Sie die Schritte unter http://redis.io/download zum Herunterladen und Erstellen von Redis.Follow the steps at http://redis.io/download to download and build Redis.

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make

Dies erstellt die Redis-Binärdateien die src Verzeichnis.This builds the Redis binaries in the src directory.

Standardmäßig wird Redis kein Kennwort erforderlich.By default, Redis does not require a password. Bearbeiten Sie zum Festlegen eines Kennworts die redis.conf -Datei, die im Stammverzeichnis des Quellcodes befindet.To set a password, edit the redis.conf file, which is located in the root directory of the source code. (Stellen Sie eine Sicherungskopie der Datei aus, bevor Sie sie bearbeiten.) Fügen Sie die folgende Anweisung zum redis.conf:(Make a backup copy of the file before you edit it!) Add the following directive to redis.conf:

requirepass YourStrongPassword1234

Starten Sie jetzt die Redis-Server:Now start the Redis server:

src/redis-server redis.conf

Geöffneten Port 6379 aufheben, wird der Standardport, der Redis wird lauscht.Open port 6379, which is the default port that Redis listens on. (Sie können die Portnummer in der Konfigurationsdatei ändern.)(You can change the port number in the configuration file.)

Erstellen Sie die SignalR-AnwendungCreate the SignalR Application

Erstellen einer SignalR-Anwendung entweder mit diesen Lernprogrammen:Create a SignalR application by following either of these tutorials:

Als Nächstes ändern wir die Chat-Anwendung zur Unterstützung von horizontale Skalierung mit Redis.Next, we'll modify the chat application to support scaleout with Redis. Fügen Sie zunächst die Microsoft.AspNet.SignalR.StackExchangeRedis NuGet-Paket Ihrem Projekt.First, add the Microsoft.AspNet.SignalR.StackExchangeRedis NuGet package to your project. In Visual Studio aus der Tools die Option NuGet Paket-Manager, wählen Sie Paket-Manager Konsole.In Visual Studio, from the Tools menu, select NuGet Package Manager, then select Package Manager Console. Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl aus:In the Package Manager Console window, enter the following command:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Öffnen Sie als Nächstes die Datei "Startup.cs".Next, open the Startup.cs file. Fügen Sie den folgenden Code der Konfiguration Methode:Add the following code to the Configuration method:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
        app.MapSignalR();
    }
}
  • "Server" ist der Name des Servers, der Redis ausgeführt wird."server" is the name of the server that is running Redis.
  • Port ist die Nummer des Portsport is the port number
  • "Kennwort" ist das Kennwort, das Sie in der Datei redis.conf definiert."password" is the password that you defined in the redis.conf file.
  • "AppName" ist eine beliebige Zeichenfolge."AppName" is any string. SignalR erstellt einen Redis-Pub/Sub-Kanal mit diesem Namen.SignalR creates a Redis pub/sub channel with this name.

Zum Beispiel:For example:

GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Bereitstellen und Ausführen der AnwendungDeploy and Run the Application

Bereiten Sie Ihre Windows Server-Instanzen, um die SignalR-Anwendung bereitzustellen.Prepare your Windows Server instances to deploy the SignalR application.

Fügen Sie die IIS-Rolle hinzu.Add the IIS role. Umfassen Sie "Anwendungsentwicklung"-Features, einschließlich der WebSocket-Protokoll.Include "Application Development" features, including the WebSocket Protocol.

Außerdem enthalten Sie den Management-Dienst (unter "Management Tools" aufgeführt).Also include the Management Service (listed under "Management Tools").

Installieren Sie Web Deploy 3.0.Install Web Deploy 3.0. Wenn Sie die IIS-Manager ausführen, werden Sie zum Installieren von Microsoft-Webplattform aufgefordert, oder Sie können Herunterladen des Installationsprogramms.When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. Klicken Sie in den Webplattform-Installer Web Deploy suchen Sie und installieren Sie Web Deploy 3.0In the Platform Installer, search for Web Deploy and install Web Deploy 3.0

Überprüfen Sie, dass die Web-Management-Dienst ausgeführt wird.Check that the Web Management Service is running. Wenn dies nicht der Fall ist, starten Sie den Dienst.If not, start the service. (Wenn Sie Web-Management-Dienst in der Liste der Windows-Dienste nicht angezeigt wird, stellen Sie sicher, dass Sie den Management-Dienst installiert, wenn Sie die IIS-Rolle hinzugefügt haben.)(If you don't see Web Management Service in the list of Windows services, make sure that you installed the Management Service when you added the IIS role.)

Standardmäßig wird TCP-Port 8172 den Web-Management-Dienst lauscht.By default, the Web Management Service listens on TCP port 8172. Erstellen Sie eine neue eingehende Regel zum Zulassen von TCP-Datenverkehr an Port 8172, in der Windows-Firewall.In Windows Firewall, create a new inbound rule to allow TCP traffic on port 8172. Weitere Informationen finden Sie unter Firewallregeln konfigurieren.For more information, see Configuring Firewall Rules. (Wenn Sie die VMs in Azure hosten, dies direkt im Azure-Portal möglich.(If you are hosting the VMs on Azure, you can do this directly in the Azure portal. Finden Sie unter Einrichten von Endpunkten für einen virtuellen Computer.)See How to Set Up Endpoints to a Virtual Machine.)

Jetzt sind Sie bereit für die Bereitstellung von Visual Studio-Projekt vom Entwicklungscomputer auf dem Server.Now you are ready to deploy the Visual Studio project from your development machine to the server. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste in der Projektmappe, und klicken Sie auf veröffentlichen.In Solution Explorer, right-click the solution and click Publish.

Weitere Dokumentation zur Bereitstellung finden Sie unter Einstieg in die Webbereitstellung für Visual Studio und ASP.NET.For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

Wenn Sie die Anwendung auf zwei Servern bereitstellen, können Sie jede Instanz in einem separaten Browserfenster zu öffnen und sehen, dass jeder SignalR-Nachrichten von einem anderen erhält.If you deploy the application to two servers, you can open each instance in a separate browser window and see that they each receive SignalR messages from the other. (Natürlich in einer produktionsumgebung, die beiden Server hinter einem Load Balancer saß.)(Of course, in a production environment, the two servers would sit behind a load balancer.)

Wenn Sie wissen möchten, finden Sie unter der Nachrichten, die mit Redis, gesendet werden, können Sie die Redis-Cli Client, der mit Redis installiert wird.If you're curious to see the messages that are sent to Redis, you can use the redis-cli client, which installs with Redis.

redis-cli -a password
SUBSCRIBE ChatApp