Udostępnij przez


Model dojrzałości niezawodności

Podróż po niezawodności to proces krok po kroku, w którym każdy etap opiera się na poprzednim, aby zapewnić dostępność systemów i spełnić oczekiwania użytkowników. Ten model dojrzałości ma pomóc ocenić bieżący stan i zaoferować strukturę ścieżki do poprawy.

Podstawy zaczynają się od uruchamiania podstawowych możliwości niezawodności oferowanych przez platformę Azure przy użyciu wbudowanych funkcji niezawodności platformy Azure, takich jak nadmiarowość strefy w celu uzyskania natychmiastowych ulepszeń bez rozbudowanego nakładu pracy związanego z optymalizacją.

Paradoksalnie, sposób osiągnięcia wysokiej niezawodności polega na zaakceptowaniu, że awarie są nieuniknione. Zamiast próbować zapobiec każdemu problemowi, bardziej efektywne jest zaplanowanie sposobu reagowania systemu w przypadku wystąpienia problemów. Wymagania biznesowe pomagają określić, które czynniki ryzyka warto aktywnie radzić sobie z nimi. Zespoły inwestują w zaawansowane funkcje monitorowania z uporządkowaną obserwowalnością, rozszerzają środki zaradcze na poziomie aplikacji oraz rozpoczynają testowanie środków odpornościowych.

Następnie zespoły integrują szczegółowe informacje biznesowe z umiejętnościami technicznymi. Zespoły implementują modelowanie kondycji, przeprowadzają analizę trybu awarii i przygotują kompleksowe plany odzyskiwania po awarii. Ten etap zapewnia odpowiedzialność za pomocą mierzalnych celów i systematycznego przygotowania do różnych scenariuszy awarii.

Po uruchomieniu systemu nacisk przenosi się na zarządzanie wyzwaniami środowiskami produkcyjnymi, w tym zarządzanie zmianami i radzenie sobie ze wzrostem i złożonością operacyjną danych oraz jak wpływają one na niezawodność systemu.

Ostatni poziom działa na czas nieokreślony, a utrzymanie odporności jest jego celem. Ten poziom reprezentuje ewolucję, która wykracza poza kontrole techniczne, na rzecz adaptacyjności architektonicznej. Ten poziom koncentruje się na umożliwieniu systemom osiągnięcia odporności na nowe i nieprzewidziane zagrożenia w miarę ich ewolucji i wzrostu obciążeń.

Model ma strukturę pięciu odrębnych poziomów dojrzałości, z których każdy ma podstawowy cel i zestaw podstawowych strategii. Użyj poniższych widoków z kartami, aby zapoznać się z poszczególnymi poziomami. Pamiętaj również, aby zapoznać się z wyróżnionymi kompromisami i powiązanymi zagrożeniami wraz z postępem.

Ikona celu Zbuduj solidne podstawy do odporności w infrastrukturze i operacjach obciążenia, zamiast koncentrować się na zadaniach optymalizacji.

Poziom 1 modelu dojrzałości został zaprojektowany, aby pomóc zespołom ds. obciążeń stworzyć silną podstawę dla niezawodności systemu. Skupia się na inicjowaniu, który polega na konfigurowaniu podstawowych elementów dla przyszłych decyzji dotyczących niezawodności. Ten etap obejmuje głównie implementację funkcjonalną z drobnymi rozszerzeniami do bieżących rozwiązań.

Ten etap obejmuje badania, uzyskiwanie szczegółowych informacji i tworzenie spisu systemów. Korzysta również z wbudowanych funkcji niezawodności na platformie Azure, takich jak wdrożenie nadmiarowości strefowej, aby natychmiast uzyskać ulepszenia.

Tworząc te podstawy, możesz przygotować swój zespół do przejścia przez poziomy modelu dojrzałości niezawodności, aby stopniowo zwiększyć odporność i wydajność systemu.

Kluczowe strategie

√ Ocena możliwości odciążania odpowiedzialności operacyjnej

Ta strategia jest zasadniczo budowaniem a nie kupowaniem lub poleganiem. Decyzja zależy od tego, ile odpowiedzialności można zarządzać na tym etapie, przy jednoczesnym wspieraniu przyszłego rozwoju. Chcesz używać zasobów, które są istotne dla obciążenia, ale zawsze należy szukać sposobów na delegowanie ich konserwacji. Poniżej przedstawiono niektóre klasyczne przypadki użycia, w których warto zastosować to podejście.

  • Odciążaj odpowiedzialność za platformę w chmurze , wybierając rozwiązania paaS (platform as a service). Zapewniają one gotowe rozwiązania do typowych potrzeb zapewnienia odporności, takich jak replikacja, przełączanie awaryjne i magazyny kopii zapasowych. W przypadku tego podejścia dostawca usług w chmurze obsługuje ulepszenia hostingu, konserwacji i odporności.

    Na przykład dostawca usług w chmurze replikuje dane między wieloma węzłami obliczeniowymi i dystrybuuje repliki w różnych strefach dostępności. Jeśli tworzysz własne rozwiązanie na maszynach wirtualnych, musisz samodzielnie zarządzać tymi aspektami, co może być czasochłonne i złożone.

  • Przekazywanie obowiązków związanych z operacjami, które nie są bezpośrednio powiązane z celami biznesowymi obciążenia roboczego. Niektóre wyspecjalizowane operacje, takie jak zarządzanie bazami danych i zabezpieczenia, mogą potencjalnie wpływać na niezawodność obciążenia. Rozważ możliwość powierzania tych zadań doświadczonym zespołom, technologii lub obu jednocześnie.

    Jeśli na przykład twój zespół nie ma wiedzy na temat bazy danych, skorzystaj z usług zarządzanych, aby pomóc w przesunięciu odpowiedzialności dostawcy. Takie podejście może być przydatne podczas uruchamiania, ponieważ umożliwia zespołowi skupienie się na funkcjonalności pracy. Wiele przedsiębiorstw współużytkuje usługi zarządzane centralnie. Jeśli są dostępne zespoły platformy, użyj ich do obsługi tych operacji. Jednak takie podejście może dodawać zależności i złożoność organizacyjną.

    Alternatywnie, jeśli twój zespół ma odpowiednią wiedzę, możesz podjąć wyraźną decyzję o wykorzystaniu swoich umiejętności i wybraniu usług, które nie obejmują możliwości zarządzania.

  • Odciążanie obowiązków od dostawców innych niż Microsoft. Wybierz produkty gotowe jako punkt wyjścia. Twórz niestandardowe rozwiązania tylko wtedy, gdy przyczyniają się one do wartości biznesowej twojego obciążenia pracy.

Ryzyko: Jeśli opcja zakupu lub opierania się na częściowo spełnia twoje wymagania, może być konieczne zaimplementowanie niestandardowych rozszerzeń. Ta metoda może spowodować sytuację "blokady dostosowywania", w której aktualizacje i modernizacja stają się niepraktyczne. Regularnie sprawdzaj wymagania i porównuj je z możliwościami rozwiązania. Opracuj strategię wyjścia, jeśli istnieje znaczne odchylenie między nimi.

Przeciwny scenariusz jest również ryzykiem. Chociaż opcja zakupu lub polegania może wydawać się prostsza na początku, może wymagać ponownej oceny i przeprojektowania później, jeśli ograniczenia usługi PaaS, rozwiązania dostawcy lub zasobów należących do platformy nie spełniają niezbędnego stopnia szczegółowości lub poziomu autonomii wymaganej dla obciążenia.

√ Identyfikowanie krytycznych przepływów użytkownika i systemu

Podział obciążenia na przepływy ma kluczowe znaczenie na tym etapie. Skoncentruj się na przepływach użytkowników i systemów . Przepływy użytkowników określają interakcje użytkowników, a przepływy systemowe określają komunikację między składnikami obciążenia, które nie są bezpośrednio skojarzone z zadaniami użytkownika.

Na przykład w aplikacji do handlu elektronicznego klienci wykonują działania frontonu, takie jak przeglądanie i zamawianie. Tymczasem transakcje zaplecza i procesy wyzwalane przez system spełniają żądania użytkowników i obsługują inne zadania. Te odrębne przepływy są częścią tego samego systemu, ale obejmują różne składniki i służą różnym celom.

Rozpocznij tworzenie wykazu przepływów na tym etapie. Obserwuj interakcje użytkowników i komunikację składników. Lista i kategoryzowanie przepływów, definiowanie ich punktów początkowych i końcowych oraz notowanie zależności. Dokumentowanie wyników i wyjątków przy użyciu diagramów w celu uzyskania przejrzystości. Ten wykaz może służyć jako ważne narzędzie do początkowej rozmowy z osobami biorącymi udział w projekcie biznesowym w celu zidentyfikowania najważniejszych aspektów z ich perspektywy. Ta rozmowa może wpłynąć na pierwszy poziom priorytetyzacji.

Klasyfikuj przepływ jako krytyczny, oceniając ryzyko i wpływ na podstawowe działania biznesowe. Jeśli spodziewasz się awarii, kontrolowane obniżanie funkcjonalności koncentruje się na utrzymywaniu tych krytycznych przepływów. W przykładzie handlu elektronicznego krytyczne przepływy obejmują wyszukiwanie produktów, dodawanie elementów do koszyka i finalizację zakupu, ponieważ te zadania są kluczowe dla działalności. Inne procesy, takie jak aktualizowanie danych produktów i utrzymywanie obrazów produktów, nie są tak krytyczne. Upewnij się, że krytyczne przepływy pozostają operacyjne podczas przestoju, aby zapobiec utracie przychodów, umożliwiając użytkownikom dalsze wyszukiwanie produktów i dodawanie elementów do koszyka.

Uwaga / Notatka

Proces biznesowy może być krytyczny nawet wtedy, gdy nie jest uwzględniany czas. Krytyczne znaczenie czasu jest kluczowym czynnikiem. Na przykład spełnienie wymagań dotyczących inspekcji jest procesem krytycznym, ale może nie być konieczne natychmiastowe prezentowanie danych na potrzeby inspekcji. Proces pozostaje ważny, ale jego niezawodność nie jest krytyczna, ponieważ odzyskiwanie w ciągu kilku godzin jest akceptowalne.

Aby uzyskać więcej informacji, zobacz Azure Well-Architected Framework: Optymalizowanie projektowania obciążeń przy użyciu przepływów.

√ Wybieranie odpowiedniego modelu projektowego, zasobów i funkcji

Należy zastosować tę strategię na następujących poziomach:

  • Architektura: Projekt obciążenia powinien uwzględniać oczekiwania dotyczące niezawodności w różnych warstwach infrastruktury. Początkowe decyzje mogą być wyborem między konteneryzacją lub usługą PaaS na potrzeby hostowania aplikacji. Możesz też rozważyć konfiguracje sieci, takie jak konfiguracja gwiaździsta lub pojedyncza sieć wirtualna.

    Należy również ustawić granice, które tworzą segmentację na podstawie funkcjonalności. Na przykład zamiast hostować wszystko na jednej maszynie wirtualnej z dyskiem wirtualnym z jedną strefą, rozważ podzielenie magazynu obliczeniowego i magazynu danych oraz użycie dedykowanych usług.

    Ostrzeżenie

    W scenariuszach migracji wdrożenie podejścia lift-and-shift bez przeglądania nowych możliwości może prowadzić do nieodebranych korzyści i nieefektywności. Ważne jest, aby wcześnie zbadać modernizację, aby uniknąć utknięcia w konfiguracjach, które są trudne do zmiany i korzystać z lepszych opcji i ulepszeń.

  • Usługi platformy Azure: Użyj drzew decyzyjnych, aby ułatwić wybór odpowiednich usług dla projektu. Wybierz składniki spełniające bieżące potrzeby, ale pozostają elastyczne, dzięki czemu możesz przełączać usługi w miarę rozwoju obciążenia i wymagać większej liczby funkcji.

  • Jednostki SKU lub warstwy w ramach usług platformy Azure: Przejrzyj funkcje każdej jednostki SKU i zapoznaj się z gwarancjami dostępności platformy. Oceń umowy o poziom usług, aby zrozumieć zakres pokrycia w odniesieniu do opublikowanego percentyla.

  • Funkcje, które obsługują niezawodność: Wybierz usługi natywne dla chmury, aby zwiększyć dostępność za pomocą prostych konfiguracji bez zmiany kodu. Ważne jest, aby zrozumieć opcje i celowo wybrać konfiguracje, takie jak zwiększenie nadmiarowości strefy lub replikowanie danych do regionu pomocniczego.

√ Wdrażanie przy użyciu podstawowego poziomu nadmiarowości

W każdej części rozwiązania unikaj pojedynczych punktów awarii, takich jak pojedyncze wystąpienia. Zamiast tego utwórz wiele wystąpień, aby zapewnić nadmiarowość. Usługi platformy Azure często obsługują nadmiarowość, szczególnie w przypadku usług PaaS, które zwykle obejmują lokalną nadmiarowość domyślnie i opcje uaktualniania. Najlepiej użyć strefowej nadmiarowości, aby rozłożyć te wystąpienia w wielu centrach danych Azure. Jeśli tego nie zrobisz, przynajmniej zapewnij nadmiarowość lokalną, jednak ten sposób niesie ze sobą większe ryzyko. W przyszłych poziomach oceniasz, czy wymagania dotyczące niezawodności mogą być spełnione, rozszerzając rozwiązanie za pomocą składników geograficznie nadmiarowych.

Kompromis: Jednym z kluczowych kosztów alternatywnych jest zwiększony koszt nadmiarowości. Ponadto komunikacja między strefami może powodować opóźnienie. W przypadku starszych aplikacji, które wymagają minimalnego opóźnienia, nadmiarowość może obniżyć wydajność.

Ryzyko: Jeśli aplikacja nie jest przeznaczona dla środowiska z wieloma wystąpieniami, może mieć problemy z wieloma aktywnymi wystąpieniami, co może prowadzić do niespójnych danych. Ponadto jeśli aplikacja została utworzona dla konfiguracji lokalnej, która ma małe opóźnienia, użycie stref dostępności może zakłócić jej wydajność.

√ Włączanie metryk, dzienników i śladów w celu monitorowania przepływów

Wybierz narzędzia natywne dla platformy, takie jak Azure Monitor, aby zapewnić widoczność metryk, dzienników i śladów. Użyj wbudowanych funkcji, aby ustawić alerty pod kątem potencjalnych problemów. Musisz mieć podstawowe alerty, aby wysyłać powiadomienia i otrzymywać alerty. Skorzystaj z możliwości platformy Azure, które wskazują zmiany stanu kondycji usług, takich jak:

Skonfiguruj grupy akcji usługi Azure Monitor dla infrastruktury i aplikacji.

Kompromis: Zbierając więcej dzienników, należy zarządzać rosnącym wolumenem, co wpływa na koszty związane z przechowywaniem tych dzienników. Użyj zasad przechowywania, aby zarządzać woluminem. Użyj usługi Azure Monitor, aby ustawić dzienny limit w obszarze roboczym. Aby uzyskać więcej informacji, zobacz Zalecenia dotyczące konfiguracji dotyczące niezawodności.

Rozpocznij budowanie obserwowalności w opisanych poniżej warstwach.

Infrastruktura

Zacznij od włączenia dzienników diagnostycznych i upewnienia się, że zbierasz natywne metryki ze składników platformy na potrzeby analizy. Zbierz informacje o użyciu zasobów, takie jak procesor CPU, pamięć, dane wejściowe/wyjściowe i aktywność sieci.

Aplikacja

Zbierz metryki na poziomie aplikacji, takie jak zużycie pamięci czy latencja żądania, i rejestruj działania aplikacji. Wykonaj operacje rejestrowania w wątku lub procesie, który jest oddzielony od głównego wątku aplikacji. Takie podejście nie powoduje, że rejestrowanie spowalnia zadania podstawowe aplikacji.

Sprawdź również podstawowe testy dostępności w usłudze Application Insights.

Dane

Aby monitorować bazy danych na poziomie podstawowym, zbierz kluczowe metryki emitowane przez zasoby bazy danych. Podobnie jak w przypadku składników infrastruktury, śledź użycie zasobów w kontekście magazynów danych, takich jak metryki sieci. Zbieranie danych o tym, jak połączenia są grupowane, jest ważne dla poprawy wydajności na późniejszych etapach.

Aby zapewnić niezawodność, ważne jest śledzenie metryk połączenia, takich jak monitorowanie aktywnych i nieudanych połączeń. Na przykład w usłudze Azure Cosmos DB zwracany jest kod stanu 429, gdy liczba żądań przekracza przydzielone jednostki żądania i połączenia kończą się niepowodzeniem.

√ Rozpoczynanie tworzenia podręcznika ograniczania ryzyka awarii

Błędy wahają się od sporadycznych do nieco rozszerzonych awarii przejściowych i katastroficznych awarii.

Na poziomie 1 skoncentruj się na błędach platformy. Mimo że są one poza twoją kontrolą, nadal należy mieć strategie ich obsługi. Na przykład rozwiązać problemy związane z przerwami w strefach, używając stref dostępności. Przewiduj tymczasowe błędy na poziomie platformy i obsługuj je w swoim obciążeniu.

Proces obsługi tych błędów różni się w zależności od złożoności. Rozpocznij dokumentowanie potencjalnych niepowodzeń na poziomie platformy, powiązanych z nimi zagrożeń i strategii ograniczania ryzyka. To ćwiczenie jest przede wszystkim teoretyczne i dojrzewa wraz z automatyzacją na późniejszych poziomach.

Należy udokumentować błędy, w tym czynniki, takie jak ich prawdopodobieństwo, wpływ i strategie ograniczania ryzyka. Użyj skali krytycznej, która jest zgodna z celami obciążenia. Skala może obejmować następujące elementy:

  • Wysoka. Kompletna awaria systemu, która powoduje znaczną stratę finansową i spadek zaufania użytkowników.

  • Średni. Tymczasowe zakłócenia wpływające na część obciążenia i powodują niedogodności dla użytkowników.

  • Niski poziom Niewielki problem z oprogramowaniem, który wpływa na nieodpowiądową funkcję aplikacji i powoduje minimalny przestój dla użytkowników.

