Zalecenia dotyczące projektowania strategii testowania niezawodności

Dotyczy tego zalecenia dotyczącego listy kontrolnej niezawodności platformy Azure Well-Architected Framework:

RE:08 Przetestuj pod kątem scenariuszy odporności i dostępności, stosując zasady inżynierii chaosu w środowiskach testowych i produkcyjnych. Użyj testów, aby upewnić się, że implementacja i strategie skalowania są skuteczne dzięki aktywnej awarii i symulowanym testom obciążeniowym.

W tym przewodniku opisano zalecenia dotyczące projektowania strategii testowania niezawodności w celu weryfikowania i optymalizowania niezawodności obciążenia. Testowanie niezawodności koncentruje się na odporności i dostępności obciążenia, a w szczególności o krytycznych przepływach identyfikowanych podczas projektowania rozwiązania. Ten przewodnik zawiera ogólne wskazówki i wskazówki dotyczące wstrzykiwania błędów i inżynierii chaosu.

Definicje

Okres Definicja
Dostępność Czas działania obciążenia aplikacji w dobrej kondycji bez znaczących przestojów.
Inżynieria chaosu Praktyka poddania się aplikacjom i usługom w rzeczywistych stresach i awariach. Celem inżynierii chaosu jest budowanie i weryfikowanie odporności na zawodne warunki i brakujące zależności.
Wstrzykiwanie błędów Działanie wprowadzenia błędu do systemu w celu przetestowania odporności systemu.
Odzyskanie Synonim odporności.
Odporność Zdolność obciążenia aplikacji do wytrzymania i odzyskania sprawności po trybach awarii.

Kluczowe strategie projektowania

Ogólne wskazówki dotyczące testowania

  • Rutynowo przeprowadzaj testy w celu zweryfikowania istniejących progów, celów i założeń. W przypadku wystąpienia poważnych zmian w obciążeniu należy uruchomić regularne testowanie. Przeprowadzaj większość testów w środowiskach testowych i przejściowych. Korzystne jest również uruchomienie podzbioru testów w systemie produkcyjnym. Planowanie parzystości jeden do jednego kluczowych środowisk testowych przy użyciu środowiska produkcyjnego.

  • Automatyzowanie testowania w celu zapewnienia spójnego pokrycia testów i powtarzalności. Automatyzowanie typowych zadań testowania i integrowanie ich z procesami kompilacji. Ręczne testowanie oprogramowania jest żmudne i podatne na błędy, ale można przeprowadzić ręczne testowanie eksploracyjne. W przypadku, gdy konieczne jest opracowanie testów automatycznych, należy użyć testowania ręcznego, aby określić zakres testów do opracowania.

  • Wdrożenie podejścia do testowania z przesunięciem w lewo w celu przeprowadzenia testowania odporności i dostępności na wczesnym etapie cyklu programowania.

  • Dostosuj prosty format dokumentacji, aby wszyscy mogli łatwo zrozumieć proces i wyniki każdego regularnego testu.

  • Udostępnij udokumentowane wyniki odpowiednim zespołom, na przykład zespołom operacyjnym, kierownictwu technologii, uczestnikom projektu biznesowego i uczestnikom projektu odzyskiwania po awarii. Wyniki powinny informować o uściśleniu celów dotyczących niezawodności, takich jak cele poziomu usług (SLO), umowy dotyczące poziomu usług (SLA), cele czasu odzyskiwania (RTO) i cele punktu odzyskiwania (RPO).

  • Utwórz regularny cykl testowania kopii zapasowych. Przywróć dane w izolowanych systemach, aby upewnić się, że kopie zapasowe są prawidłowe i czy przywracanie działa.

  • Dokumentowanie i udostępnianie metryk czasu odzyskiwania osobom biorącym udział w odzyskiwaniu po awarii, aby upewnić się, że oczekiwania dotyczące odzyskiwania są odpowiednie.

  • Użyj standardowych procedur testowania wdrażania w branży, aby zapewnić, że masz zautomatyzowany, przewidywalny i wydajny proces wdrażania.

  • Przetestuj zdolność obciążenia do wytrzymania przejściowych awarii. Aby uzyskać więcej informacji, zobacz Zalecenia dotyczące obsługi błędów przejściowych.

  • Przetestuj zdolność obciążenia do reagowania na zmiany wzorców obciążenia i skoków użycia. Te informacje ułatwiają testowanie strategii skalowania. Aby uzyskać informacje o obciążeniu i testowaniu przeciążeniowym, zobacz Zalecenia dotyczące testowania.

  • Przetestuj, jak obciążenie obsługuje błędy w usługach zależnych lub innych zależnościach przy użyciu iniekcji błędów.

  • Przetestuj i zweryfikuj, jak projekt samonaprawiania i samozachowawczy reaguje na awarie. Testowanie operacji automatycznego i ręcznego odzyskiwania.

  • Przetestuj plan odzyskiwania po awarii , aby reagować na katastrofalne awarie i inne poważne zdarzenia.

  • Przetestuj zdolność obciążenia do bezproblemowego obniżenia wydajności i zminimalizowania promienia wybuchu awarii składnika przy użyciu iniekcji błędów.

