Zrozumienie problemu związanego z awarią produkcji

24

Scenariusz:

  • Naciskasz na produkcję
  • Pchnięcie złamało wiele rzeczy
  • Ta sama wersja nie złamała qa ani dev
  • Jako programista nie masz dostępu do prod.
  • Jest wiele presją powyżej dostać rzeczy działa agian.

Specyfika:

  • Aplikacja PHP / MVC oparta na API w Zend.
  • Wdrożono na kilku serwerach.

Moje pytanie:

Podczas badania powiedzmy, że mam przeczucie, że coś jest nie tak. Ale nie wiem na pewno. I oczywiście nie mogę przetestować produkcji. Jeśli mam sugerowaną poprawkę opartą na tym przeczuciu, czy rozsądnie byłoby spróbować ją zastosować i sprawdzić, czy działa, zanim zrozumie, na czym polega problem?

bitcykl
źródło
24
Jeśli nie złamał DEV lub QA, ale zepsuł produkcję, zwykle jest to problem z konfiguracją.
Mike L.,
4
Chociaż możesz osobiście nie mieć dostępu do produkcji, powinieneś mieć członka zespołu operacyjnego, który może być twoimi oczami i rękami w celu rozwiązywania problemów.
shufler
3
Czy wykluczyłeś problemy z konfiguracją, np. Dostęp do bazy danych lub uprawnienia sieciowe, które mogą być używane w nowej wersji?
JB King
7
@MikeL. Lub uszkodzone dane, które nie istnieją w Dev ani QA.
wałek klonowy
3
@shufler - W Stanach Zjednoczonych ustawa Sarbanes – Oxley (znana również jako SOX) wymaga, aby programiści nie mieli dostępu do produkcji w spółkach giełdowych. Niektóre firmy mają własne zasady wewnętrzne ograniczające dostęp. Zazwyczaj wchodzą one w życie po tym, jak programista zniszczy cały system w oparciu o przeczucie.
jfrankcarr

Odpowiedzi:

33

Zbierz jak najwięcej informacji o problemie (pliki dziennika itp.), A następnie przywróć serwery produkcyjne do stanu roboczego. Jest to oczywiście ból z punktu widzenia dewelopera, ale najprawdopodobniej jest dany.

Następnie spróbuj sprawdzić, czy możesz odtworzyć problem w środowisku programistycznym. Jeśli możesz, to napraw i spróbuj ponownie.

Jeśli nie możesz go odtworzyć, sprawdź, czy możesz dodać więcej diagnostyki i zwolnić na jeden serwer na krótki czas, aby uzyskać więcej informacji o problemie.

Jeśli nie jest to możliwe, przyjrzyj się bliżej różnicom między produkcją a środowiskami dev / qa i spróbuj zbliżyć środowisko deweloperskie do produkcji.

Chris Card
źródło
4

Jak dobrze rozumiesz problem? Jakie jest ryzyko, że twoje przeczucie pogorszy sytuację? Czy można wrócić i odtworzyć problem w regionach DEV / QA? Co możesz zrobić, aby zsynchronizować region DEV / QA, aby zbliżyć go do PROD? Może trzeba zmienić niektóre ustawienia środowiskowe lub bazy danych, może trzeba zaimportować dane PROD do DEV, a może trzeba zmienić niektóre ustawienia debugowania.

Zasadniczo nie polecam przesuwania twojego przeczucia rozwiązania do PROD, chyba że możesz potwierdzić, że rzeczywiście jest on poprawny w innym regionie. Rozumiem rodzaje problemów, które pojawiają się, gdy błąd występuje w PROD i nie można go odtworzyć nigdzie indziej. Wtedy sprowadza się do zobaczenia, co jeszcze różni się między DEV / QA i PROD, i skupienia się na nich. Z mojego doświadczenia wynika, że ​​zazwyczaj jest to ustawienie środowiskowe lub inna konfiguracja, która jest inna, szczególnie dla PROD. Wiem, że prawdopodobnie istnieje duża presja z góry, aby to naprawić, więc można przywrócić poprzedni stan roboczy, a następnie spróbować odtworzyć problem w DEV, wymyślić poprawkę w DEV, a następnie spróbować ponownie w PROD? Tak sugerowałbym.

FrustratedWithFormsDesigner
źródło
5
Na pewno nie chcesz zastosować poprawki do zepsutego produktu, o którym nie wiesz na pewno, że to naprawi; to prawdopodobnie tylko to złamie! Lepiej przywrócić do stabilnego stanu i pracować w kontroli jakości, gdzie jest mniej presji, aby zrobić to dobrze za pierwszym i jedynym razem.
Michael K
2

