Freigeben über


Horizontale Skalierung in SignalR mit Redis

Warnung

Diese Dokumentation gilt nicht für die neueste Version von SignalR. Sehen Sie sich ASP.NET Core SignalR an.

In diesem Thema verwendete Softwareversionen

Frühere Versionen dieses Themas

Informationen zu früheren Versionen von SignalR finden Sie unter Ältere Versionen von SignalR.

Fragen und Kommentare

Bitte hinterlassen Sie Feedback dazu, wie Ihnen dieses Tutorial gefallen hat und was wir in den Kommentaren unten auf der Seite verbessern könnten. Wenn Sie Fragen haben, die nicht direkt mit dem Tutorial zusammenhängen, können Sie diese im ASP.NET SignalR-Forum oder StackOverflow.com posten.

In diesem Tutorial verwenden Sie Redis , um Nachrichten auf eine SignalR-Anwendung zu verteilen, die auf zwei separaten IIS-Instanzen bereitgestellt wird.

Redis ist ein In-Memory-Schlüssel-Wert-Speicher. Es unterstützt auch ein Messagingsystem mit einem Veröffentlichungs-/Abonnementmodell. Die SignalR Redis-Backplane verwendet das Pub/Sub-Feature, um Nachrichten an andere Server weiterzuleiten.

Diagramm, das Pfeile zeigt, die von Redis Server zu V M und dann zu Computern wechseln. Ein Pfeil mit der Bezeichnung Veröffentlichen wechselt von V M zu Redis Server.

In diesem Tutorial verwenden Sie drei Server:

  • Zwei Server mit Windows, die Sie zum Bereitstellen einer SignalR-Anwendung verwenden.
  • Ein Server mit Linux, den Sie zum Ausführen von Redis verwenden. Für die Screenshots in diesem Tutorial habe ich Ubuntu 12.04 TLS verwendet.

Wenn Sie nicht über drei physische Server verfügen, können Sie virtuelle Computer auf Hyper-V erstellen. Eine weitere Option besteht darin, virtuelle Computer in Azure zu erstellen.

Obwohl in diesem Tutorial die offizielle Redis-Implementierung verwendet wird, gibt es auch einen Windows-Port von Redis von MSOpenTech. Setup und Konfiguration unterscheiden sich, andernfalls sind die Schritte identisch.

Hinweis

SignalR scaleout with Redis unterstützt keine Redis-Cluster.

Übersicht

Bevor wir mit dem ausführlichen Tutorial beginnen, finden Sie hier einen kurzen Überblick über ihre Aufgaben.

  1. Installieren Sie Redis, und starten Sie den Redis-Server.

  2. Fügen Sie Ihrer Anwendung die folgenden NuGet-Pakete hinzu:

  3. Erstellen Sie eine SignalR-Anwendung.

  4. Fügen Sie startup.cs den folgenden Code hinzu, um die Backplane zu konfigurieren:

    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 auf Hyper-V

Mit Windows Hyper-V können Sie ganz einfach eine Ubuntu-VM unter Windows Server erstellen.

Laden Sie die Ubuntu-ISO von herunter http://www.ubuntu.com.

Fügen Sie in Hyper-V einen neuen virtuellen Computer hinzu. Wählen Sie im Schritt Virtuelle Festplatte verbinden die Option Virtuelle Festplatte erstellen aus.

Screenshot des Dialogfelds Assistent für neue virtuelle Computer Virtuelle Festplatte verbinden und virtuelle Festplatte erstellen sind ausgewählt.

Wählen Sie im Schritt Installationsoptionendie Option Imagedatei (.iso) aus, klicken Sie auf Durchsuchen, und navigieren Sie zum Iso der Ubuntu-Installation.

Screenshot: Assistent für neue virtuelle Computer auf der Seite Installationsoptionen Installieren Sie ein O S aus einem Start-C D D V D-ROM, und Imagedatei punkt i s o sind ausgewählt.

Installieren von Redis

Führen Sie die Schritte unter aus http://redis.io/download , um Redis herunterzuladen und zu erstellen.

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

Dadurch werden die Redis-Binärdateien im src Verzeichnis erstellt.

Standardmäßig erfordert Redis kein Kennwort. Um ein Kennwort festzulegen, bearbeiten Sie die redis.conf Datei, die sich im Stammverzeichnis des Quellcodes befindet. (Erstellen Sie eine Sicherungskopie der Datei, bevor Sie sie bearbeiten!) Fügen Sie die folgende Anweisung hinzu redis.conf:

