Zalecenia dotyczące ciągłej optymalizacji wydajności

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

PE:12 Ciągła optymalizacja wydajności. Skoncentruj się na składnikach, które pokazują pogarszającą się wydajność w czasie, takie jak bazy danych i funkcje sieciowe.

W tym przewodniku opisano zalecenia dotyczące ciągłej optymalizacji wydajności. Ciągła optymalizacja wydajności to proces ciągłego monitorowania, analizowania i poprawiania wydajności. Wydajność dostosowuje się do wzrostu i spadku zapotrzebowania. Optymalizacja wydajności musi być ciągłym działaniem w całym okresie działania obciążenia. Wydajność obciążenia często spada lub staje się nadmierna w czasie, a czynniki, które należy wziąć pod uwagę, obejmują zmiany wzorców użycia, zapotrzebowania, funkcji i długu technicznego.

Definicje

Okres Definicja
Warstwy danych Strategia magazynowania obejmująca kategoryzowanie danych na podstawie częstotliwości dostępu i przechowywanie ich w warstwach magazynowania.
Dług techniczny Skumulowane nieefektywności, nieoptymalne wybory projektowe lub skróty celowo podjęte podczas procesu programowania w celu szybszego dostarczania kodu.
Czas wygaśnięcia Mechanizm, który ustawia czas wygaśnięcia danych.

Kluczowe strategie projektowania

Wydajność jest wtedy, gdy pojemność obciążenia jest zgodna z rzeczywistym użyciem. Obciążenie, które przewyższa, jest tak problematyczne, jak obciążenie, które nie działa. Kompromisy różnią się. Nadmierne wykorzystanie wpływa na optymalizację kosztów. Niska wydajność wpływa na użytkowników. Kluczem do wydajności jest monitorowanie, dostosowywanie i testowanie w czasie. Należy regularnie przeglądać metryki wydajności i wprowadzać korekty w razie potrzeby, aby upewnić się, że obciążenie jest wydajne. Do osiągnięcia celów wydajności wymagane jest przetestowanie wszystkich zmian wstępnych i po wdrożeniu.

Opracowywanie kultury wydajności

Kultura wydajności to środowisko, w którym oczekuje się ciągłego ulepszania, a zespół uczy się od środowiska produkcyjnego. Optymalizacja wydajności wymaga wyspecjalizowanych umiejętności. Zespoły obciążeń potrzebują odpowiednich umiejętności i myślenia, aby zoptymalizować swoją wydajność, aby sprostać wzrostom i spadkom zapotrzebowania. Należy również przydzielić czas, aby obsługiwać wymagane monitorowanie i korygowanie problemów z wydajnością w miarę ich powstawania. Te zespoły potrzebują jasnych oczekiwań. Na przykład cele wydajności, punkty odniesienia i progi odchylenia (jak daleko od punktu odniesienia jest akceptowalne) muszą być wysoce widoczne i sspołeczne.

Kompromis: Ciągłe optymalizacje wydajności wymagają zespołu, który ma odpowiednie umiejętności i czas, aby znaleźć i rozwiązać problemy z wydajnością. Przydzielanie personelu do wydajności zwiększa koszt operacyjny. Jeśli masz ograniczone zasoby personelu, ciągła optymalizacja wydajności może zająć trochę czasu od innych zadań operacyjnych.

Ocena nowych funkcji platformy

Ocena nowych funkcji platformy obejmuje zbadanie nowych funkcji i narzędzi platformy, które mogą poprawić wydajność, takie jak zoptymalizowane rozwiązania magazynu, mechanizmy buforowania lub narzędzia do zarządzania zasobami. Nowe funkcje platformy mogą otwierać możliwości zwiększania wydajności. Zapewnij aktualność platformy i narzędzi, aby upewnić się, że korzystasz z najnowszych innowacji i najlepszych rozwiązań. Spójne monitorowanie opinii i metryk wydajności z tych nowych dodatków w celu uściślinia podejścia.

Określanie priorytetów działań związanych z optymalizacją

Proaktywne optymalizowanie wydajności oznacza podjęcie proaktywnych działań w celu poprawy i zwiększenia wydajności obciążenia, zanim wystąpią jakiekolwiek problemy z wydajnością. Korzystanie z proaktywnych środków obejmuje identyfikowanie potencjalnych wąskich gardeł, monitorowanie metryk wydajności i implementowanie optymalizacji w celu zapewnienia wydajnego działania obciążenia i spełnienia żądanych celów wydajności. Na podstawie analizy pogarszających się składników, przepływów krytycznych i długu technicznego można zaimplementować optymalizacje wydajności specyficzne dla każdego obszaru. Ulepszenia mogą obejmować zmiany kodu, korekty infrastruktury lub aktualizacje konfiguracji.