Oto przykładowy szablon:

Problem Ryzyko Źródło Ciężkość Prawdopodobieństwo Czynności zapobiegawcze
Przejściowy błąd sieci Klient traci połączenie z serwerem aplikacji. Platforma Azure Wysoki Bardzo prawdopodobne Używaj wzorców projektowych w logice po stronie klienta, takich jak logika ponawiania prób i wyłączniki.
Awaria strefy Użytkownik nie może nawiązać połączenia z aplikacją. Platforma Azure Wysoki Prawdopodobnie nie Włącz strefową odporność na wszystkich składnikach.
Wygaśnięcie certyfikatu protokołu Transport Layer Security (TLS) Klient nie może ustanowić sesji protokołu TLS z aplikacją. Błąd ludzki Wysoki Prawdopodobne Użyj zautomatyzowanego zarządzania certyfikatami TLS.
Użycie procesora CPU lub pamięci osiąga zdefiniowane limity i powoduje niepowodzenie serwera. Przekroczono limit czasu żądań. Aplikacja Średni Prawdopodobne Zaimplementuj automatyczne ponowne uruchomienia.
Składnik jest niedostępny podczas aktualizacji. Użytkownik napotyka nieobsługiwany błąd w aplikacji. Wdrażanie lub zmiana konfiguracji Niski Bardzo prawdopodobne podczas wdrożeń, lecz mało prawdopodobne w innym czasie Obsługuj składniki w logice po stronie klienta.

Na poziomie 1 nie dążyć do kompletności, ponieważ zawsze istnieją nieprzewidziane przypadki niepowodzenia. Jeśli wystąpią nieoczekiwane awarie, udokumentuj przyczyny i środki zaradcze w podręczniku. Traktuj ten zasób jako dokument żywy, który jest aktualizowany wraz z upływem czasu.

Dodaj mechanizmy odzyskiwania po błędach przejściowych

W środowisku chmury typowe są błędy przejściowe. Wskazują one krótkoterminowe problemy, które ponowienie prób zwykle może rozwiązać w ciągu kilku sekund.

Użyj wbudowanych zestawów SDK i konfiguracji, aby obsługiwać te błędy w celu zachowania aktywności systemu. Wbudowane konfiguracje są często ustawieniem domyślnym, więc może być konieczne przetestowanie w celu zweryfikowania implementacji. Ponadto zaimplementuj wzorce przeznaczone do obsługi błędów przejściowych w architekturze. Aby uzyskać więcej informacji, zobacz Wzorce projektowe architektury, które obsługują niezawodność.

Trwałe problemy mogą wskazywać na błąd, który nie jest przejściowy lub na początku awarii. Ten scenariusz wymaga więcej niż tylko rozwiązywania zlokalizowanych problemów w aplikacji. Obejmuje to zbadanie krytycznych przepływów użytkownika i systemu oraz dodanie technik samozachowawczych i działań naprawczych. Te metody są dojrzałymi praktykami opisanymi na poziomie 2.

√ Uruchamianie podstawowych testów

Integrowanie podstawowych testów niezawodności na wczesnym etapie cyklu tworzenia oprogramowania. Poszukaj możliwości testowania, począwszy od testów jednostkowych w celu zweryfikowania funkcjonalności i konfiguracji.

Ponadto opracuj proste przypadki testowe dla problemów, które można zidentyfikować w podręczniku ograniczania ryzyka. Skoncentruj się na większym wpływie, ograniczaniu nakładu pracy. Na przykład zasymuluj awarie sieci lub sporadyczne problemy z łącznością, aby zobaczyć, jak logika ponawiania prób rozwiązuje zakłócenia.

Ryzyko: Testowanie często wprowadza tarcie w cyklu programowania. Aby ograniczyć to ryzyko, testowanie niezawodności powinno być śledzone w ramach zadań programistycznych.

Programowanie funkcji jest priorytetem, a testowanie może powodować tarcie w cyklu programowania. Przed ukończeniem opracowywania funkcji łatwiej jest rozpocząć testowanie. Projektowanie niefunkcjonalnych aspektów aplikacji na początku pozwala rozszerzyć je w miarę dodawania funkcji, a nie tworzenia listy prac związanych z problemami w celu późniejszego rozwiązania. Mimo że takie podejście wymaga początkowo większego nakładu pracy, można nim zarządzać i zapobiec większym problemom później.

Dalsze kroki