Comprendre le problème en cas de rupture de production


24

Scénario:

  • Vous poussez vers la production
  • La poussée a cassé plusieurs choses
  • Cette même version n'a pas cassé qa ou dev
  • En tant que développeur, vous n'avez pas accès à prod.
  • Il y a beaucoup de pression d'en haut pour que les choses fonctionnent bien.

Détails:

  • Application PHP / MVC pilotée par API dans Zend.
  • Déployé sur quelques serveurs.

Ma question:

Pendant l'enquête, disons que j'ai l'impression que quelque chose ne va pas. Mais je n'en suis pas sûr. Et, bien sûr, je ne peux pas tester les choses en production. Si j'ai un correctif suggéré basé sur cette intuition, serait-il sage d'essayer de l'appliquer et de voir si cela fonctionne, avant de comprendre quel est le problème?


24
S'il n'a pas cassé DEV ou QA, mais a interrompu la production, c'est généralement un problème de configuration.
Mike L.

4
Bien que vous n'ayez peut-être pas personnellement accès à la production, vous devriez avoir un membre de l'équipe des opérations qui peut être vos yeux et vos mains afin de dépanner.
shufler

3
Avez-vous exclu des problèmes de configuration, par exemple l'accès à la base de données ou les autorisations réseau pouvant être utilisées dans la nouvelle version?
JB King

7
@MikeL. Ou des données corrompues qui n'existent pas en dev ou en QA.
maple_shaft

3
@shufler - Aux États-Unis, la loi Sarbanes-Oxley (aka SOX) exige que les développeurs n'aient pas accès à la production dans les sociétés cotées en bourse. Certaines entreprises ont leurs propres politiques internes qui limitent l'accès. Ceux-ci entrent généralement en vigueur après qu'un développeur a détruit l'ensemble du système en fonction d'une intuition.
jfrankcarr

Réponses:


33

Saisissez autant d'informations que possible sur le problème (fichiers journaux, etc.), puis ramenez les serveurs de production à un état de fonctionnement. C'est une douleur du point de vue du développeur, bien sûr, mais c'est très probablement une donnée.

Ensuite, essayez de voir si vous pouvez reproduire le problème dans un environnement de développement. Si vous le pouvez, corrigez-le et essayez à nouveau de le publier.

Si vous ne pouvez pas le reproduire, vérifiez si vous pouvez ajouter plus de diagnostics et publier sur un serveur pendant une courte période pour obtenir plus d'informations sur le problème.

Si cela n'est pas possible, examinez de plus près les différences entre la production et les environnements de développement / qa et essayez de rapprocher un environnement de développement de la production.


4

Comment bien vous comprenez le problème? Quel est le risque que votre intuition aggrave les choses? Est-il possible de revenir en arrière et de reproduire le problème dans les régions DEV / QA? Que pouvez-vous faire pour synchroniser votre région DEV / QA pour la rapprocher de PROD? Vous devez peut-être modifier certains paramètres environnementaux ou de base de données, vous devez peut-être importer les données PROD vers DEV, vous devez peut-être modifier certains paramètres de débogage.

En général, je ne recommanderais pas de pousser votre intuition d'une solution vers PROD à moins que vous ne puissiez confirmer qu'elle est en effet correcte dans une autre région. Je comprends le type de problèmes qui surviennent lorsqu'un bogue se produit dans PROD et ne peut être reproduit nulle part ailleurs. C'est à ce moment-là qu'il faut voir ce qui diffère entre DEV / QA et PROD et se concentrer sur ceux-ci. D'après mon expérience, il s'agit généralement d'un paramètre environnemental ou d'une configuration différente, en particulier pour PROD. Et je sais qu'il y a probablement beaucoup de pression d'en haut pour résoudre ce problème, il est donc possible de revenir à l' état de travail précédent , puis d'essayer de reproduire le problème dans DEV, de trouver un correctif dans DEV, puis d' essayer à nouveau dans PROD? C'est ce que je suggérerais.


