Scale-out de SignalR avec Redis

Avertissement

Cette documentation ne concerne pas la dernière version de SignalR. Consultez ASP.NET Core SignalR.

Versions logicielles utilisées dans cette rubrique

Versions précédentes de cette rubrique

Pour plus d’informations sur les versions antérieures de SignalR, consultez Anciennes versions de SignalR.

Questions et commentaires

Laissez vos commentaires sur la façon dont vous avez aimé ce tutoriel et sur ce que nous pourrions améliorer dans les commentaires en bas de la page. Si vous avez des questions qui ne sont pas directement liées au tutoriel, vous pouvez les publier sur le forum ASP.NET SignalR ou StackOverflow.com.

Dans ce tutoriel, vous allez utiliser Redis pour distribuer des messages sur une application SignalR déployée sur deux instances IIS distinctes.

Redis est un magasin clé-valeur en mémoire. Il prend également en charge un système de messagerie avec un modèle de publication/abonnement. Le fond de panier Redis SignalR utilise la fonctionnalité pub/sub pour transférer des messages vers d’autres serveurs.

Diagramme montrant les flèches allant de Redis Server à V M, puis aux ordinateurs. Une flèche intitulée Publier va de V M à Redis Server.

Pour ce tutoriel, vous allez utiliser trois serveurs :

  • Deux serveurs exécutant Windows, que vous utiliserez pour déployer une application SignalR.
  • Un serveur exécutant Linux, que vous utiliserez pour exécuter Redis. Pour les captures d’écran de ce tutoriel, j’ai utilisé Ubuntu 12.04 TLS.

Si vous n’avez pas trois serveurs physiques à utiliser, vous pouvez créer des machines virtuelles sur Hyper-V. Une autre option consiste à créer des machines virtuelles sur Azure.

Bien que ce tutoriel utilise l’implémentation officielle de Redis, il existe également un port Windows de Redis à partir de MSOpenTech. L’installation et la configuration sont différentes, mais sinon, les étapes sont les mêmes.

Notes

Le scaleout SignalR avec Redis ne prend pas en charge les clusters Redis.

Vue d’ensemble

Avant d’accéder au tutoriel détaillé, voici une vue d’ensemble rapide de ce que vous allez faire.

  1. Installez Redis et démarrez le serveur Redis.

  2. Ajoutez ces packages NuGet à votre application :

  3. Créez une application SignalR.

  4. Ajoutez le code suivant à Startup.cs pour configurer le 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 sur Hyper-V

À l’aide de Windows Hyper-V, vous pouvez facilement créer une machine virtuelle Ubuntu sur Windows Server.

Téléchargez l’ISO Ubuntu à partir de http://www.ubuntu.com.

Dans Hyper-V, ajoutez une nouvelle machine virtuelle. À l’étape Connecter un disque dur virtuel , sélectionnez Créer un disque dur virtuel.

Capture d’écran montrant la boîte de dialogue Assistant Nouvelle machine virtuelle. Connecter un disque dur virtuel et Créer un disque dur virtuel sont sélectionnés.

À l’étape Options d’installation , sélectionnez Fichier image (.iso), cliquez sur Parcourir, puis accédez à l’ISO d’installation d’Ubuntu.

Capture d’écran montrant l’Assistant Nouvelle machine virtuelle dans la page Options d’installation. Installez un O S à partir d’une ROM de démarrage C D DD V D et le fichier image dot i s o sont sélectionnés.

Installer Redis

Suivez les étapes ci-dessous http://redis.io/download pour télécharger et générer 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

Cela génère les fichiers binaires Redis dans le src répertoire.

Par défaut, Redis ne nécessite pas de mot de passe. Pour définir un mot de passe, modifiez le redis.conf fichier, qui se trouve dans le répertoire racine du code source. (Effectuez une copie de sauvegarde du fichier avant de le modifier !) Ajoutez la directive suivante à redis.conf:

requirepass YourStrongPassword1234

Démarrez maintenant le serveur Redis :

src/redis-server redis.conf

Capture d’écran montrant la page main du serveur Redis.

Ouvrez le port 6379, qui est le port par défaut sur lequel Redis écoute. (Vous pouvez modifier le numéro de port dans le fichier de configuration.)

Créer l’application SignalR

Créez une application SignalR en suivant l’un de ces tutoriels :

Ensuite, nous allons modifier l’application de conversation pour prendre en charge le scaleout avec Redis. Tout d’abord, ajoutez le Microsoft.AspNet.SignalR.StackExchangeRedis package NuGet à votre projet. Dans Visual Studio, dans le menu Outils , sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Ensuite, ouvrez le fichier Startup.cs. Ajoutez le code suivant à la méthode Configuration :

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 » est le nom du serveur qui exécute Redis.
  • port est le numéro de port
  • « password » est le mot de passe que vous avez défini dans le fichier redis.conf.
  • « AppName » est n’importe quelle chaîne. SignalR crée un canal pub/sub Redis portant ce nom.

Par exemple :

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

Déployer et exécuter l’application

Préparez vos instances Windows Server pour déployer l’application SignalR.

Ajoutez le rôle IIS. Incluez les fonctionnalités de développement d’applications, notamment le protocole WebSocket.

Capture d’écran montrant l’Assistant Ajout de rôles et de fonctionnalités. Rôles serveur et Protocole WebSocket sont sélectionnés.

Incluez également le service de gestion (répertorié sous « Outils d’administration »).

Capture d’écran montrant l’Assistant Ajout de rôles et de fonctionnalités. Le service de gestion est sélectionné.

Installez Web Deploy 3.0. Lorsque vous exécutez le Gestionnaire des services Internet, il vous invite à installer Microsoft Web Platform, ou vous pouvez télécharger le programme d’installation. Dans le programme d’installation de plateforme, recherchez Web Deploy et installez Web Deploy 3.0

Capture d’écran montrant la boîte de dialogue 4 point 5 du programme d’installation de plateforme web. Web Deploy 3 point 0 est sélectionné.

Vérifiez que le service de gestion web est en cours d’exécution. Si ce n’est pas le cas, démarrez le service. (Si le service de gestion web ne figure pas dans la liste des services Windows, assurez-vous d’avoir installé le service de gestion lorsque vous avez ajouté le rôle IIS.)

Par défaut, le service de gestion web écoute sur le port TCP 8172. Dans le Pare-feu Windows, créez une règle de trafic entrant pour autoriser le trafic TCP sur le port 8172. Pour plus d’informations, consultez Configuration des règles de pare-feu. (Si vous hébergez les machines virtuelles sur Azure, vous pouvez le faire directement dans le Portail Azure. Consultez Comment configurer des points de terminaison sur une machine virtuelle.)

Vous êtes maintenant prêt à déployer le projet Visual Studio de votre ordinateur de développement sur le serveur. Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis cliquez sur Publier.

Pour obtenir une documentation plus détaillée sur le déploiement web, consultez Web Deployment Content Map pour Visual Studio et ASP.NET.

Si vous déployez l’application sur deux serveurs, vous pouvez ouvrir chaque instance dans une fenêtre de navigateur distincte et voir qu’ils reçoivent chacun des messages SignalR de l’autre. (Bien sûr, dans un environnement de production, les deux serveurs se trouvent derrière un équilibreur de charge.)

Capture d’écran de deux fenêtres de navigateur ouvertes montrant l’application déployée sur deux serveurs.

Si vous êtes curieux de voir les messages envoyés à Redis, vous pouvez utiliser le client redis-cli , qui s’installe avec Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Capture d’écran montrant une liste numérotée dans une fenêtre Redis.