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?
bug
production
bitcykl
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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ę.
źródło
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:
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.
źródło
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.
źródło
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ą:
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.
źródło