Das Problem verstehen, wenn in der Produktion etwas kaputt geht


24

Szenario:

  • Sie drängen zur Produktion
  • Der Stoß hat mehrere Dinge zerstört
  • Derselbe Build hat weder qa noch dev kaputt gemacht
  • Als Entwickler haben Sie keinen Produktzugriff.
  • Es gibt viel Druck von oben , um die Dinge wieder zum Laufen zu bringen.

Besonderheiten:

  • PHP / MVC-Anwendung, die in Zend API-gesteuert ist.
  • Auf wenigen Servern bereitgestellt.

Meine Frage:

Nehmen wir an, ich habe während der Untersuchung die Vermutung, dass etwas nicht stimmt. Aber ich weiß es nicht genau. Und natürlich kann ich Dinge in der Produktion nicht testen. Wenn ich einen Lösungsvorschlag habe, der auf dieser Vermutung basiert, wäre es ratsam, ihn anzuwenden und zu prüfen, ob er funktioniert, bevor Sie das Problem verstehen?


24
Wenn DEV oder QA nicht beschädigt wurden, die Produktion jedoch unterbrochen wurde, liegt in der Regel ein Konfigurationsproblem vor.
Mike L.

4
Möglicherweise haben Sie keinen persönlichen Zugriff auf die Produktion, aber Sie sollten ein Mitglied des Betriebsteams haben, das Ihre Augen und Hände sein kann, um Fehler zu beheben.
Shufler

3
Haben Sie Konfigurationsprobleme ausgeschlossen, z. B. Datenbankzugriff oder Netzwerkberechtigungen, die in der neuen Version verwendet werden können?
JB King

7
@MikeL. Oder beschädigte Daten, die in dev oder QA nicht vorhanden sind.
maple_shaft

3
@shufler - In den USA verlangt der Sarbanes-Oxley Act (auch bekannt als SOX), dass die Entwickler keinen Zugang zur Produktion in börsennotierten Unternehmen haben. Einige Unternehmen haben ihre eigenen internen Richtlinien, die den Zugriff beschränken. Diese treten normalerweise in Kraft, nachdem ein Entwickler das gesamte System aufgrund einer Vermutung heruntergefahren hat.
Jfrankcarr

Antworten:


33

Beschaffen Sie sich so viele Informationen wie möglich über das Problem (Protokolldateien usw.) und setzen Sie die Produktionsserver in einen funktionsfähigen Zustand zurück. Das ist natürlich aus Entwicklersicht ein Schmerz, aber höchstwahrscheinlich eine Selbstverständlichkeit.

Versuchen Sie als Nächstes, festzustellen, ob Sie das Problem in einer Entwicklungsumgebung reproduzieren können. Wenn du kannst, dann repariere es und versuche es erneut.

Wenn Sie es nicht reproduzieren können, prüfen Sie, ob Sie einem Server für kurze Zeit weitere Diagnosen hinzufügen und freigeben können, um weitere Informationen zum Problem zu erhalten.

Wenn dies nicht möglich ist, schauen Sie sich die Unterschiede zwischen der Produktions- und der Entwicklungsumgebung genauer an und versuchen Sie, eine Entwicklungsumgebung näher an die Produktion heranzuführen.


4

Wie gut verstehst du das Problem? Was ist das Risiko, dass Ihre Vermutung die Dinge verschlimmert? Ist es möglich, das Problem in DEV / QA-Regionen zu reproduzieren? Wie können Sie Ihre DEV / QA-Region synchronisieren, um sie näher an PROD heranzuführen? Vielleicht müssen Sie einige Umgebungs- oder Datenbankeinstellungen ändern, vielleicht müssen Sie die PROD-Daten in DEV importieren, vielleicht müssen Sie einige Debug-Einstellungen ändern.

Im Allgemeinen würde ich nicht empfehlen, Ihre Vermutung einer Lösung auf PROD zu übertragen, es sei denn, Sie können bestätigen, dass sie in einer anderen Region tatsächlich korrekt ist. Ich verstehe die Art von Problemen, die auftreten, wenn ein Fehler in PROD auftritt und nirgendwo anders reproduziert werden kann. Dann kommt es darauf an, zu sehen, was sich sonst noch zwischen DEV / QA und PROD unterscheidet, und sich auf diese zu konzentrieren. Nach meiner Erfahrung handelt es sich normalerweise um eine Umgebungseinstellung oder eine andere Konfiguration, insbesondere für PROD. Und ich weiß, dass es wahrscheinlich viel Druck von oben gibt, dies zu beheben. Es ist also möglich, einen Rollback zum vorherigen Arbeitszustand durchzuführen und dann zu versuchen, das Problem in DEV zu reproduzieren, eine Korrektur in DEV zu finden und dann zu versuchen wieder in PROD? Das würde ich vorschlagen.


5
Sie möchten auf keinen Fall einen Fix auf einen defekten Stößel anwenden, von dem Sie nicht sicher sind, dass er ihn reparieren wird. das wird wohl nur noch mehr kaputt machen! Es ist besser, in einen stabilen Zustand zurückzukehren und in der Qualitätssicherung zu arbeiten, in der der Druck geringer ist, ihn beim ersten und einzigen Mal richtig zu machen.
Michael K

