Kompromisy w zakresie wydajności

Obciążenie spełniające cele dotyczące wydajności bez nadmiernej aprowizacji jest wydajne. Celem wydajności jest posiadanie wystarczającej podaży do obsługi popytu przez cały czas. Kluczowe strategie wydajności obejmują odpowiednie wykorzystanie optymalizacji kodu, wzorców projektowych, planowania pojemności i skalowania. Jasne cele dotyczące wydajności i testowanie stanowi podstawę tego filaru.

Podczas procesu negocjowania celów wydajności obciążenia i projektowania obciążenia pod kątem wydajności ważne jest, aby pamiętać o tym, w jaki sposób zasady projektowania wydajności wydajności i zalecenia z listy kontrolnej przeglądu projektu wydajności wydajności mogą mieć wpływ na cele optymalizacji innych filarów. Niektóre decyzje dotyczące wydajności mogą przynieść korzyści niektórym filarom, ale stanowią kompromisy dla innych. W tym artykule wymieniono przykładowe kompromisy, które zespół obciążeń może napotkać podczas projektowania architektury obciążeń i operacji pod kątem wydajności.

Kompromisy w zakresie wydajności z niezawodnością

Kompromis: zmniejszona replikacja i zwiększona gęstość. Podstawą niezawodności jest zapewnienie odporności dzięki replikacji i ograniczeniu promienia wybuchu awarii.

  • Obciążenie, które osiąga wydajność, opóźniając skalowanie do ostatniego odpowiedzialnego momentu ściśle spełnia zapotrzebowanie, ale jest narażone na nieprzewidziane awarie węzłów i opóźnienia skalowania.

  • Konsolidacja zasobów obciążenia może używać nadmiarowej pojemności i zwiększyć wydajność. Zwiększa jednak promień wybuchu awarii we współlokarze składników lub platformy aplikacji.

  • Skalowanie w pionie lub skalowanie w dół w celu zminimalizowania nadwyżki pojemności może pozostawić obciążenie nieprowizowane podczas skoków użycia, co prowadzi do zakłóceń w działaniu usługi z powodu niewystarczającej podaży.

Kompromis: zwiększona złożoność. Niezawodność określa priorytety prostoty.

  • Używanie skalowania automatycznego do równoważenia podaży obciążenia względem zapotrzebowania wprowadza zmienność topologii obciążenia i dodaje składnik, który musi działać poprawnie, aby system był niezawodny. Skalowanie automatyczne prowadzi do wyzwalania większej liczby zdarzeń cyklu życia aplikacji, takich jak uruchamianie i zatrzymywanie.

  • Partycjonowanie danych i dzielenie na fragmenty pomagają uniknąć problemów z wydajnością w dużych lub często używanych zestawach danych. Jednak implementacja tych wzorców zwiększa złożoność, ponieważ (ostateczna) spójność musi być utrzymywana między dodatkowymi zasobami.

  • Denormalizowanie danych dla zoptymalizowanych wzorców dostępu może zwiększyć wydajność, ale wprowadza złożoność, ponieważ wiele reprezentacji danych musi być synchronizowanych.

  • Wzorce projektowe chmury skoncentrowane na wydajności czasami wymagają wprowadzenia dodatkowych składników. Użycie tych składników zwiększa obszar powierzchni obciążenia. Następnie składniki muszą być niezawodne, aby zapewnić niezawodność całego obciążenia. Przykłady:

    • Magistrala komunikatów do bilansowania obciążenia, która wprowadza krytyczny składnik stanowy.
    • Moduł równoważenia obciążenia dla replik skalowanych automatycznie, który wymaga niezawodnej operacji i rejestracji replik.
    • Odciążanie danych do pamięci podręcznych, co wymaga podejścia do niezawodnej unieważniania pamięci podręcznej.

