Déployer un site web sous Azure est quelque chose de parfaitement maitrisé, simple et efficace.

Mieux, le load balancing se résume à une ligne de configuration dans un fichier xml azure. Ainsi, en quelques clics, il est possible de déployer plusieurs instances, ou noeuds, ou web roles, le tout load balancé automatiquement.

Que du bonheur donc !!

… ou pas :)

Petit problème du jour : Les noeuds (web roles) Azure sont “State less” : Ils ne gèrent pas l’affinité de la session.

Du coup, vous n’êtes pas garantie qu’une requête HTTP soit correctement redirigée vers le bon web role.

Bref un site web avec une gestion poussée de la session ne peut pas être load balancé en l’état actuel des choses, sur AZURE.

Pour pallier à ce problème, il est possible d’utiliser un système personnalisé de gestion des sessions. Il existe de base un fournisseur (provider) de session SQL : le SqlSessionsStateStore.

Malheureusement pour nous, celui ne fonctionne PAS sur azure, dû notamment à l’utilisation de fonction SQL non autorisées dans SQL AZURE pour le moment

image

Utilisation de la procédure stockée système sysobjects non autorisé sur SQL Azure

Autre problème : Le provider SQL utilise l’agent SQL pour effacer les sessions expirées. Et ce fameux agent n’est pas disponible sur SQL AZURE…

Il ne manque pas grand chose pour faire fonctionner ce système sur Sql Azure

  1. Résoudre les problèmes de T-SQL non autorisé
  2. Utiliser un Worker Role pour réaliser le travail de l’agent SQL

J’ai donc développé une solution complète qui résout ces problèmes et permet ainsi de gérer la session d’un site web load balancé sous Azure !

Note : Pour autoriser le fonctionnement de votre fournisseur de session personnalisé, n’oubliez pas d’activer l’option “Enable Full Trust” de votre Web Role

image

Vous trouverez la solution complète sur Codeplex à l’adresse suivante : http://azuresqlsession.codeplex.com/

Au final, vous pourrez mettre facilement en place :

Un site web gérant la session via le fournisseur de session personnalisé pour SQL AZURE

image