Zależy od rodzaju poprawki. Najczęściej problemy w produkcji, które nie pojawiają się w dev są związane z rywalizacją w bazie danych. Tak więc zastosowanie błędu, który zmienia zawartość bazy danych bez pewności, co dokładnie jest „tam”, może być pierwszym krokiem w przypadku dużej katastrofy. Jeśli możesz łatwo cofnąć zmianę, możesz spróbować. Ogólnie jednak, jeśli nie masz bezpośredniego dostępu, powinna istnieć przynajmniej kopia bazy danych lub całego serwera do testów. Osoby z odpowiednimi uprawnieniami nadal będą musiały uruchomić nowy kod, ale przynajmniej bez ryzyka utraty danych. (Ale czasami rozmiar bazy danych lub złożoność infrastruktury uniemożliwia taką konfigurację)

To naprawdę trudne, ponieważ istnieje wiele możliwości, takich jak różne ustawienia, biblioteki i wersje oprogramowania.

Być może możesz najpierw napisać fragment kodu, który ocenia przy użyciu danych wyjściowych debugowania, jeśli zgadłeś, co było przyczyną błędu, i dopiero wtedy zastosuj poprawkę.

Thorsten Müller
źródło
1

Zwykle są to problemy z konfiguracją lub danymi, przy założeniu, że kod i DB są identyczne między Prod, QA i dev.

Najpierw spojrzałbym na następujące:

  • Wszelkie dane logowania, które posiada Twój kod
  • Sprawdź przeglądarkę zdarzeń pod kątem nieobsługiwanych wyjątków.
  • Sprawdź dane reprezentujące postęp aplikacji, mogą znajdować się w bazie danych, plikach itp. Czy to ma sens, czy nie? Czy tego oczekujesz?

Gdy zrozumiesz, co się dzieje, musisz przywrócić produkcję do stanu roboczego i pracować nad rozwiązaniem problemu w niższym środowisku, aż do rozwiązania i ponownego wdrożenia w produkcji.

Życie to coś więcej
źródło
0

Podczas gdy twoim środowiskiem jest PHP, przygotowałem prezentację na temat tego, jak o tym myśleć w Javie: http://www.infoq.com/presentations/maintaining-production-java-apps

Podstawowe kwestie są takie same - aby zrozumieć możliwe dławiki w celu rozwiązania problemu: sieć, dostęp do systemu plików, pliki dziennika, zakleszczenia itp. Ponadto, aby wiedzieć, jak zadawać właściwe pytania: „System wyłączony” - „Co konkretnie robisz? oznacza: czy strona jest wolna, czy pojawia się komunikat o błędzie, czy upłynął limit czasu itp.

Ponadto istnieją narzędzia ułatwiające rozwiązywanie problemów: Wireshark do rozwiązywania problemów z siecią jest absolutnie najlepszy i warto się go nauczyć. Inne zależą od używanego systemu operacyjnego. W systemie Windows wszystko z SysInternal (obecnie część Microsoft) jest genialne. W systemach Unix / Linux spójrz na truss / strace.

Po uzyskaniu dostępu do produkcji grupa operacyjna powinna albo wiedzieć, jak korzystać z tych narzędzi / technik, albo mieć dla nich uzasadnienie biznesowe (wraz z tobą), aby dowiedzieć się, jak z nich korzystać. Następnie potrzebują określonego zestawu protokołów rozwiązywania problemów do uruchomienia w przypadku wystąpienia problemu, aby można było przeprowadzić analizę w trybie offline.

Alexandre Rafałowicz
źródło
0

Krótka odpowiedź: Nie, jeśli masz wybór.

Długa odpowiedź: jeśli nie rozumiesz problemu, istnieje kilka zagrożeń związanych z taką łatką:

  1. Możesz złamać coś innego, co może być nawet mniej powtarzalne.
  2. Możesz po prostu zamaskować problem, co utrudni jego zauważenie i reprodukcję (co go pogorszy)
  3. Wyrzucasz potencjalne doświadczenia domowe - doświadczenie, które może uczynić cię lepszym programistą, a jednocześnie bardziej wartościowym dla Twojej firmy (tj. Potencjalnej przyszłej podwyżki).

Z drugiej strony nie widzę żadnej szkody przy pierwszym sprawdzeniu, czy hipotetyczna poprawka działa, a jeśli tak - to kop głębiej i znajdź prawdziwy powód lub inne możliwe lepsze sposoby rozwiązania problemu.

Yam Marcovic
źródło