Kompromis: Testowanie i obserwacja aktywnych środowisk. Unikanie niepotrzebnego używania systemów produkcyjnych jest podejściem samozachowawczym w celu zwiększenia niezawodności.

  • Testowanie wydajnościowe w aktywnych środowiskach, takich jak użycie transakcji syntetycznych, niesie ze sobą ryzyko wystąpienia awarii z powodu akcji testowych lub konfiguracji.

  • Obciążenia powinny być instrumentowane za pomocą systemu monitorowania wydajności aplikacji (APM), który umożliwia zespołom uczenie się z aktywnych środowisk. Narzędzia APM są instalowane i konfigurowane w kodzie aplikacji lub w środowisku hostingu. Niewłaściwe użycie, przekroczenie ograniczeń lub błędna konfiguracja narzędzia może naruszyć jego funkcjonalność i konserwację, co może potencjalnie osłabić niezawodność.

Kompromisy w zakresie wydajności z zabezpieczeniami

Kompromis: redukcja mechanizmów kontroli zabezpieczeń. Mechanizmy kontroli zabezpieczeń są ustanawiane w wielu warstwach, czasami nadmiarowo, aby zapewnić ochronę w głębi systemu.

Jedną ze strategii optymalizacji wydajności jest usunięcie lub obejście składników lub procesów, które przyczyniają się do opóźnień w przepływie, zwłaszcza gdy ich czas przetwarzania nie jest uzasadniony. Jednak ta strategia może naruszyć bezpieczeństwo i powinna towarzyszyć gruntownej analizie ryzyka. Rozważmy następujące przykłady:

  • Usunięcie szyfrowania podczas przesyłania lub magazynowania w celu zwiększenia szybkości transferu naraża dane na potencjalne naruszenia integralności lub poufności.

  • Usuwanie lub zmniejszanie narzędzi do skanowania zabezpieczeń lub inspekcji w celu skrócenia czasu przetwarzania może naruszyć poufność, integralność lub dostępność chronionych przez te narzędzia.

  • Zmniejszenie częstotliwości stosowania poprawek zabezpieczeń w celu ograniczenia wpływu na wydajność może pozostawić obciążenie bardziej narażone na pojawiające się zagrożenia.

  • Usunięcie reguł zapory z przepływów sieciowych w celu zwiększenia opóźnienia sieci może umożliwić niepożądaną komunikację.

  • Minimalizacja walidacji danych w celu szybszego przetwarzania danych może naruszyć integralność danych, zwłaszcza jeśli dane wejściowe są złośliwe.

  • Użycie mniejszej entropii w algorytmach szyfrowania lub tworzenia skrótów, na przykład na wektor inicjowania (IV), jest bardziej wydajne, ale ułatwia pękanie szyfrowania.

Kompromis: zwiększony obszar powierzchni obciążenia. Zabezpieczenia priorytetują ograniczony i zawarty obszar powierzchni, aby zminimalizować wektory ataków i zmniejszyć zarządzanie mechanizmami kontroli zabezpieczeń.

Wzorce projektowe chmury skoncentrowane na wydajności czasami wymagają wprowadzenia dodatkowych składników. Te składniki zwiększają obszar powierzchni obciążenia. Nowe składniki muszą być zabezpieczone, prawdopodobnie w sposób, który nie jest jeszcze używany w systemie, i często zwiększają zakres zgodności. Rozważ następujące często dodane składniki:

  • Magistrala komunikatów do bilansowania obciążenia

  • Moduł równoważenia obciążenia dla replik skalowanych automatycznie

  • Odciążanie danych do pamięci podręcznych, sieci dostarczania aplikacji lub sieci dostarczania zawartości

  • Odciążanie przetwarzania do zadań w tle, a nawet obliczeń klienta

Kompromis: usuwanie segmentacji. Filar Zabezpieczenia określa priorytet silnej segmentacji, aby umożliwić precyzyjne mechanizmy kontroli zabezpieczeń i zmniejszyć promień wybuchu.

