Kompromisy wydajności wydajności
Obciążenie spełniające cele dotyczące wydajności bez nadmiernej aprowizacji jest wydajne. Celem wydajności jest posiadanie wystarczającej ilości 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ć, w jaki sposób zasady projektowania wydajności i zalecenia z listy kontrolnej Przegląd projektu 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ół ds. obciążeń może napotkać podczas projektowania architektury obciążenia i operacji pod kątem wydajności.
Kompromisy wydajności z niezawodnością
Kompromis: zmniejszona replikacja i zwiększona gęstość. Podstawą niezawodności jest zapewnienie odporności dzięki użyciu replikacji i ograniczeniu promienia wybuchu awarii.
Obciążenie, które osiąga wydajność dzięki opóźnieniu skalowania do ostatniego momentu odpowiedzialnego ściśle spełnia zapotrzebowanie, ale jest podatne na nieprzewidziane awarie węzłów i opóźnienia skalowania.
Konsolidacja zasobów obciążeń może korzystać z nadmiarowej pojemności i zwiększyć wydajność. Zwiększa jednak promień wybuchu awarii we współlokarze składników lub platformy aplikacji.
Skalowanie w dół lub skalowanie w dół w celu zminimalizowania nadwyżki pojemności może pozostawić obciążenie niedoprowizowane podczas skoków użycia, co prowadzi do zakłóceń usług z powodu niewystarczającej podaży.
Kompromis: zwiększona złożoność. Niezawodność określa priorytety prostoty.
Korzystanie z skalowania automatycznego w celu równoważenia podaży obciążenia na żądanie 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 w obrębie dodatkowych zasobów.
Denormalizowanie danych dla zoptymalizowanych wzorców dostępu może poprawić 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. Oto kilka przykładów:
- 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żnienia pamięci podręcznej.
Kompromis: testowanie i obserwacja w aktywnych środowiskach. Unikanie niepotrzebnego korzystania z systemów produkcyjnych jest podejściem do samozachowawnictwa i unikania ryzyka w zakresie niezawodności.
Testowanie wydajnościowe w aktywnych środowiskach, takich jak użycie transakcji syntetycznych, niesie ze sobą ryzyko awarii spowodowanej akcjami testowymi lub konfiguracjami.
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 podważać niezawodność.
Kompromisy wydajności z zabezpieczeniami
Kompromis: Zmniejszenie 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ć gruntowna analiza ryzyka. Rozważ następujące przykłady:
Usunięcie szyfrowania podczas przesyłania lub spoczynku w celu zwiększenia szybkości transferu naraża dane na potencjalne naruszenia integralności lub poufności.
Usunięcie lub zmniejszenie możliwości skanowania zabezpieczeń lub inspekcji narzędzi w celu skrócenia czasu przetwarzania może naruszyć poufność, integralność lub dostępność tych narzędzi.
Zmniejszenie częstotliwości stosowania poprawek zabezpieczeń w celu ograniczenia wpływu na wydajność może sprawić, że obciążenie będzie 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 sprawdzania poprawności danych lub kontroli bezpieczeństwa zawartości w celu szybszego przetwarzania danych może naruszyć integralność danych, zwłaszcza jeśli dane wejściowe są złośliwe.
Użycie mniej entropii w algorytmach szyfrowania lub tworzenia skrótów, na przykład wektora inicjalizacji (IV), jest bardziej wydajne, ale ułatwia złamanie 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 zasobów obliczeniowych klienta
Kompromis: usuwanie segmentacji. Filar zabezpieczeń określa priorytety silnej segmentacji, aby umożliwić precyzyjne mechanizmy kontroli zabezpieczeń i zmniejszyć promień wybuchu.
Udostępnianie zasobów dzięki zwiększonej gęstości to podejście do poprawy wydajnoś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 bocznego z jednej dzierżawy do innej.
Tożsamość współużytkowanego obciążenia, która narusza zasadę najniższych uprawnień i zaciemnia 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 współlokowanych, zapewniając poszczególnym składnikom większy dostęp niż jest to konieczne.
Naruszenie bezpieczeństwa hosta platformy aplikacji lub pojedynczego składnika ze względu na większy promień 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 związane z wydajnością dzięki optymalizacji kosztów
Kompromis: Za dużo podaży na popyt. Zarówno optymalizacja kosztów, jak i efektywność wydajności mają priorytet, mając wystarczającą podaż, aby obsłużyć zapotrzebowanie.
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 źle obliczone, ponieważ zespół skupił się tylko na oszacowaniach szczytowego obciążenia, zaniedbując strategie szczytowego złagodzenia projektu obciążenia.
- Skalowanie zasobu w górę lub w poziomie podczas kroku rozwiązywania problemów z reagowaniem na zdarzenie.
Skalowanie automatyczne może być nieprawidłowo skonfigurowane. Oto kilka przykładów błędnie 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ększym kosztem 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 ta topologia zwiększa również złożoność i duplikowanie zasobów.
Kompromis: więcej składników. Jedną z technik optymalizacji kosztów jest skonsolidowanie 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 dołączyć magistralę komunikatów do zadań bilansowania obciążenia lub odciążania 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, co umożliwia 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 przedmioty, które nie są zgodne z wymaganiami funkcjonalnymi. Jedną z metod optymalizacji kosztów jest ocena wartości dostarczonej przez każde wdrożone rozwiązanie.
Usługi i jednostki SKU w warstwie Premium mogą pomóc w osiągnięciu celów dotyczących wydajności. Te usługi zwykle kosztują więcej i mogą udostępniać dodatkowe funkcje. Mogą one być niedostatecznie wykorzystywane, jeśli wiele funkcji w warstwie Premium nie jest używanych specjalnie do osiągania celów wydajności.
Wydajne obciążenie wymaga danych telemetrycznych w celu obserwowania, które muszą być przesyłane i przechowywane. Wzrost zbieranych danych telemetrycznych wydajności może zwiększyć koszt transferu danych telemetrycznych i magazynu.
Działania testowania wydajnościowego 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 wydajności.
- Poświęcanie czasu na uruchamianie testów.
Członkowie zespołu szkoleniowego pod kątem wyspecjalizowanych zadań optymalizacji wydajności lub płacenia za usługi dostrajania wydajności dodają koszt obciążenia.
Kompromisy w zakresie wydajności z doskonałością operacyjną
Kompromis: Zmniejszona zauważalność. Możliwość obserwowania jest niezbędna, aby zapewnić obciążenie z znaczącym alertem i 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 wynikającej z mniejszej 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 implementacji 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 we wszystkich połączonych składnikach.
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 i dzielenie danych może 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.
Przeprowadzenie analizy głównej przyczyny problemów z wydajnością identyfikuje braki w procesach lub implementacjach, które wymagają korekty. Zespół powinien rozważyć ćwiczenie możliwości uczenia się. Jeśli członkowie zespołu są obwiniani o kwestie, morale może mieć wpływ.
Rutynowe i ad hoc procesy mogą mieć wpływ na wydajność obciążeń. Często uważa się, że najlepiej 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.
Pokrewne łącza
Zapoznaj się z kompromisami dotyczącymi innych filarów: