Je ne suis pas sûr que ce soit la bonne façon de poser cette question, mais voici fondamentalement ce que j’aimerais faire :
1.) Pousser un ensemble de modifications vers un site dans IIS.
2.) Ne pas interrompre les utilisateurs.
3.) Pouvoir revenir en arrière sans effort.
Il y a donc quelques choses que je sais devoir être gérées :
1.) Session hors processus — fait
2.) Cache hors processus — fait
Les questions qui restent sont donc :
1.) Comment éviter d’interrompre les utilisateurs ? Si je télécharge simplement les fichiers dans bin, l’application recycle et met plus de 10 secondes à revenir en ligne.
2.) Comment revenir en arrière sans effort ?
Je pensais qu’une solution possible serait d’avoir deux sites configurés dans IIS, un public et un privé. Les téléchargements vont vers le privé et sont préchauffés. Après le préchauffage, les sites sont échangés. Un retour en arrière consiste simplement à échanger vers le privé sans téléchargement.
Cela semble solide en théorie, mais je ne suis pas sûr de la mécanique. Des idées ?
Voici comment j’aborderais ce problème — gardez à l’esprit que je n’ai pas fait cela avant, ce ne sont que des concepts que j’ai un peu testés dans mon environnement de développement. Vous devriez pouvoir mettre en place un cadre assez robuste en utilisant cela et du scripting dans le langage de votre choix. En gros, nous allons configurer un environnement de répartition de charge artisanal et l’utiliser pour basculer entre le nouveau site et l’ancien.
3 sites web IIS différents (avec 3 adresses IP différentes — utiliser simplement des ports ou des en-têtes d’hôte pourrait ne pas fonctionner ici)
Installez d’abord ARR.
Configurez les 3 sites web dans IIS :
Le site web 1 sera le site auquel vos utilisateurs se connectent réellement, disons http://192.168.1.1/. C’est aussi le site ARR. Configurez simplement un répertoire vide vers lequel il pointe, et placez-le dans son propre pool d’applications. Configurez le pool d’applications pour qu’il n’expire pas selon ces instructions.
Les sites web 2 et 3 seront les sites qui hébergent réellement votre contenu. Ils doivent avoir leurs propres adresses IP et, en raison du fonctionnement d’ARR, être sur un port différent du site web 1. Disons qu’ils sont http://192.168.1.2:8080 et http://192.168.1.3:8080. Ils devraient aussi être dans leurs propres pools d’applications et pointer vers des répertoires différents sur le système de fichiers (mais les deux répertoires ont le même contenu en général).
Après avoir installé ARR, il y aura une nouvelle catégorie dans le Gestionnaire IIS appelée « Fermes de serveurs » — faites un clic droit dessus et créez une nouvelle ferme.
Donnez-lui un nom significatif pour vous
Ajoutez le serveur web 2 et le serveur web 3 en tant que serveurs — assurez-vous de cliquer sur le bouton « Paramètres avancés », ouvrez la catégorie « applicationRequestRouting » et changez le httpPort à 8080 pour chaque serveur
Terminez l’assistant — on vous demandera si vous souhaitez créer des règles de réécriture d’URL — cliquez sur Oui
Vous avez maintenant une ferme de serveurs — pour terminer la configuration, allez dans la ferme et cliquez sur le bouton Configuration du proxy — activez « Réécriture inverse de l’hôte dans les en-têtes de réponse » et appliquez les modifications
Dans le Gestionnaire IIS, allez au niveau racine du serveur et cliquez sur le bouton Réécriture d’URL, il y aura une règle qui a été créée pour votre ferme
Double-cliquez sur la règle pour accéder aux paramètres
Ouvrez la section Conditions
Ajoutez une nouvelle condition pour {SERVER_PORT} ne correspond pas à 8080
Appliquez les modifications
À ce stade, vous avez les bases de ce dont nous avons besoin pour répondre à votre demande. Si vous allez à http://192.168.1.1/, vous obtiendrez votre site web depuis le site 1 ou le site 2, mais ce sera totalement transparent qu’il y a d’autres sites.
Maintenant, ce que vous pouvez faire lorsque vous souhaitez déployer une nouvelle version de votre application :
Drainez l’un des serveurs de votre ferme (dans les outils de la ferme de serveurs, allez dans « Surveillance et gestion », choisissez un serveur et choisissez « Rendre le serveur indisponible progressivement »)
Déployez votre nouvelle version du site sur le système qui est hors ligne
Préchauffez le site hors ligne en utilisant son adresse IP/port alternatif
Remettez le site disponible dans la ferme
Répétez le processus pour l’autre serveur
L’outil Web Deployment entre en jeu lorsque vous souhaitez scripter tout cela. Il facilite grandement la création d’un package pour votre application et son déploiement depuis la ligne de commande. Vous pouvez également facilement annuler ce package s’il y a des problèmes. ARR est également scriptable en utilisant les DLL Microsoft.Web.Administration.
Une autre chose — si vous êtes effectivement sur Windows 2008 R2 (c’est-à-dire IIS 7.5), jetez un œil au module Application Warmup — il devrait faciliter la partie préchauffage.