Comment mettre à jour un site Web actif en direct de la manière la plus politique possible?

StackOverflow https://stackoverflow.com/questions/67368

Question

Lorsque vous appliquez des modifications à un site Web actif, comment vous y prendre pour vérifier que le système actif fonctionne correctement? Quels outils utilisez-vous? Qui le fait? Bloquez-vous l'accès au site pour la période de test? Quel temps d'arrêt est acceptable?

Était-ce utile?

La solution

J'ai tendance à faire tous mes tests dans un autre environnement (pas celui en direct!). Cela me permet de transmettre les mises à jour sur le site actif en sachant que le code devrait fonctionner correctement et que je ne fais que des tests de cohérence sur les données réelles. Assurez-vous de ne pas oublier un fichier quelque part ou que quelque chose de bizarre a mal tourné.

Des tests appropriés dans un environnement de test ou de test, puis une simple vérification de cohérence. Pas besoin de temps d'arrêt.

Autres conseils

Beaucoup de bons conseils déjà.

Comme les gens l’ont mentionné, si vous n’avez pas un point unique impliqué, il est simple de simplement introduire progressivement les modifications en mettant à niveau un serveur d’application à la fois. Mais c'est rarement le cas, alors ignorons cela et concentrons-nous sur les éléments difficiles.

Il y a généralement une base de données commune à tout le reste. Cela signifie donc des temps d'arrêt pour l'ensemble du système. Comment minimisez-vous cela?

Automatisation . Scriptez toute la procédure de déploiement. Ceci (en particulier) inclut toutes les modifications de schéma de base de données. Ceci (en particulier) inclut toute migration de données dont vous avez besoin entre les versions du schéma.

Contrôle de la qualité . Assurez-vous qu'il y a des tests. Tests d'acceptation automatisés (ce que l'utilisateur voit et attend du point de vue de la logique métier / de l'expérience). Pensez à disposer de comptes de test dans le système de production sur lesquels vous pouvez créer un script pour tester les activités en lecture seule. Si vous n'interagissez pas avec d'autres systèmes externes, envisagez également d'effectuer des activités d'écriture. Vous devrez peut-être filtrer l'activité du compte test dans certaines parties du système, notamment si elles traitent d'argent et de comptabilité. Les compteurs de haricots se fâchent, pour de bonnes raisons, quand les haricots ne correspondent pas.

Répéter . Déployez-vous dans un environnement de transfert le plus identique possible à la production. Faites cela avec les volumes de données de production et les données de production. Vous devez savoir combien de temps prend une table de remplacement. Et vous devez vérifier qu'une table de modification fonctionne à la fois structurellement et avec toutes les clés étrangères dans les données réelles.

Si vous avez d’énormes volumes de données, les modifications de schéma prendront du temps. Peut-être plus de temps que vous pouvez vous permettre d'être en panne. Une solution consiste à utiliser les migrations de données en plusieurs phases , de sorte que le changement de schéma soit renseigné avec l'option "récent". ou " courant " (disons âgés de un ou trois mois) pendant la période d'indisponibilité, et les données des cinq années restantes peuvent arriver une fois que vous êtes à nouveau en ligne. Pour l'utilisateur final, les choses se présentent bien, mais certaines fonctionnalités ne sont accessibles que pendant quelques heures / jours / peu importe.

Au travail, nous passons un moment avec le code figé dans l'environnement de test. Après quelques semaines de préavis, nous démontons le site à minuit vendredi soir, nous travaillons toute la nuit pour le déployer et le valider et le mettre en place samedi en fin de matinée. Les statistiques de circulation nous ont montré que c’était le meilleur délai pour le faire.

Si vous disposez d'un ensemble de serveurs dont la charge est équilibrée, vous pourrez passer séparément l'un après l'autre et le mettre à jour. Pas de temps d'arrêt pour les utilisateurs!

Créez une jolie image et / ou une page de sauvegarde en cours de désarmement. Certains sites implémentent des jeux javascript simples pour vous tenir occupé en attendant la mise à jour.

Par exemple, échec à la baleine.

-Adam

Au dernier endroit où je travaillais, l’assurance qualité effectuait des tests dans l’environnement assurance qualité. Tous les problèmes majeurs seraient résolus, testés et vérifiés avant d'être déployés.

Une fois la construction certifiée par le contrôle qualité, l'équipe d'assistance à la production a transmis le code à l'environnement de stockage intermédiaire, dans lequel le client examine le site et vérifie que tout fonctionne comme souhaité.