Korzystanie z planowanych i nieplanowanych awarii

Gdy obciążenie jest w trybie offline z powodu planowanej konserwacji lub nieplanowanej awarii, masz unikatową okazję do przeprowadzania testów i ulepszania zrozumienia obciążenia. Poniższe sekcje zawierają zalecenia dotyczące każdego scenariusza.

Planowana konserwacja

W przypadku zaplanowanych okien obsługi aktualizacji lub poprawek można przetestować składniki i przepływy, które nie są zaangażowane w prace konserwacyjne. Przeprowadź testy bez potencjalnego ryzyka nieoczekiwanego obniżenia obciążenia lub całkowitego przełączenia go w tryb offline. Jeśli masz wystarczająco dużo czasu podczas okna obsługi, możesz również przetestować składniki i przepływy, które są zaangażowane w konserwację po zakończeniu prac konserwacyjnych.

Nieplanowana awaria

Użyj każdego zdarzenia awarii jako okazji, aby dowiedzieć się więcej o obciążeniu i poprawić jego odporność, wykonując następujące kroki uporządkowane według priorytetu:

  • Pobierz obciążenie z powrotem w tryb online dla klientów. W tym celu możesz wykonać obejście problemu, rozwiązać ten problem lub zainicjować procesy odzyskiwania.

  • Ustal główną przyczynę awarii i rozwiąż ten problem. Jeśli możesz naprawić główną przyczynę w ramach badania, udokumentować główną przyczynę i miary, które miały na celu jego naprawienie. Jeśli problem wymaga wykonania dodatkowego okna obsługi w późniejszym czasie, upewnij się, że środki zaradcze mogą obsłużyć oczekiwane obciążenie przez dokładne przetestowanie go. Upewnij się, że skonfigurowaliśmy wystarczające monitorowanie, aby pokryć środki zaradcze.

  • Jeśli ma to zastosowanie, poszukaj tego samego problemu lub słabości konfiguracji, które mogą mieć wpływ na podobne problemy, we wszystkich składnikach obciążenia. Skorzystaj z tej okazji, aby aktywnie rozwiązać te składniki. Zapoznaj się z historią zdarzeń, aby wykryć wzorce podobnych problemów w obciążeniu.

  • Użyj wyników, aby ulepszyć strategię testowania. Upewnij się, że pomyślnie rozwiązano główną przyczynę i podobne problemy, bezpośrednio testując ten sam błąd.

Wskazówki dotyczące iniekcji błędów i inżynierii chaosu

Testowanie iniekcji błędów jest zgodne z zasadami inżynierii chaosu, podkreślając zdolność obciążenia do reagowania na błędy składników. Przeprowadź testowanie iniekcji błędów w środowiskach przedprodukcyjnych i produkcyjnych. Stosowanie testowania do warstw infrastruktury i aplikacji. Zastosuj informacje, które zostały poznane Zalecenia dotyczące przeprowadzania analizy trybu awarii , aby upewnić się, że testujesz tylko błędy, które mają priorytet i że masz strategie ograniczania ryzyka, które dotyczą błędów. Najważniejsze wskazówki dotyczące inżynierii chaosu to:

  • Bądź proaktywny. Nie czekaj na awarie. Spróbuj przewidzieć awarie, przeprowadzając eksperymenty chaosu, aby odkryć i rozwiązać problemy, zanim wpłyną one na środowisko produkcyjne.

  • Ujmij awarię. Zaakceptuj i dowiedz się, jakie błędy występują w systemie. Postrzegaj awarie jako naturalną część złożonych systemów i korzystaj z nich jako możliwości uczenia się i zwiększania niezawodności systemu.

  • Przerwij system. Celowo wstrzykuje błędy lub przeciążenie do systemu, aby przetestować jego odporność. Symulowanie rzeczywistych awarii lub zakłóceń w celu testowania i ulepszania możliwości odzyskiwania obciążenia.

  • Wczesne identyfikowanie i rozwiązywanie problemów z pojedynczymi punktami awarii. Podczas testowania skonsultuj się i zaktualizuj analizę trybu awarii , aby zweryfikować i rozwiązać błędy w dokumentacji. Stosowanie podejść do niezawodności, takich jak nadmiarowość i segmentacja, w celu zwiększenia dostępności obciążenia i zminimalizowania przestojów.

  • Zainstaluj zabezpieczenia i bezpiecznie zaradcze. Aby zwiększyć dostępność, zaimplementuj środki bezpieczeństwa, takie jak wzorzec wyłącznika lub wzorzec ograniczania przepustowości. Zaimplementuj metody bezpiecznego obniżenia wydajności, które umożliwiają ciągłość działania podczas awarii.

  • Zminimalizuj promień wybuchu. Zaimplementuj strategie izolacji błędów, aby zapewnić, że nawet w przypadku wystąpienia awarii jego zakres jest ograniczony. System nadal działa z minimalnym wpływem na klientów.

  • Budowanie odporności. Użyj eksperymentów inżynieryjnych chaosu, aby zwiększyć zdolność obciążenia do zapobiegania awariom i odzyskiwania ich.

Inżynieria chaosu jest integralną częścią kultury zespołu obciążeń i ciągłej praktyki, a nie krótkoterminowego wysiłku taktycznego w odpowiedzi na pojedynczą awarię. Postępuj zgodnie z tą standardową metodą podczas projektowania eksperymentów chaosu:

  1. Zacznij od hipotezy. Każdy eksperyment powinien mieć jasny cel, taki jak testowanie zdolności danego przepływu do wytrzymania utraty określonego składnika.
  2. Mierzenie zachowania punktu odniesienia. Upewnij się, że masz spójne metryki niezawodności i wydajności dla przepływu i składników biorących udział w danym eksperymencie, aby porównać je ze stanem obniżonej wydajności podczas uruchamiania eksperymentu.
  3. Wstrzykiwanie błędu lub błędów. Eksperyment powinien celowo kierować określone składniki, które można szybko odzyskać, i należy mieć świadome oczekiwanie na efekt, że wstrzyknięcie błędu spowoduje, aby pomóc kontrolować promień wybuchu eksperymentu.
  4. Monitoruj wynikowe zachowanie. Zbierz dane telemetryczne dotyczące poszczególnych składników przepływu i kompleksowego zachowania przepływu, które eksperyment jest przeznaczony do prawidłowego zrozumienia skutków błędu. Porównaj metryki zebrane z metrykami punktu odniesienia, aby uzyskać pełny obraz wyników iniekcji błędów.
  5. Udokumentowanie procesu i obserwacji. Przechowywanie szczegółowych zapisów eksperymentów będzie informować o przyszłych decyzjach dotyczących projektu obciążenia, zapewniając rozwiązanie problemów z lukami, które zostały ujawnione w czasie.
  6. Zidentyfikuj wynik i podejmij na nie działania. Zaplanuj kroki korygowania, które można dodać do listy prac obciążenia jako ulepszenia. Upewnij się, że plany poprawy projektu są sprawdzane i testowane w środowiskach nieprodukcyjnych zgodnie z tymi samymi procesami co inne wdrożenia.

Okresowo weryfikuje proces, wybory architektury i kod, aby szybko wykrywać dług techniczny, integrować nowe technologie i dostosowywać się do zmieniających się wymagań.