Udostępnianie zasobów to podejście do poprawy wydajności. Zwiększa gęstość w celu optymalizacji użycia pojemności. Przykłady obejmują scenariusze wielodostępności lub łączenie różnych aplikacji w architekturze na wspólnej platformie aplikacji. Zwiększona gęstość może prowadzić do następujących problemów związanych z bezpieczeństwem:

  • Zwiększone ryzyko nieautoryzowanego przenoszenia poprzecznego z jednej dzierżawy do innej.

  • Tożsamość współużytkowanego obciążenia, która narusza zasadę najniższych uprawnień i zasłania poszczególne dzienniki inspekcji w dziennikach dostępu.

  • Mechanizmy kontroli zabezpieczeń obwodowych, na przykład reguły sieci, które są ograniczone do pokrycia wszystkich składników znajdujących się w wspólnej lokalizacji, zapewniając poszczególnym składnikom większy dostęp niż jest to konieczne.

  • Naruszenie zabezpieczeń hosta platformy aplikacji lub pojedynczego składnika z powodu większego promienia wybuchu. Ten wzrost jest spowodowany łatwiejszym dostępem do składników współlokowanych.

  • Wspólne lokalizowanie różnych składników prowadzących do większej liczby składników w zakresie zgodności ze względu na ich współużytkowany host.

Kompromisy w zakresie wydajności dzięki optymalizacji kosztów

Kompromis: Zbyt duża podaż na popyt. Zarówno optymalizacja kosztów, jak i efektywność wydajności priorytetu mają wystarczającą podaż, aby obsłużyć popyt.

  • Nadmierna aprowizacja jest ryzykiem, gdy zespoły próbują rozwiązać problemy z wydajnością w obciążeniu. Oto niektóre typowe przyczyny nadmiernej aprowizacji:

    • Wstępne planowanie pojemności zostało błędnie obliczone, ponieważ zespół skupił się tylko na oszacowaniu szczytowego obciążenia, zaniedbując strategie szczytowego wygładzania w projekcie obciążenia.
    • Skalowanie zasobu w górę lub w poziomie podczas kroku rozwiązywania problemów z reagowaniem na zdarzenia.
  • Skalowanie automatyczne może być nieprawidłowo skonfigurowane. Oto kilka przykładów nieprawidłowo skonfigurowanego skalowania automatycznego:

    • Skalowanie w górę z minimalnymi zmianami zapotrzebowania lub dłuższym okresem ochładzania może wiązać się z większymi kosztami niż wymaga zapotrzebowanie.
    • Korzystanie z skalowania automatycznego bez określonego górnego limitu może prowadzić do niekontrolowanego wzrostu z powodu awarii systemu lub nadużyć i przekroczenia oczekiwanych wymagań dotyczących obciążenia.
  • Rozszerzanie na wiele regionów może zwiększyć wydajność, przybliżając obciążenia do użytkownika i unikając tymczasowych ograniczeń pojemności zasobów. Jednak zwiększa również złożoność i duplikowanie zasobów.

Kompromis: więcej składników. Jedną z technik optymalizacji kosztów jest konsolidacja z mniejszą liczbą zasobów przez zwiększenie gęstości, usunięcie duplikacji i współlokowanie funkcji.

  • Wzorce projektowe chmury skoncentrowane na wydajności czasami wymagają wprowadzenia dodatkowych składników. Te dodatkowe składniki zwykle prowadzą do ogólnego wzrostu kosztów obciążenia. Można na przykład uwzględnić magistralę komunikatów na potrzeby bilansowania obciążenia lub odciążania zadań do aplikacji lub sieci dostarczania zawartości w celu uzyskania lepszych czasów odpowiedzi.

  • Segmentacja zasobów umożliwia różnym częściom obciążenia różne cechy wydajności, umożliwiając niezależne dostrajanie dla każdego segmentu. Może jednak zwiększyć łączne koszty posiadania, ponieważ wymaga wielu zoptymalizowanych segmentów, a nie jednego uogólnionego składnika.

