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
- Visual Studio 2013
- .NET 4.5
- SignalR Version 2.4
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.
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.
Installieren Sie Redis, und starten Sie den Redis-Server.
Fügen Sie Ihrer Anwendung die folgenden NuGet-Pakete hinzu:
Erstellen Sie eine SignalR-Anwendung.
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.
Wählen Sie im Schritt Installationsoptionendie Option Imagedatei (.iso) aus, klicken Sie auf Durchsuchen, und navigieren Sie zum Iso der Ubuntu-Installation.
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
Ö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.
Schließen Sie auch den Verwaltungsdienst (unter "Verwaltungstools") ein.
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.
Ü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.)
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