Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obciążenie, które spełnia swoje cele dotyczące wydajności bez nadmiarowego przydzielania zasobów, jest efektywne. 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 negocjowania celów wydajności i projektowania obciążenia pod kątem wydajności należy rozważyć, w jaki sposób decyzje oparte na zasadach projektowania wydajności i zalecenia z listy kontrolnej przeglądu projektu wydajności wydajności mogą mieć wpływ na cele i optymalizacje innych filarów. Niektóre decyzje dotyczące wydajności korzystają z jednego filaru, ale stanowią kompromisy dla innego. W tym artykule opisano przykładowe kompromisy, które zespół ds. obciążeń może napotkać podczas projektowania architektury obciążeń 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ążenia może wykorzystać nadmierną pojemność i zwiększyć wydajność. Zwiększa jednak promień wybuchu awarii we współlokalizowanym składniku lub platformie aplikacji.
Skalowanie w poziomie lub w dół w celu zminimalizowania nadwyżki pojemności może pozostawić obciążenie niedostatecznie zabezpieczone w czasie nagłych wzrostów użycia, co prowadzi do zakłóceń usług z powodu niewystarczających zasobów.
Kompromis: zwiększona złożoność. Niezawodność określa priorytety prostoty.
Korzystanie z automatycznego skalowania w celu równoważenia dostosowania podaży obciążenia do popytu wprowadza zmienność w topologii obciążenia i dodaje komponent, który musi funkcjonować prawidłowo, 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, ale zwiększają 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 w chmurze skoncentrowane na wydajności czasami wymagają dodania 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ęcznej, co wymaga niezawodnego podejścia do unieważniania 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 opóźniają przepływ, gdy ich czas przetwarzania nie jest uzasadniony. Ta strategia może naruszyć bezpieczeństwo i wymagać dokładnej analizy 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 w chmurze skoncentrowane na wydajności czasami wymagają dodania 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
Wyładowanie danych do pamięci podręcznych, sieci dostarczania aplikacji lub sieci dostarczania zawartości
Odciążanie przetwarzania poprzez przekazywanie go do zadań w tle lub nawet do mocy obliczeniowej klienta
Kompromis: Redukcja segmentacji. Priorytetem filaru zabezpieczeń jest zapewnienie silnej segmentacji, aby umożliwić precyzyjne mechanizmy kontroli zabezpieczeń i ograniczyć zasięg szkód.
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 przemieszczania się pomiędzy klientami.
Tożsamość współdzielonego obciążenia, która narusza zasadę najmniejszych uprawnień i zaciemnia osobiste ślady audytu 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.
W wyniku większego promienia rażenia następuje naruszenie bezpieczeństwa hosta platformy aplikacji lub pojedynczego składnika. Ten wzrost jest spowodowany łatwiejszym dostępem do współlokowanych komponentów.
Umieszczanie we wspólnej lokalizacji różnych składników prowadzi do zwiększenia liczby składników objętych zakresem zgodności ze względu na ich współużytkowany host.
Kompromis: Nieaktualny stan bezpieczeństwa. Filar zabezpieczeń wymaga podejmowania decyzji dotyczących autoryzacji, zawartości i zaufania w celu odzwierciedlenia bieżącego stanu systemu.
Buforowanie i dystrybucja na krawędzi zwiększają wydajność, obsługując odpowiedzi z kopii zamiast ich ponownej walidacji. Im dłuższy jest czas życia kopii i słabsze jej mechanizmy unieważniania, tym większe prawdopodobieństwo, że odzwierciedla ona stan zabezpieczeń, który już nie obowiązuje. Wstępnie obliczone wyniki powodują podobne ryzyko, ale w przeciwieństwie do pamięci podręcznych zwykle nie mają wbudowanego mechanizmu okresu ważności ani unieważniania i pozostają nieaktualne aż do momentu uruchomienia następnego wyzwalacza obliczeniowego.
Buforowane tokeny uwierzytelniania, decyzje autoryzacji lub dane sesji mogą zezwalać na dostęp po wyłączeniu użytkownika, odwołaniu roli, rotacji tokenu, zmianie oświadczeń lub uprawnień lub zaktualizowaniu zasad dostępu warunkowego. Okno między unieważnieniem a wygaśnięciem pamięci podręcznej to okres nieautoryzowanego dostępu.
Zawartość dostarczana z sieci CDN, pamięci podręcznej bramy interfejsu API lub pamięci podręcznej przeglądarki może nadal obsługiwać dane, które zostały wycofane lub ponownie sklasyfikowane w miejscu pochodzenia. Dane zmodyfikowane ze względów prawnych mogą również być utrwalane w buforowanych odpowiedziach po wprowadzeniu poprawek w źródle. Ta trwałość może naruszać wymagania dotyczące obsługi danych, przechowywania lub prywatności.
Kompromisy między wydajnością a optymalizacją kosztów
Kompromis: Nadmierna podaż w stosunku do popytu. Zarówno optymalizacja kosztów, jak i efektywność wydajności przyznają priorytet wystarczającej podaży, aby obsłużyć zapotrzebowanie.
Nadmierne zapewnianie zasobów jest ryzykiem, gdy zespoły próbują łagodzić problemy z wydajnością w przypadku obciążenia roboczego. 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 skoncentrowane na wydajności chmury czasami wymagają dodania 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 równoważenia obciążenia lub przekazywania zadań do aplikacji lub sieci dostarczania treś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 ilości danych telemetrycznych dotyczących wydajności, które są zbierane, może zwiększyć koszt transferu i przechowywania tych danych.
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 instancji środowisk przeznaczonych do testów skupionych na wydajności.
- Korzystanie z wyspecjalizowanych narzędzi do pomiaru wydajności.
- Poświęcanie czasu na wykonywanie testów.
Szkolenie członków zespołu w zakresie specjalistycznych zadań optymalizacji wydajności lub opłacanie za usługi optymalizacji wydajności zwiększa 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 danych telemetrycznych zmniejsza ogólną obserwowalność. Oto kilka przykładów:
- Mniejsza liczba punktów danych do tworzenia znaczących alertów.
- Luki w pokryciu działań związanych z zarządzaniem incydentami.
- Ograniczona widoczność w interakcjach i granicach dotyczących bezpieczeństwa lub zgodności.
Wzorce projektowe wydajności często dodają złożoność, wprowadzając składniki do krytycznych przepływów. Strategia monitorowania obciążenia musi obejmować te składniki. Gdy przepływ obejmuje wiele składników lub granic aplikacji, wydajność musi być skorelowana we wszystkich z nich.
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 zakres oddziaływania.
Wdrażanie wzorców dotyczących wydajności wpływa 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 traktować ćwiczenie jako szansę na naukę. Jeśli członkowie zespołu są obwiniani za problemy, morale może na tym ucierpieć.
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 normalnymi godzinami pracy mogą być niewygodne lub wypadać poza regularne godziny pracy dla członków zespołu, którzy są odpowiedzialni za te zadania lub wykwalifikowanych w nich.
Pokrewne łącza
Zapoznaj się z kompromisami dotyczącymi innych filarów: