Préserver les sessions avec IIS en Load Balancing

19 Déc 2015

Le Load Balancing est une technique qui permet de distribuer la charge de travail de façon uniforme sur deux ou plusieurs machines (ressources) afin d’obtenir une utilisation optimale des ressources et maximiser le temps de réponse tout en gardant une certaine sécurité afin d’éviter les surcharges.

Une session quant à lui est une technique permettant de sauvegarder temporairement (dépendamment de la configuration du serveur) sur le serveur Web des informations relatives à un utilisateur (browser). Pour chaque ouverture d’une nouvelle session, l’utilisateur reçoit un identifiant de session.

En l’occurence, dans une architecture en Load Balancing pour éviter de perdre vos sessions lorsque les utilisateurs seront dispatcher d’un serveur à l’autre, il faut que les sessions soient configurer correctement. Il existe plusieurs modes de configurations possible, dans le cas de cet articles nous allons aborder le mode SQL Server qui permet comme son nom l’indique de stocker l’état des sessions dans une base de données SQL Server.

Côté SQL Server

L’utilisation du mode SQL Server est le mode le plus fiable mais aussi le plus lent car les données des sessions seront stockées dans une base de données, donc n’oubliez pas de prendre en compte cette variable si vous décidez d’utiliser ce mode là.

La première consiste à initialiser une base de données afin de l’utiliser dans IIS. Cette initialisation peut se faire via l’outil aspnet_regsql.exe qui se trouve dans le répertoire suivant (si vous avez déjà votre environnement .NET installé) :

ASP.NET Reg

Vous pouvez soit lancer cet outil en interface graphique (en étant Administrateur) soit l’utiliser en ligne de commande pour faire le nécessaire. Dans notre cas voici la commande a utiliser pour préparer notre base de données :

  • ssadd : signifies que nous somme entrain d’ajouter le mode session SQL Server
  • sstype : pour indiquer le type de session, il en existe 3 :
    • t : pour temporaire, les données sont sauvegardé dans la base de données tempdb et sont perdus si le SQL Server redémarre
    • p : pour permanent, la commande créé une base de données ASPState et sauvegarde les données dedans
    • c : pour custom, même principe que le type p sauf que vous spécifiez la base de données
  • d : pour indiquer le nom de la base de données
  • s : pour indiquer le nom du serveur
  • E : pour indiquer que la commande doit utiliser l’authentification Windows

Bien entendu il est possible de lancer la même commande avec le nom d’utilisateur et mot de passe :

Si vous jeté un coup d’oeil dans votre serveur, vous verrez la nouvelle base de données avec plusieurs tables et plusieurs procédures stockées qui seront utilisées pour gérer les sessions.

SQL Server Session State

Côté Application

Dans votre application, dans le fichier Web.config,  vous devez déclarer le mode d’utilisation pour la gestion des sessions, pour cela ajoutez l’élément suivant :

Comme vous l’aurez devinez, la valeur de l’attribut allowCustomSqlDatabase permet de spécifier si vous avez utiliser le type custom lors de la création de votre base de données. Le sqlCommandTimeout représente le timeout en millisecondes suivit finalement du Connection String.

Côté IIS

Après avoir sauvegardé votre fichier config et fait la publication de votre application dans IIS, rendez vous dans la fonctionnalitée SessionState. Vous remarquez que IIS à correctement utiliser votre fichier de configuration pour mettre en place la gestion des sessions avec le mode SQL Server

03

IIS Session State SQL Mode