Określanie priorytetów pogarszających się składników

Obciążenie często ma składniki, takie jak bazy danych i składniki sieciowe, które są podatne na obniżenie wydajności w czasie. W miarę rozwoju obciążenia i zmian wzorców użycia te zmiany często wpływają na wydajność poszczególnych składników w obciążeniu. Zwiększone dane w bazach danych mogą prowadzić do dłuższego czasu wykonywania zapytań i wolniejszego pobierania danych. Zmiany wzorców użycia mogą spowodować nieoptymalny projekt zapytania. Zapytania, które były kiedyś wydajne, mogą stać się nieefektywne w miarę rozwoju obciążenia. Nieefektywne zapytania mogą zużywać nadmierne zasoby i obniżyć wydajność bazy danych. Zwiększone użycie obciążenia może prowadzić do większego ruchu sieciowego, co powoduje problemy z przeciążeniem i opóźnieniami.

Ważne jest, aby ciągłe wysiłki w celu zoptymalizowania wydajności tych składników. Proaktywne identyfikowanie i rozwiązywanie problemów z wydajnością w obciążeniu. Określając priorytety znanych pogarszających się składników, można aktywnie rozwiązać potencjalne problemy z wydajnością i zapewnić bezproblemową operację obciążenia. Może to obejmować implementowanie technik dostrajania wydajności, optymalizowanie alokacji zasobów lub uaktualnianie sprzętu lub składników oprogramowania zgodnie z potrzebami.

Określanie priorytetów przepływów krytycznych

Przepływy krytyczne to najważniejsze procesy lub przepływy pracy o wysokim priorytcie w obciążeniu. Priorytetem tych przepływów krytycznych jest upewnienie się, że najbardziej istotne części obciążenia są zoptymalizowane pod kątem wydajności. Znajomość, które przepływy mają kluczowe znaczenie, pomaga określić priorytety działań związanych z optymalizacją. Optymalizacja wydajności najważniejszych obszarów aplikacji zapewnia najwyższy zwrot z inwestycji. Należy monitorować przepływy krytyczne i najpopularniejsze strony. Poszukaj sposobów, aby uczynić je bardziej wydajnymi.

Automatyzowanie optymalizacji wydajności

Automatyzacja może wyeliminować powtarzające się i czasochłonne procesy ręczne, co pozwala na ich wydajne wykonywanie. Automatyzacja zmniejsza prawdopodobieństwo wystąpienia błędu ludzkiego i zapewnia spójność uruchomionych zadań optymalizacji. Automatyzując te zadania, można również zwolnić osoby, aby skupić się na bardziej złożonych działaniach i działaniach, które dodają wartość. Automatyzację można zastosować do różnych zadań, takich jak testowanie wydajności, wdrażanie i monitorowanie:

  • Zautomatyzowane testowanie wydajności: użyj zautomatyzowanych narzędzi do testowania wydajności, takich jak JMeter, K6 lub Selenium, aby symulować różne obciążenia i scenariusze.

  • Wdrażanie automatyczne: implementowanie zautomatyzowanych procesów wdrażania w celu zapewnienia spójnych i wolnych od błędów wdrożeń. Użyj narzędzi ciągłej integracji/ciągłego wdrażania, aby zautomatyzować proces wdrażania. Te narzędzia ułatwiają identyfikowanie wąskich gardeł wydajności podczas ich testowania względem punktów końcowych, sprawdzania stanu HTTP, a nawet sprawdzania jakości i odmian danych.

  • Monitorowanie i alerty: konfigurowanie zautomatyzowanych systemów monitorowania i alertów w celu ciągłego monitorowania metryk wydajności i wykrywania wszelkich odchyleń lub anomalii. Po wykryciu problemów z wydajnością można wyzwolić automatyczne alerty, aby powiadomić odpowiednie zespoły lub osoby.

  • Zarządzanie zdarzeniami: zaimplementuj zautomatyzowany system zarządzania zdarzeniami, który może odbierać alerty, tworzyć bilety i przypisywać bilety do odpowiednich zespołów w celu rozwiązania problemu. Te kroki pomagają zagwarantować, że problemy z wydajnością zostaną szybko rozwiązane i przypisane do odpowiednich zasobów.

  • Automatyczna diagnostyka: opracowywanie zautomatyzowanych narzędzi diagnostycznych lub skryptów, które mogą analizować dane wydajności i identyfikować główne przyczyny problemów z wydajnością. Te narzędzia mogą pomóc w określeniu określonych obszarów lub składników systemu, które powodują problemy z wydajnością.

  • Akcje zautomatyzowanego korygowania: zdefiniuj i zaimplementuj akcje zautomatyzowanego korygowania, które można wyzwolić po wykryciu określonych problemów z wydajnością. Te akcje mogą obejmować ponowne uruchamianie usług, dostosowywanie alokacji zasobów, czyszczenie pamięci podręcznych lub implementowanie innych technik optymalizacji wydajności.

  • Systemy samonaprawiania: twórz możliwości samonaprawiania w systemie, automatyzując proces odzyskiwania pod kątem znanych problemów z wydajnością. Ta funkcja może obejmować automatyczne naprawianie lub dostosowywanie konfiguracji systemu w celu przywrócenia optymalnej wydajności.