5
Vous ne voulez certainement pas appliquer un correctif à une prod cassée dont vous ne savez pas avec certitude la corriger; cela ne fera probablement que le casser davantage! Mieux vaut revenir à un état stable et travailler en AQ où il y a moins de pression pour bien faire les choses la première et la seule fois.
Michael K

2

Dépend du type de correction. Le plus souvent, les problèmes de production qui n'apparaissent pas dans dev sont liés à des conflits dans la base de données. Donc, appliquer un bogue qui modifie le contenu de la base de données sans être sûr de ce qui est exactement "là-bas" peut être une première étape dans une grande catastrophe. Si vous pouvez facilement reprendre le changement, vous pourrez peut-être essayer. Mais en général, si vous n'avez pas d'accès direct, il devrait y avoir au moins une copie de la base de données ou de l'ensemble du serveur pour les tests. Les personnes disposant des privilèges appropriés devraient toujours exécuter le nouveau code, mais au moins sans risque de perte de données. (Mais parfois la taille de la base de données ou la complexité de l'infrastructure interdit une telle configuration)

C'est vraiment difficile, car il existe de nombreuses possibilités comme différents paramètres, bibliothèques et versions de logiciels.

Peut-être que vous pouvez d'abord écrire un morceau de code qui évalue avec une sortie de débogage si votre supposition pour la source du bogue était correcte et ensuite seulement appliquer le correctif de bogue réel.


1

Il s'agit généralement de problèmes de configuration ou de données, en supposant que le code et la base de données sont identiques entre Prod, QA et dev.

Je voudrais d'abord regarder ce qui suit:

  • Toutes les données de journalisation de votre code.
  • Vérifiez l'observateur d'événements pour les exceptions non gérées.
  • Vérifiez les données représentant la progression de votre application, elles peuvent être dans la base de données, les fichiers, etc. Est-ce logique ou non? Est ce que vous attendez?

Une fois que vous comprenez ce qui se passe, vous devez restaurer la production à un état de fonctionnement et travailler à résoudre le problème dans un environnement inférieur, jusqu'à ce qu'il soit résolu et redéployé en production.


0

Alors que votre environnement est PHP, j'ai fait une présentation sur la façon d'y penser pour Java: http://www.infoq.com/presentations/maintaining-production-java-apps

Les problèmes principaux sont les mêmes - pour comprendre les éventuels points d'étranglement pour dépanner la situation: réseau, accès au système de fichiers, fichiers journaux, blocages, etc. signifie: la page Web est-elle lente, y a-t-il un message d'erreur spécifique, y a-t-il un délai d'attente?, etc.

De plus, il existe des outils pour faciliter le dépannage: Wireshark pour le dépannage du réseau est un meilleur absolu et mérite d'être appris. D'autres dépendent de l'O / S que vous utilisez. Pour Windows, tout ce qui provient de SysInternal (qui fait maintenant partie de Microsoft) est génial. Pour Unix / Linux, regardez truss / strace.

Concernant l'accès à la production, le groupe des opérations doit savoir comment utiliser ces outils / techniques ou vous avez une analyse de rentabilisation pour eux (avec vous) pour apprendre à les utiliser. Après cela, ils ont besoin d'un ensemble spécifique de protocoles de dépannage pour s'exécuter en cas de problème, afin que vous puissiez faire votre analyse hors ligne.


0

Réponse courte: Pas si vous avez le choix.

Réponse longue: Si vous ne comprenez pas le problème, un tel patch comporte plusieurs risques:

  1. Vous pourriez casser quelque chose d'autre, qui pourrait même être moins reproductible.
  2. Vous pouvez simplement masquer le problème, le rendant plus difficile à remarquer et à reproduire (ce qui aggrave)
  3. Vous jetez une expérience domestique potentielle - une expérience qui pourrait faire de vous un meilleur programmeur et en même temps plus utile à votre entreprise (c'est-à-dire une future augmentation potentielle).

D'un autre côté, je ne vois aucun inconvénient à vérifier d'abord si votre solution hypothétique fonctionne, et si c'est le cas - puis à creuser plus profondément et à découvrir la vraie raison ou d'autres moyens éventuellement meilleurs pour résoudre le problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.