Le déploiement de la production s'effectue en dehors des heures de bureau (après 21 heures s'il s'agit d'une opération urgente de nuit, ou de 5 à 8 heures s'il s'agit d'un déploiement normalement planifié).

Le site est hébergé sur plusieurs serveurs, dont la charge est équilibrée à l'aide d'un équilibreur de charge F5:

  • Deux serveurs sont retirés de la production,
  • le code est installé et
  • une vérification rapide est effectuée sur les serveurs avant de les replacer dans le pool.

Ceci est répété jusqu'à ce que tous les serveurs soient mis à niveau vers le code le plus récent et permet au site de rester actif toute la journée.

Ce processus est idéal, mais il existe des cas où la base de données doit également être mise à niveau. Si tel est le cas, vous avez le choix entre deux options, selon que la nouvelle base de données casse le site ou non.

Si la nouvelle base de données est incompatible avec le front-end existant, vous n'avez d'autre choix que de disposer d'une fenêtre de temps pendant laquelle le site est en panne.

Toutefois, si la nouvelle base de données est compatible avec le système frontal existant, vous pouvez toujours extraire le code sans interruption réelle, mais cela nécessite la présence de deux serveurs de base de données de production.

  • Tout le trafic est routé vers la deuxième base de données et le premier serveur de base de données est extrait.
  • La première base de données est mise à niveau et, une fois la vérification terminée, remise en production.
  • Tout le trafic est acheminé vers le premier DB et le second DB est extrait.
  • La deuxième base de données est mise à niveau et, une fois la vérification terminée, remise en production.
  • L'étape suivante consiste à effectuer les mises à niveau partielles décrites ci-dessus.

Donc, pour résumer:

  • Lorsque vous appliquez des modifications à un site Web actif, comment vous assurez-vous que le système actif fonctionne correctement? Dans le meilleur des cas, cela se fait de manière incrémentielle.

  • Quels outils utilisez-vous? Des contrôles manuels pour vérifier que le code est correctement installé, ainsi que des tests automatisés de base, à l'aide de n'importe quel outil d'automatisation. Nous avons utilisé Selenium IDE.

  • Qui le fait? Le DBA effectue les mises à niveau de la base de données, le support technique / les administrateurs système poussent / récupèrent les serveurs et installent le code, et le support technique ou de production effectue les tests manuels et / ou les exécutions. les tests automatisés.

  • Bloquez-vous l'accès au site pour la période de test? Si possible, évitez-le à tout prix, en particulier, comme Gilles l'a mentionné précédemment, s'il s'agit d'un site payant.

  • Quelle est la durée d'indisponibilité acceptable? Les temps d'indisponibilité doivent être limités aux moments où les utilisateurs seraient le moins susceptibles d'utiliser le site. Ils doivent être effectués en moins de 3 heures.
    Remarque: 3 heures, c'est très généreux. Après la pratique et les répétitions, comme mentionné par jplindstrom, l’équipe mettra fin à tout le processus et pourra entrer et sortir en moins d’une heure.

J'espère que ça aide!

Cela dépend en partie si vous mettez également à jour une base de données. Auparavant, si la base de données était mise à jour, nous arrêtions le site pour une période de maintenance planifiée (et publiée), ce qui correspond généralement à une heure de pointe avec un impact minimal. Si la mise à jour ne concerne pas la base de données, dans un environnement à charge équilibrée, nous extrairions 1 boîte du mélange, déploierions & amp; tester. Si cela a été un succès, cela a été intégré et l’autre boîte (en supposant 2 boîtes) a été mise en évidence et mise à jour / testée.

Remarque: nous ne testons PAS le code, mais simplement comme le déploiement s'est bien déroulé, les temps d'indisponibilité étaient donc minimes. Comme cela a été mentionné, le code devrait déjà avoir été testé dans un autre environnement.

IMHO longs arrêts (heures) sont acceptables pour un site gratuit. Si vous éduquez suffisamment vos utilisateurs, ils comprendront que c'est une nécessité. Peut-être leur donner quelque chose à jouer jusqu'à ce que le site Web soit restauré (par exemple, jeu flash, flux en direct webcam montrant l'équipe de développement au travail, etc.). Pour un site Web auquel les gens paient pour accéder, beaucoup de gens vont perdre votre temps avec des plaintes si vous leur indiquez des temps d'arrêt réguliers. J'éviterais les temps d'arrêt comme la peste et déploierais les mises à jour très lentement et avec précaution si j'utilisais un service qui fait payer les utilisateurs.

Dans ma configuration actuelle, j'ai un site Web secondaire connecté à la même base de données et au même cache que la copie dynamique pour tester mes modifications.

J'ai également plusieurs "observateurs de page". des scripts exécutés sur des tâches cron utilisant des expressions régulières pour vérifier que le site Web affiche correctement les pages clés.

La réponse est que "cela dépend". Tout d’abord, sur le type d’environnement dans lequel vous vous relâchez. Est-ce "bonjour, monde"? type de site Web sur un hôte partagé quelque part ou sur google.com avec des serveurs d’un demi-million? Y a-t-il généralement un utilisateur par jour, ou plus, quelques millions? Publiez-vous du code HTML / CSS / JPG ou existe-t-il un très gros système d’accès complexe avec des serveurs SQL, des serveurs de niveau intermédiaire, des caches distribués, etc.?

En général, si vous pouvez vous permettre d’avoir des environnements distincts pour le développement, l’AQ, la planification et la production, en avez. Si vous avez les ressources - créez l’écosystème de manière à pouvoir créer le package complet installable en 1 (un) clic. Et assurez-vous que la même même installation binaire peut être installée avec succès dans DEV / QA / STAGE / PROD en un seul clic ... Il y a des tonnes de choses écrites sur ce sujet, et vous devez être plus spécifique avec votre question pour obtenir une réponse raisonnable

Exécutez votre serveur principal sur un port autre que 80. Placez-y un serveur léger (par exemple, nginx) sur le port 80. Lorsque vous mettez à jour votre site, démarrez une autre instance sur un nouveau port. Tester. Lorsque vous êtes convaincu qu'il a été déployé correctement, modifiez votre fichier de configuration du proxy et redémarrez-le. Dans le cas de nginx, cela aboutit à zéro demande ou à l'échec des demandes et peut également améliorer les performances par rapport à l'option d'hébergement plus typique d'Apache.

Bien entendu, cela ne remplace pas un serveur de transfert approprié, il s'agit simplement d'une manière "polie" d'effectuer le transfert avec des ressources limitées.

Pour tout tester le mieux possible sur un site de développement séparé avant de commencer, j’utilise Selenium  (un testeur de page Web) pour parcourir tous les navigables parties du site, remplissez les valeurs factices dans les formulaires, vérifiez que ces valeurs apparaissent aux bons endroits, etc.

Il est assez puissant pour vérifier beaucoup de javascript ou trucs dynamiques aussi.

Ensuite, une brève analyse avec Selenium à nouveau après la mise à niveau du site en direct vérifie que la mise à jour travaillé et qu’il ne manque aucun lien ou erreur de base de données.

Cela m'a sauvé plusieurs fois en attrapant des erreurs subtiles qui J'aurais manqué de feuilleter manuellement.

De plus, si vous placez le site en direct derrière une sorte de "proxy inverse". ou l'équilibreur de charge (s'il est gros), cela facilite le basculement retour à la version précédente s'il y a des problèmes.

La seule façon de le rendre transparent pour vos utilisateurs est de le placer derrière un proxy à charge équilibrée. Vous mettez un serveur hors service pendant que vous mettez à jour un autre serveur. Ensuite, lorsque vous avez terminé la mise à jour, mettez celle que vous avez mise à jour en ligne et supprimez l’autre. C'est comme ça que nous le faisons.

Si vous avez une sorte de 'bêta " construire, ne le déployez pas sur le serveur live. Si vous avez un site actif et actif, il est fort probable que les gens vont marteler dessus et casser quelque chose.

Il s'agit d'une configuration typique à haute disponibilité. Pour maintenir cette haute disponibilité, vous aurez besoin de 3 serveurs minimum. 2 live et 1 serveur de test. Plus tous les serveurs supplémentaires si vous voulez avoir une base de données dédiée ou quelque chose.

Créez une classe d’hôte et déployez votre site actif sur cette classe d’hôte. Par classe d’hôte, je veux dire un ensemble d’hôtes où l’équilibrage de charge est configuré et il est facile d’ajouter et de supprimer des hôtes de la classe.

Lorsque vous avez terminé les tests bêta et que vous êtes prêt pour la production, inutile de supprimer votre site, supprimez simplement un hôte de la classe hôte de production, ajoutez-le à la nouvelle classe hôte, déployez votre dernier code et testez correctement. Une fois que vous êtes certain que tout fonctionne correctement, déplacez progressivement votre hôte vers le nouveau et indiquez la nouvelle classe d’hôte comme classe d’hôte de production. Ou vous pouvez utiliser la même chose que vous utilisiez initialement. L’idée principale de cette activité est de vous assurer que vous testez votre déploiement sur les zones de production, où votre site sera exécuté après le déploiement, car les problèmes de déploiement sont effrayants et difficiles à déboguer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top