requirepass YourStrongPassword1234

Starten Sie nun den Redis-Server:

src/redis-server redis.conf

Screenshot: Standard Seite des Redis-Servers

Öffnen Sie Port 6379, dem Standardport, an dem Redis lauscht. (Sie können die Portnummer in der Konfigurationsdatei ändern.)

Erstellen der SignalR-Anwendung

Erstellen Sie eine SignalR-Anwendung, indem Sie eines der folgenden Tutorials ausführen:

Als Nächstes ändern wir die Chatanwendung so, dass die Skalierung mit Redis unterstützt wird. Fügen Sie zunächst dem Projekt das Microsoft.AspNet.SignalR.StackExchangeRedis NuGet-Paket hinzu. Wählen Sie in Visual Studio im Menü Extras die Option NuGet-Paket-Manager und dann Paket-Manager-Konsole aus. Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl ein:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Öffnen Sie als Nächstes die Datei Startup.cs. Fügen Sie der Configuration-Methode den folgenden Code hinzu:

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, auf dem Redis ausgeführt wird.
  • Port ist die Portnummer
  • "password" ist das Kennwort, das Sie in der Datei redis.conf definiert haben.
  • "AppName" ist eine beliebige Zeichenfolge. SignalR erstellt einen Redis Pub/Sub-Kanal mit diesem Namen.

Beispiel:

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

Bereitstellen und Ausführen der Anwendung

Bereiten Sie Ihre Windows Server-Instanzen für die Bereitstellung der SignalR-Anwendung vor.

Fügen Sie die IIS-Rolle hinzu. Schließen Sie Features für die Anwendungsentwicklung ein, einschließlich des WebSocket-Protokolls.

Screenshot: Assistent zum Hinzufügen von Rollen und Features Serverrollen und WebSocket-Protokoll sind ausgewählt.

Schließen Sie auch den Verwaltungsdienst (unter "Verwaltungstools") ein.

Screenshot: Assistent zum Hinzufügen von Rollen und Features Verwaltungsdienst ist ausgewählt.

Installieren Sie Web Deploy 3.0. Wenn Sie IIS-Manager ausführen, werden Sie aufgefordert, Microsoft-Webplattform zu installieren, oder Sie können das Installationsprogramm herunterladen. Suchen Sie im Plattforminstallationsprogramm nach Web Deploy, und installieren Sie Web Deploy 3.0.

Screenshot: Dialogfeld

Überprüfen Sie, ob der Webverwaltungsdienst ausgeführt wird. Wenn nicht, starten Sie den Dienst. (Wenn der Webverwaltungsdienst in der Liste der Windows-Dienste nicht angezeigt wird, stellen Sie sicher, dass Sie den Verwaltungsdienst installiert haben, als Sie die IIS-Rolle hinzugefügt haben.)

Standardmäßig lauscht der Webverwaltungsdienst am TCP-Port 8172. Erstellen Sie in der Windows-Firewall eine neue Eingehende Regel, um TCP-Datenverkehr an Port 8172 zuzulassen. Weitere Informationen finden Sie unter Konfigurieren von Firewallregeln. (Wenn Sie die VMs in Azure hosten, können Sie dies direkt im Azure-Portal. Weitere Informationen finden Sie unter Einrichten von Endpunkten für einen virtuellen Computer.)

Jetzt können Sie das Visual Studio-Projekt von Ihrem Entwicklungscomputer auf dem Server bereitstellen. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und klicken Sie dann auf Veröffentlichen.

Ausführlichere Dokumentationen zur Webbereitstellung finden Sie unter Webbereitstellungsinhaltszuordnung für Visual Studio und ASP.NET.

Wenn Sie die Anwendung auf zwei Servern bereitstellen, können Sie jede instance in einem separaten Browserfenster öffnen und sehen, dass sie jeweils SignalR-Nachrichten vom anderen erhalten. (In einer Produktionsumgebung würden sich die beiden Server natürlich hinter einem Lastenausgleich befinden.)

Screenshot: Zwei geöffnete Browserfenster, in denen die Anwendung auf zwei Servern bereitgestellt wird.

Wenn Sie die Nachrichten sehen möchten, die an Redis gesendet werden, können Sie den redis-cli-Client verwenden, der mit Redis installiert wird.

redis-cli -a password
SUBSCRIBE ChatApp

Screenshot: Nummerierte Liste in einem Redis-Fenster