Podczas przeprowadzania eksperymentów polegających na wstrzyknięciu błędów:

  • Upewnij się, że monitorowanie jest na miejscu, a alerty zostały skonfigurowane.
  • Zweryfikuj proces przypisywania bezpośrednio odpowiedzialnej osoby (DRI), aby przejąć na własność zdarzenie.
  • Upewnij się, że dokumentacja i procesy badania są aktualne.

Zintegruj następujące zalecenia i zagadnienia, aby zoptymalizować strategię testowania chaosu:

  • Kwestionowanie założeń systemowych. Podczas testowania próbujesz poprawić odporność obciążenia i strategie projektowania obciążenia. Poszukaj możliwości wstrzykiwania błędów do składników i przepływów, które zakładasz, są niezawodne w oparciu o wcześniejsze środowiska. Mogą one nie być niezawodne w nowym obciążeniu.

  • Zweryfikuj zmiany, takie jak topologia, platforma i zasoby. Bez dokładnego testowania, w tym testowania iniekcji błędów, może istnieć niekompletny obraz obciążenia po wprowadzeniu zmian. Na przykład możesz przypadkowo wprowadzić nowe zależności lub przerwać istniejące zależności w sposób, który nie jest natychmiast widoczny.

  • Użyj buforów UMOWY SLA. Ogranicz testowanie chaosu, aby pozostać w ramach umów SLA i uniknąć potencjalnych reputacji lub skutków finansowych związanych z awariami. Cele odzyskiwania przepływu i składnika pomagają zdefiniować zakres testowania.

  • Ustanów budżet błędów jako inwestycję w chaos i iniekcję błędów. Budżet błędu jest różnicą między osiągnięciem 100 procent celu slo a osiągnięciem uzgodnionego celu slo.

  • Zatrzymaj eksperyment, jeśli wykracza poza zakres. Nieznane wyniki są oczekiwanym wynikiem eksperymentów chaosu. Staraj się osiągnąć równowagę między zbieraniem znaczących danych wynikowych i wpływem na jak najmniej użytkowników produkcyjnych.

  • Ściśle współpracuj z zespołami deweloperów, aby zapewnić istotność wstrzykniętych błędów. Skorzystaj z poprzednich zdarzeń lub problemów jako przewodnika. Sprawdź zależności i oceń wyniki po usunięciu tych zależności.

  • Zidentyfikuj i udokumentuj wcześniej nieodkryte zależności między różnymi składnikami obciążenia, które zostały ujawnione przez testowanie chaosu.

  • Dostosuj plany odzyskiwania zgodnie z potrzebami, aby uwzględnić zależności wykryte podczas testowania chaosu.

  • Użyj wyników eksperymentów i testów jako podstawy dla nowych eksperymentów i testów. W miarę powstawania nieoczekiwanych zachowań nowe testy mogą kierować te zachowania bezpośrednio i umożliwiać projektowanie strategii korygowania dla nich.

Kompromis: Testowanie iniekcji błędów w środowisku produkcyjnym może być destrukcyjne i może spowodować przestój. Należy zachować przejrzystość w przypadku osób biorących udział w projekcie w tej możliwości i upewnić się, że istnieją zabezpieczenia, aby zakończyć eksperymenty i wycofać plany, aby szybko odwrócić wprowadzone błędy. Aby chronić przed niezamierzoną awarią w środowisku produkcyjnym, upewnij się, że planujesz wystarczającą nadmiarowość i że uczestnicy projektu rozumieją kompromis kosztów.

Ułatwienia dla platformy Azure

Azure Test Plans to łatwe w użyciu, oparte na przeglądarce rozwiązanie do zarządzania testami, które zapewnia wszystkie możliwości wymagane do zaplanowanego testowania ręcznego, testowania akceptacyjnego użytkownika, testowania eksploracyjnego i zbierania opinii od uczestników projektu.

Azure Chaos Studio to zarządzana usługa, która korzysta z inżynierii chaosu, która pomaga mierzyć, interpretować i ulepszać aplikację w chmurze oraz odporność usług. Usługa Azure Chaos Studio osiągnęła ogólną dostępność na konferencji Ignite 2023 i oferuje wiele funkcji, które ułatwiają rozpoczęcie testowania iniekcji błędów i odporności aplikacji przy użyciu infrastruktury platformy Azure.

Lista kontrolna dotycząca niezawodności

Zapoznaj się z pełnym zestawem zaleceń.