2

Kommt auf die Art der Verlegenheit an. Meistens hängen Probleme in der Produktion, die in dev nicht auftreten, mit Konflikten in der Datenbank zusammen. Das Anwenden eines Fehlers, der den Datenbankinhalt ändert, ohne sicher zu sein, was genau "da draußen" ist, kann daher ein erster Schritt in einer großen Katastrophe sein. Wenn Sie das Wechselgeld problemlos zurücknehmen können, können Sie es möglicherweise ausprobieren. Wenn Sie jedoch keinen direkten Zugriff haben, sollte für Tests mindestens eine Kopie der Datenbank oder des gesamten Servers vorhanden sein. Personen mit den richtigen Berechtigungen müssten den neuen Code weiterhin ausführen, zumindest ohne das Risiko eines Datenverlusts. (Aber manchmal verbietet die Größe der Datenbank oder die Komplexität der Infrastruktur eine solche Einrichtung.)

Es ist wirklich schwierig, da es viele Möglichkeiten gibt, wie z. B. verschiedene Einstellungen, Bibliotheken und Softwareversionen.

Vielleicht können Sie zuerst einen Code schreiben, der mit einer Debug-Ausgabe ausgewertet wird, wenn Ihre Vermutung für die Fehlerquelle richtig war, und erst dann den eigentlichen Bugfix anwenden.


1

Normalerweise handelt es sich entweder um Konfigurations- oder Datenprobleme, vorausgesetzt, Code und DB sind zwischen Prod, QA und dev identisch.

Ich würde mir zuerst folgendes anschauen:

  • Alle Protokolldaten, die Ihr Code enthält.
  • Überprüfen Sie die Ereignisanzeige auf nicht behandelte Ausnahmen.
  • Überprüfen Sie die Daten, die den Fortschritt Ihrer Anwendung darstellen. Sie können sich in der Datenbank, in Dateien usw. befinden. Ist dies sinnvoll oder nicht? Ist das was du erwartest

Sobald Sie verstanden haben, was los ist, müssen Sie die Produktion in einen funktionsfähigen Zustand zurückversetzen und daran arbeiten, das Problem in einer niedrigeren Umgebung zu beheben, bis es behoben und erneut in der Produktion bereitgestellt wird.


0

Während Ihre Umgebung PHP ist, habe ich eine Präsentation darüber gehalten, wie Sie für Java darüber nachdenken sollen: http://www.infoq.com/presentations/maintaining-production-java-apps

Die Kernprobleme sind dieselben - um mögliche Choke-Punkte zur Fehlerbehebung zu verstehen: Netzwerk, Dateisystemzugriff, Protokolldateien, Deadlocks usw. Außerdem müssen Sie wissen, wie Sie die richtigen Fragen stellen: "System aus" - "Was genau tun Sie?" Mittelwert: Ist die Webseite langsam, gibt es eine bestimmte Fehlermeldung, gibt es eine Zeitüberschreitung "usw.

Darüber hinaus gibt es einige Tools, die die Fehlerbehebung vereinfachen: Wireshark für die Fehlerbehebung im Netzwerk ist absolut empfehlenswert und lohnenswert. Andere hängen von den von Ihnen verwendeten Betriebssystemen ab. Für Windows ist alles von SysInternal (jetzt Teil von Microsoft) brillant. Schauen Sie sich für Unix / Linux truss / strace an.

Beim Zugriff auf die Produktion sollte die Betriebsgruppe entweder wissen, wie diese Tools / Techniken verwendet werden, oder Sie haben einen Business Case für sie (zusammen mit Ihnen), um zu lernen, wie sie verwendet werden. Danach benötigen sie einen bestimmten Satz von Fehlerbehebungsprotokollen, um bei Auftreten eines Problems ausgeführt zu werden, sodass Sie Ihre Analyse offline durchführen können.


0

Kurze Antwort: Nicht, wenn Sie eine Wahl haben.

Lange Antwort: Wenn Sie das Problem nicht verstehen, birgt ein solcher Patch mehrere Risiken:

  1. Sie könnten etwas anderes zerbrechen, was noch weniger reproduzierbar sein könnte.
  2. Sie könnten das Problem einfach maskieren und es schwieriger machen, es zu bemerken und zu reproduzieren (was es noch schlimmer macht)
  3. Sie werfen potenzielle inländische Erfahrungen weg - Erfahrungen, die Sie zu einem besseren Programmierer und gleichzeitig zu einem wertvolleren Unternehmen machen könnten (dh zu einer potenziellen zukünftigen Steigerung).

Auf der anderen Seite sehe ich keinen Schaden, wenn ich zuerst überprüfe, ob Ihre hypothetische Korrektur funktioniert, und wenn dies der Fall ist, dann gehe ich tiefer und finde den wahren Grund oder andere möglicherweise bessere Möglichkeiten heraus, um das Problem zu lösen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.