Rozwiązywanie problemów z długiem technicznym

Dług techniczny odnosi się do skumulowanych nieefektywności, nieoptymalnych wyborów projektowych lub skrótów podejmowanych podczas procesu opracowywania, które mogą mieć wpływ na wydajność. Dług techniczny, niejasny kod i nadmiernie złożone implementacje mogą utrudnić osiągnięcie wydajności. Rozwiązanie długu technicznego polega na zidentyfikowaniu i rozwiązaniu tych problemów w celu poprawy ogólnej wydajności i utrzymania obciążenia. Ta praca może obejmować refaktoryzację kodu, optymalizowanie zapytań bazy danych, ulepszanie projektu architektury lub implementowanie najlepszych rozwiązań. Być może wprowadziłeś dług techniczny, aby spełnić termin, ale musisz rozwiązać problem długu technicznego w miarę optymalizacji wydajności w czasie.

Optymalizowanie baz danych

Ciągłe optymalizowanie baz danych obejmuje identyfikowanie i implementowanie optymalizacji w celu zapewnienia, że bazy danych mogą obsługiwać obciążenia, dostarczać szybkie czasy odpowiedzi i minimalizować wykorzystanie zasobów. Dzięki regularnej optymalizacji baz danych można poprawić wydajność aplikacji, zmniejszyć przestoje i poprawić ogólne środowisko użytkownika.

  • Optymalizowanie zapytań bazy danych: Źle napisane instrukcje SQL mogą obniżyć wydajność bazy danych. Nieefektywne warunki JOIN mogą powodować niepotrzebne przetwarzanie danych. Złożone podquery, zapytania zagnieżdżone i nadmierne funkcje mogą zmniejszyć szybkość działania. Zapytania pobierające zbyt wiele danych powinny zostać przepisane. Należy zidentyfikować najbardziej typowe lub krytyczne zapytania bazy danych i zoptymalizować je. Optymalizacja pomaga zapewnić szybsze zapytania.

  • Obsługa indeksów: oceń strategię indeksowania, aby upewnić się, że indeksy są prawidłowo zaprojektowane i utrzymywane. Konserwacja indeksu obejmuje identyfikowanie nieużywanych lub nadmiarowych indeksów oraz tworzenie indeksów dopasowanych do wzorców zapytań. Indeksy baz danych pomagają przyspieszyć operacje pobierania danych. W przypadku relacyjnych baz danych należy monitorować fragmentację indeksu. Należy regularnie kompilować lub reorganizować indeksy. W przypadku nierelacyjnych baz danych należy wybrać poprawne zasady indeksowania dla obciążenia. Użyj automatycznego dostrajania baz danych, jeśli są dostępne. Te funkcje obejmują automatyczne tworzenie brakujących indeksów, usuwanie nieużywanych indeksów i korektę planu. Aby uzyskać więcej informacji, zobacz Obsługa indeksów w celu zwiększenia wydajności.

  • Przejrzyj projekt modelu: Przejrzyj model danych, aby upewnić się, że jest zoptymalizowany pod kątem określonych wymagań aplikacji. Poprawa wydajności zapytań i pobierania danych może obejmować denormalizację, partycjonowanie lub inne techniki.

  • Optymalizacja konfiguracji bazy danych: optymalizuj ustawienia konfiguracji bazy danych, takie jak alokacja pamięci, operacje we/wy dysku i ustawienia współbieżności, aby zmaksymalizować wydajność i wykorzystanie zasobów.

Optymalizowanie wydajności danych

Optymalizacja wydajności danych polega na zapewnieniu, że dane są przechowywane, przetwarzane i dostępne w najbardziej wydajny sposób. Warstwy danych i używanie czasu wygaśnięcia (TTL) to techniki, których można użyć do optymalizacji wydajności danych. Te techniki można zastosować w różnych scenariuszach magazynowania danych, takich jak bazy danych, systemy plików lub magazyn obiektów.

  • Używanie warstw danych: warstwowanie danych obejmuje kategoryzowanie danych na podstawie ich znaczenia lub częstotliwości dostępu i przechowywania danych w różnych warstwach. Skonfigurowanie warstw danych umożliwia bardziej wydajne korzystanie z zasobów magazynu i poprawia wydajność. Często używane lub krytyczne dane mogą być przechowywane w warstwach o wysokiej wydajności, a rzadziej dostępne lub mniej krytyczne dane mogą być przechowywane w warstwach niższych kosztów. Celem jest przejrzenie użycia danych w czasie w celu zapewnienia, że dane są w odpowiedniej warstwie. W miarę zmiany priorytetów danych dane powinny przechodzić z jednej warstwy do innej.

  • Implementowanie czasu wygaśnięcia: czas wygaśnięcia to mechanizm, który ustawia czas wygaśnięcia danych. Czas wygaśnięcia umożliwia automatyczne usuwanie lub archiwizowanie danych po pewnym okresie, co zmniejsza wymagania dotyczące magazynu i poprawia zarządzanie danymi. Ustawiając odpowiedni czas wygaśnięcia, możesz zezwolić na usuwanie niepotrzebnych danych, zwalnianie miejsca do magazynowania i zwiększanie ogólnej wydajności. Dane sesji, pliki tymczasowe i dane pamięci podręcznej są częstymi miejscami docelowymi dla czasu wygaśnięcia. Wpisy bazy danych mogą również mieć czas wygaśnięcia.

Ryzyko: Czas wygaśnięcia, który jest zbyt krótki, może powodować problemy z wydajnością.

Ułatwienia platformy Azure

Automatyzacja optymalizacji wydajności: usługa Azure Advisor zapewnia automatyczne zalecenia dotyczące wydajności na podstawie telemetrii obciążenia. Należy regularnie przeglądać i rozwiązywać te zalecenia. Usługa Azure Monitor zapewnia wgląd w wydajność systemu w czasie rzeczywistym i umożliwia konfigurowanie alertów na podstawie określonych metryk wydajności. Usługa Azure Log Analytics zapewnia zautomatyzowaną diagnostykę i analizę zebranych dzienników i metryk. Narzędzia takie jak aplikacja systemu Azure Insights udostępniają szczegółowe informacje i zalecenia dotyczące optymalizacji wydajności.

Aby zautomatyzować korygowanie, użyj narzędzi automatyzacji lub skryptów, aby automatycznie wykonywać akcje korygowania po wyzwoleniu alertów. Możesz użyć rozwiązań do automatyzacji Azure Automation, Azure Functions lub niestandardowych.

Platforma Azure umożliwia testowanie wydajności w celu symulowania różnych scenariuszy i obciążeń użytkowników. Zautomatyzowane testowanie może pomóc zidentyfikować wąskie gardła wydajności i odpowiednio zoptymalizować system. Narzędzia, takie jak Azure DevOps, mogą automatyzować testowanie wydajności.

Optymalizacja baz danych: rodzina produktów SQL ma wiele wbudowanych funkcji , które umożliwiają monitorowanie i korygowanie wydajności bazy danych SQL. Te funkcje powinny służyć do utrzymania wydajności bazy danych. Azure SQL Database ma funkcję automatycznego dostrajania, która stale monitoruje i ulepsza zapytania. Ta funkcja służy do automatycznego ulepszania zapytań SQL.

Zasady indeksowania można dostosować przy użyciu funkcji usługi Azure Cosmos DB. Dostosuj zasady, aby spełnić wymagania dotyczące wydajności obciążenia.

Optymalizacja wydajności danych: warstwowanie danych umożliwia przechowywanie danych w różnych warstwach na podstawie częstotliwości dostępu i ważności. Pomaga to zoptymalizować koszty magazynu i wydajność. Platforma Azure udostępnia różne warstwy magazynowania, takie jak gorąca, chłodna i archiwum dla danych obiektów blob. Warstwy gorąca są zoptymalizowane pod kątem często używanych danych, warstwy chłodne są przeznaczone dla rzadko używanych danych, a warstwy archiwum są przeznaczone dla rzadko używanych danych. Korzystając z warstwy dostępu do magazynu najlepiej dopasowanej do danych, możesz zapewnić wydajne przechowywanie i pobieranie danych.

Lista kontrolna wydajności wydajności

Zapoznaj się z pełnym zestawem zaleceń.