Udostępnij za pośrednictwem


Zalecenia dotyczące projektowania strategii testowania niezawodności

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

RE:08 Przetestuj pod kątem odporności i scenariuszy 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 degradacji są skuteczne, wykonując aktywne działanie awarii i symulowane testowanie obciążenia.

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, w szczególności krytycznych przepływów, które można zidentyfikować podczas projektowania rozwiązania. Ten przewodnik zawiera ogólne wskazówki dotyczące testowania i wskazówki specyficzne dla iniekcji 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 Akt 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

Gotowość do testowania niezawodności

  • Rutynowo przeprowadzaj testy, aby zweryfikować istniejące progi, cele i założenia. Gdy w obciążeniu wystąpi duża zmiana, uruchom regularne testowanie. Wykonywanie większości testów w środowiskach testowych i przejściowych. Korzystne jest również uruchomienie podzbioru testów względem systemu produkcyjnego. Zaplanuj parzystość 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 przypadkach, w których należy opracować testy automatyczne, użyj testowania ręcznego, aby określić zakres testów do opracowania.

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

  • Dostosuj prosty format dokumentacji, dzięki czemu każdy może łatwo zrozumieć proces i wyniki każdego regularnego testu.

  • Udostępnij udokumentowane wyniki odpowiednim zespołom, na przykład zespołom operacyjnym, liderom 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).

  • Tworzenie regularnego tempa testowania kopii zapasowych. Przywróć dane w systemach izolowanych, 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 projekcie odzyskiwania 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ą przetestowanie strategii skalowania. Aby uzyskać informacje o obciążeniu i testowaniu przeciążeniowym, zobacz Zalecenia dotyczące testowania.

  • Przetestuj sposób obsługi awarii obciążeń 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.

Korzystaj 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. W poniższych sekcjach przedstawiono 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. Wykonywanie testów 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 w oknie 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 do trybu 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ąż problem. Jeśli możesz naprawić główną przyczynę w ramach badania, udokumentować główną przyczynę i środki, które miały go naprawić. 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 uwzględnić ś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. Skonsultuj 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 tę samą awarię.

Korzystanie z 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 awarie składników. Przeprowadź testy iniekcji błędów w środowiskach przedprodukcyjnych i produkcyjnych. Stosowanie testów 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ą priorytety i że masz strategie ograniczania ryzyka, które dotyczą błędów. Najważniejsze wytyczne inżynierii chaosu to:

  • Bądź proaktywny. Nie czekaj na awarie. Spróbuj przewidzieć błędy, 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. Zobacz błędy jako naturalną część złożonych systemów i wykorzystaj je jako możliwości nauki i poprawy niezawodności systemu.

  • Przerwij system. Celowo wstrzyknąć błędy lub obciąż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. Zastosuj podejścia do niezawodności, takie jak nadmiarowość i segmentacja, aby zwiększyć dostępność obciążenia i zminimalizować przestoje.

  • Zainstaluj poręcze i łagodne środki zaradcze. Zaimplementuj środki bezpieczeństwa, takie jak wzorzec wyłącznika lub wzorzec ograniczania przepustowości, aby zwiększyć dostępność. 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 jej 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 w celu porównania ze stanem obniżonej wydajności podczas uruchamiania eksperymentu.
  3. Wstrzykiwanie błędu lub błędów. Eksperyment powinien celować celowo określone składniki, które można szybko odzyskać i należy mieć świadome oczekiwanie na efekt, że wstrzyknięcie błędu pomoże kontrolować promień wybuchu eksperymentu.
  4. Monitoruj wynikowe zachowanie. Zbierz dane telemetryczne dotyczące poszczególnych składników przepływu i kompleksowe zachowanie przepływu, które jest celem eksperymentu, aby prawidłowo zrozumieć skutki 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 rekordów eksperymentów będzie informować o przyszłych decyzjach dotyczących projektu obciążenia, zapewniając, że w czasie zostaną ujawnione luki.
  6. Zidentyfikuj wynik i postępuj zgodnie z jego działaniem. 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ąć własność zdarzenia.
  • Upewnij się, że twoje procesy dokumentacji i 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 strategii 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 UMOWY SLA. Ogranicz testowanie chaosu, aby pozostać w ramach umów SLA i uniknąć potencjalnych skutków 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 wyników 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. Użyj 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 są ujawniane przez testowanie chaosu.

  • Dostosuj plany odzyskiwania zgodnie z potrzebami, aby uwzględnić zależności, które są wykrywane podczas testowania chaosu.

  • Użyj wyników z eksperymentów i testów jako podstawy nowych eksperymentów i testów. W miarę powstawania nieoczekiwanych zachowań nowe testy mogą być skierowane bezpośrednio do tych zachowań i umożliwiają projektowanie strategii korygowania dla nich.

Kompromis: Testowanie iniekcji błędów w środowisku produkcyjnym może być destrukcyjne i może spowodować przestój. Bądź przejrzysty dla uczestników projektu w zakresie tej możliwości i upewnij się, że masz środki zabezpieczające, 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 platformy Azure

Plany testów platformy Azure 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 używa inżynierii chaosu w celu ułatwienia mierzenia, zrozumienia i poprawy odporności aplikacji i usług w chmurze. 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ń.