Kompromis: Zwiększona inwestycja w pozycje, które nie są zgodne z wymaganiami funkcjonalnymi. Jednym z podejść do optymalizacji kosztów jest ocena wartości udostępnianej przez dowolne wdrożone rozwiązanie.

  • Usługi i jednostki SKU w warstwie Premium mogą pomóc obciążeniu spełnić cele dotyczące wydajności. Te usługi zwykle kosztują więcej i mogą udostępniać dodatkowe funkcje. Mogą one być niedostatecznie wykorzystywane, jeśli wiele funkcji premium nie jest używanych specjalnie do osiągania celów wydajności.

  • Wydajne obciążenie wymaga danych telemetrycznych w celu obserwacji, które muszą być przesyłane i przechowywane. Zwiększenie ilości zbieranych danych telemetrycznych wydajności może zwiększyć koszt transferu i magazynowania danych telemetrycznych.

  • Działania związane z testowaniem wydajnościowym dodają koszty, które nie są skojarzone z wartością systemu produkcyjnego. Przykłady kosztów testowania wydajnościowego obejmują:

    • Tworzenie wystąpień środowisk przeznaczonych do testów skoncentrowanych na wydajności.
    • Korzystanie z wyspecjalizowanych narzędzi do wydajności.
    • Poświęcanie czasu na uruchamianie testów.
  • Członkowie zespołu szkoleniowego do wyspecjalizowanych zadań optymalizacji wydajności lub płacenia za usługi dostrajania wydajności zwiększa koszt obciążenia.

Kompromisy w zakresie wydajności z doskonałością operacyjną

Kompromis: Zmniejszona zauważalność. Możliwość obserwacji jest niezbędna do zapewnienia obciążenia z znaczącym alertem i pomaga zapewnić pomyślną reakcję na zdarzenia.

  • Zmniejszenie ilości dzienników i metryk w celu skrócenia czasu przetwarzania poświęcanego na zbieranie danych telemetrycznych zamiast innych zadań zmniejsza ogólną widoczność systemu. Oto kilka przykładów wynikowej zmniejszonej możliwości obserwacji:

    • Ogranicza ona punkty danych używane do tworzenia znaczących alertów.
    • Prowadzi to do luk w zakresie działań reagowania na zdarzenia.
    • Ogranicza wgląd w interakcje i granice wrażliwe na zabezpieczenia lub zgodność.
  • W przypadku implementowania wzorców projektowych wydajności złożoność obciążenia często wzrasta. Składniki są dodawane do przepływów krytycznych. Strategia monitorowania obciążenia i monitorowanie wydajności muszą obejmować te składniki. Gdy przepływ obejmuje wiele składników lub granic aplikacji, zwiększa się złożoność monitorowania wydajności tego przepływu. Wydajność przepływu musi być skorelowana ze wszystkimi połączonymi składnikami.

Kompromis: zwiększona złożoność operacji. Złożone środowisko ma bardziej złożone interakcje i większe prawdopodobieństwo negatywnego wpływu na rutynowe, ad hoc i operacje awaryjne.

  • Zwiększenie wydajności przez zwiększenie gęstości zwiększa ryzyko w zadaniach operacyjnych. Błąd w jednym procesie może mieć duży promień wybuchu.

  • W miarę implementowania wzorców projektowych wydajności mają wpływ na procedury operacyjne, takie jak kopie zapasowe, rotacje kluczy i strategie odzyskiwania. Na przykład partycjonowanie danych i dzielenie na fragmenty mogą komplikować rutynowe zadania, gdy zespoły próbują upewnić się, że te zadania nie mają wpływu na spójność danych.

Kompromis: Stres kulturowy. Doskonałość operacyjna zakorzeniona jest w kulturze bez winy, szacunku i ciągłego ulepszania.

  • Przeprowadzanie analizy głównej przyczyny problemów z wydajnością identyfikuje braki w procesach lub implementacjach, które wymagają korekty. Zespół powinien rozważyć ćwiczenie szansę nauki. Jeśli członkowie zespołu są obwiniani o problemy, morale może mieć wpływ.

  • Procesy rutynowe i ad hoc mogą mieć wpływ na wydajność obciążeń. Często uważa się, że lepiej wykonywać te działania poza godzinami szczytu. Jednak godziny poza szczytem mogą być niewygodne lub poza regularnymi godzinami dla członków zespołu, którzy są odpowiedzialni za lub wykwalifikowanych w tych zadaniach.

Zapoznaj się z kompromisami dla innych filarów: