Zasady projektowania wydajności wydajności
Wydajność to możliwość dostosowania obciążenia do zmian zapotrzebowania. Obciążenie musi być w stanie obsłużyć wzrost obciążenia bez naruszania środowiska użytkownika. Z drugiej strony, gdy występuje spadek obciążenia, obciążenie musi zaoszczędzić swoje zasoby. Pojemność, która wskazuje dostępność zasobów (procesor CPU i pamięć), jest istotnym czynnikiem.
Projekt obciążenia nie powinien polegać tylko na wstępnie aprowizowanej pojemności, co gwarantuje wydajność do określonego limitu. Jeśli ten limit zostanie przekroczony, obciążenie może mieć problemy z wydajnością, a nawet awarie. Gdy obciążenie jest w ramach tego limitu, zasoby nadal działają niepotrzebnie, generując koszty.
Potrzebna jest kompleksowa strategia utrzymania celów wydajności w czasie. Zagadnienia dotyczące wydajności nie powinny być przemyślane w procesie projektowania, tylko w przypadku wystąpienia problemów w środowisku produkcyjnym. Zamiast tego należy przyjąć sposób myślenia, w którym wydajność jest kluczową kwestią od wczesnych etapów projektowania. Początkowo skompiluj system bez konkretnych celów wydajności. Ale stamtąd testowanie i mierzenie wydajności na każdym etapie programowania w celu zapewnienia postępu i skuteczności. Ciągła optymalizacja tych celów w całym procesie i uwzględnienie wniosków uzyskanych z produkcji może znacznie ograniczyć potencjalne problemy z wyprzedzeniem.
Te zasady projektowania mogą pomóc w tworzeniu strategii zarządzania pojemnością zasobów, aby wystarczająco spełnić wymagania biznesowe dotyczące oczekiwanego użycia. Ponadto zmniejsz odpady poza godzinami szczytu. Po podjęciu decyzji o strategii zgrubiaj projekt przy użyciu listy kontrolnej Wydajność wydajności.
Wydajność polega na efektywnym wykorzystaniu zasobów obciążenia. Bez dobrej strategii może nie być w stanie przewidzieć i spełnić wymagań użytkowników. Może być konieczne skorzystanie z podejścia do długoterminowego prognozowania i wstępnie aprowizowanej pojemności, co nie pozwala na pełne wykorzystanie platformy w chmurze.
Negocjowanie realistycznych celów wydajności
Zdefiniowane jest zamierzone środowisko użytkownika i istnieje strategia opracowywania celów porównawczych i mierzenia pod kątem wstępnie ustalonych wymagań biznesowych. |
---|
Z perspektywy wydajności najlepiej jest mieć dobrze zdefiniowane cele wydajności, aby rozpocząć proces projektowania. Aby ustawić te cele, musisz mieć dobrą wiedzę na temat wymagań biznesowych i oczekiwanej jakości usług, które ma dostarczyć obciążenie. Zdefiniuj oczekiwania we współpracy z uczestnikami projektu biznesowego. Zamiast skupiać się tylko na metrykach technicznych, określ akceptowalny wpływ na środowisko użytkownika dla kluczowych przepływów.
Istnieje zależność cykliczna. Nie można zmierzyć tego, czego nie zdefiniowano i nie można zdefiniować bez pomiaru. Dlatego ważne jest również , aby zmierzyć wydajność obciążenia, dopóki nie osiągniesz zadowalającej definicji dopuszczalnego progu z umową zbiorczą.
Istnieje silna korelacja między celami wydajności i niezawodności, które pomagają określić jakość usług pod względem wydajności, dostępności i odporności. Bez jasnej definicji trudno jest zmierzyć, alerty i przetestować wydajność. Po ustanowieniu celów i zidentyfikowaniu rzeczywistych liczb za pomocą testowania w czasie można zaimplementować automatyzację na potrzeby ciągłego testowania względem tych celów.
Przestrzegaj najlepszych rozwiązań w zakresie definiowania celów na poziomie makra, nawet jeśli są one przybliżone lub w zakresie.
Podejście | Korzyści |
---|---|
Przygotuj się do skutecznych negocjacji , poznając koncepcje techniczne, eksplorując możliwości projektowe z dostępną infrastrukturą i korzystając z wyników konkretnych eksperymentów, jeśli są dostępne. Użyj danych historycznych , aby uzyskać wgląd w wzorce użycia i wąskie gardła. Zapoznaj się z czynnikami zewnętrznymi, takimi jak dane wejściowe z analizy rynku, ekspertów i standardów branżowych. |
Możesz podejmować świadome decyzje na podstawie praktycznych szczegółowych informacji. Cele dotyczące wydajności koncentrują się na środowisku użytkownika, które opiera się na tym, co jest możliwe, najlepsze rozwiązania branżowe i bieżące trendy rynkowe. |
Współpracuj z właścicielami firm , aby zrozumieć obietnice użytkowników, pod względem jakości i zgodności z przepisami, jeśli ma to zastosowanie. Zachowaj szeroką perspektywę i unikaj szczegółowego wglądu w szczegółowe informacje na tym etapie. Bądź jawny o tym, co reprezentuje akceptowalną wydajność, na podstawie inwestycji. Zapoznaj się z kontekstem biznesowym i przewidywanym wzrostem. |
Unikaj wprowadzania założeń , które mogą nie być zgodne z celami biznesowymi. Zapewnia również przejrzystość i motywację w zespole ds. obciążeń. Posiadanie kontekstu biznesowego na wymaganiach funkcjonalnych i niefunkcjonalnych może odkryć zmiany projektu w innych filarach usługi Azure Well-Architected i pomóc w uzyskaniu świadomych kompromisów. Wczesne definiowanie parametrów pomaga uniknąć kosztów związanych z potencjalnymi projektami rozwiązań później. Umożliwia zapewnienie, że cele wydajności obejmują przyszłe prognozy, dzięki czemu można dostosować bieżące wysiłki do długoterminowych celów. |
Zidentyfikuj przepływy obciążenia i nadaj priorytet przepływom na diagramie architektury. Zdefiniuj tolerancję wydajności każdego przepływu jako zakres od aspiracji do niedopuszczalnej wydajności. Oceń punkty wejścia i wyjścia dla każdego przepływu, biorąc pod uwagę krytyczność ścieżki, częstotliwość użycia i intensywność architektury. |
Dzięki określaniu priorytetów przepływów można skoncentrować zasoby na krytycznych obszarach , które mają największy wpływ na wyniki użytkownika i firmy. Dzieląc system na jego części i zależności, rozumiesz funkcję każdego składnika i wpływasz na wydajność. Poznasz również potencjalne problemy. Pomaga to w ustaleniu punktu odniesienia wydajności i optymalizacji dysków. |
Rozpoczynanie tworzenia modelu wydajności Zastanów się, czy wzorce użycia pokazują sezonowe, czy dzienne odmiany. Uwzględnianie kosztów, operacji i krytycznego znaczenia dla firmy. Użyj standardów branżowych, aby oszacować metryki i metody agregacji, takie jak używanie percentylów. Oceń oczekiwania i podaży oraz ograniczenia, które nakładają ograniczenia biznesowe. Uwzględnij perspektywy wzrostu. |
Model wydajności zapewnia wgląd w optymalne wykorzystanie zasobów i pomaga w planowaniu strategicznym. Standardy branżowe pomagają w porównywaniu porównawczym. Przyszłe sprawdzanie zapewnia, że cele wydajności pozostają istotne i mogą dostosować się do zmian. |
Projektowanie pod kątem spełnienia wymagań dotyczących pojemności
Zapewnij wystarczającą ilość podaży, aby sprostać przewidywanemu zapotrzebowaniu. |
---|
Ważne jest, aby aktywnie mierzyć wydajność. Mierzenie wydajności obejmuje pomiar linii bazowych i wstępne zrozumienie, które składniki systemu mogą stanowić wyzwania. Można to osiągnąć bez przeprowadzania pełnego testu wydajnościowego lub poprzez szczegółową optymalizację. Wykonując te początkowe kroki, ustanawiasz podstawę efektywnego zarządzania wydajnością na wczesnym etapie cyklu projektowania.
Przeanalizuj system jako całość, zamiast skupiać się na poszczególnych składnikach. Unikaj dostrajania na tym etapie. Wprowadzanie szczegółowych ulepszeń wydajności powoduje kompromisy w innych obszarach. W miarę postępu cyklu życia i rozpoczynania testowania akceptacji użytkowników lub przechodzenia do środowiska produkcyjnego można szybko zidentyfikować obszary wymagające dalszej optymalizacji.
Podejście | Korzyść |
---|---|
Oceń wymagania dotyczące elastyczności zidentyfikowanych przepływów. Poznaj wzorce projektowe , które można zaimplementować w stosie technologii, biorąc pod uwagę aplikację i bazowe warstwy obliczeniowe i dane. |
Możesz zdefiniować wymagania dotyczące skalowalności istniejących składników, które wymagają większej pojemności i obszarów, w których potrzebne są dodatkowe składniki do dystrybucji obciążenia. Masz świadomość potencjalnych wąskich gardeł w systemach i projektowych kontrolek wyrównywujących, takich jak dodawanie możliwości buforowania w celu zmniejszenia opóźnienia i obciążenia systemu. |
Wybierz odpowiednie zasoby w stosie technologii, co umożliwia osiągnięcie celów dotyczących wydajności i integrację z systemem. Rozważ funkcje , które mogą spełniać wymagania dotyczące skalowalności. Znajdź właściwą równowagę między alokacją zasobów a wymaganiami systemowymi, aby efektywnie obsługiwać nieoczekiwane wzrosty. |
Analizując różne możliwości zasobów, upewnij się, że każdy składnik przyczynia się do ogólnej funkcjonalności i wydajności systemu. Możesz skorzystać z wbudowanych funkcji , które automatycznie wyzwalają operacje skalowania. Odpowiednie rozmiary zasobów mogą spełniać zmiany zapotrzebowania bez nadmiernej aprowizacji, co prowadzi do oszczędności kosztów. |
Planowanie pojemności na podstawie zapotrzebowania i możliwości wybranych zasobów w celu wzbogacania modelu wydajności. Użyj technik modelowania predykcyjnego , aby prognozować przewidywane zmiany pojemności, które mogą wystąpić z przewidywalnymi i nieoczekiwanymi zmianami. Zdefiniuj cele wydajności , które można przetłumaczyć na wymagania techniczne. |
Możesz efektywnie korzystać z zasobów i zaspokoić zapotrzebowanie bez nadmiernej aprowizacji, co pozwala uniknąć niepotrzebnych kosztów. Rozumiesz, jak wybory projektowe wpływają na wydajność. |
Zaimplementuj dowód koncepcji , który weryfikuje wymagania techniczne i wybory projektowe. | Weryfikacja koncepcji ma kluczowe znaczenie w weryfikacji projektu w celu ustalenia, czy system może spełnić cele wydajności i czy te cele są realistyczne. Na podstawie przewidywanego obciążenia możesz sprawdzić, czy przewidywana pojemność może spełniać cele wydajności. Sprawdź również wpływ kosztów na wybory projektowe. |
Dokumentowanie strategii testowania wydajnościowego. Uwzględnij przypadki użycia, różne metodologie i cykle planów testów. Zdefiniuj proces operacji opisany przez plan testu wydajnościowego. Klasyfikacja i ustalanie priorytetów przypadków testowych w planie. Skoncentruj się na przypadkach, które oferują cenny wgląd w cele wydajności i dostosują planowanie pojemności. |
Upewnij się, że przetestowano odpowiednie aspekty systemu. Zasoby można efektywnie przydzielać i przeprowadzać testy w sposób zgodny z priorytetami i wymaganiami biznesowymi. |
Dokumentowanie strategii monitorowania wydajności. Ocenianie metryk na różnych poziomach abstrakcji dla każdego zidentyfikowanego przepływu. |
Postęp w osiąganiu celów dotyczących wydajności można śledzić w całym cyklu programowania. |
Osiągnięcie i utrzymanie wydajności
Ochrona przed obniżeniem wydajności, gdy system jest w użyciu i w miarę rozwoju systemu. |
---|
Programowanie nie jest jednorazowym nakładem pracy. Jest to ciągły proces. Spodziewaj się zmian w wydajności w miarę zmiany funkcji. Istnieje wariancja w wzorcach i profilach użytkowników, a nawet zmiany optymalizacji w innych filarach usługi Azure Well-Architected. Każda zmiana może obciążać zasoby obciążenia.
Chroń system przed zmianami , aby nie przesuwał się z powrotem na cele wydajności. Integrowanie testowania i monitorowania w procesie programowania. Przetestuj wydajność systemu w środowisku produkcyjnym przy użyciu rzeczywistego obciążenia i zasymuluj obciążenie przy użyciu testów automatycznych przed rozpoczęciem produkcji. W obu przypadkach należy stosować praktyki monitorowania na potrzeby weryfikacji.
W całym cyklu życia programowania przeprowadzaj różne typy testów na różnych etapach. Na początkowych etapach przetestuj weryfikację koncepcji, aby upewnić się, że wyniki wydajności nie są całkowicie nieoczekiwane. W miarę postępu opracowywania przeprowadzaj testy ręczne, niskiego nakładu pracy w celu ustalenia testów porównawczych. Na etapie kompilacji rozpocznij opracowywanie zautomatyzowanych rutynowych testów wydajnościowych , które oceniają opóźnienia, poziomy obciążenia, pojemność obciążenia i inne cechy zdefiniowane w planach testów.
Monitorowanie musi być integralną częścią tego wysiłku, a nie jako izolowane ćwiczenie. Możesz zobaczyć, jak system i jego zasoby działają w czasie. Następnie można je dostosować, aby zmaksymalizować ich wartość i upewnić się, że nadal spełniają standardy wydajności.
Należy pamiętać, że cele wydajności różnią się w czasie, w odpowiedzi na zmiany. Zaktualizuj model wydajności na podstawie przetestowanych i monitorowanych metryk. Wyraźnie wskazuje wzrost, zmniejszenie lub brak wpływu na wydajność przepływów.
Zawsze bądź gotowy do renegocjacji i resetowania oczekiwań z uczestnikami projektu biznesowego.
Podejście | Korzyść |
---|---|
Integrowanie rutynowych testów wydajnościowych w usłudze Azure Pipelines. Wybierz potoki, które mogą integrować testy. Z drugiej strony wybierz narzędzia testowe, które można zintegrować z potokami. |
Zautomatyzowane testy oszczędzają czas i zapewniają spójność, która ułatwia wykrywanie regresji lub ulepszeń. Te artefakty umożliwiają ciągłe monitorowanie wszelkich odchyleń lub dryfu w czasie, dzięki czemu można zachować spójną wydajność i jakość. |
Sformalizuj testy wydajności jako bramy jakości , które mogą zatwierdzać lub odrzucać podwyższenie poziomu wydania oraz ostateczne wdrożenie w środowisku produkcyjnym. | Te punkty kontrolne zapewniają, że każdy etap wdrażania spełnia wymagane standardy wydajności , zanim przejdziesz do następnego etapu. Punkty kontrolne pomagają zapobiegać niezamierzonej regresji wydajności. Jeśli na przykład wydajność jest znacznie niższa od oczekiwań, możesz zablokować wydanie do momentu wprowadzenia ulepszeń. |
Skonfiguruj powtarzalny proces monitorowania rzeczywistych transakcji w środowisku produkcyjnym i odchyleń względem celów wydajności. Używanie syntetycznych transakcji w środowisku produkcyjnym. Skonfiguruj alerty monitorowania dotyczące regresji wydajności. |
Chcesz uzyskać wgląd w rzeczywistą wydajność systemu pod rzeczywistym obciążeniem , którego nie można symulować za pomocą testów. Następnie można aktywnie identyfikować problemy i obszary poprawy, takie jak potencjalne wąskie gardła, niedostatecznie wykorzystywane zasoby i inne problemy. |
Przejrzyj wyniki testów wydajnościowych i dane monitorowania skrupulatnie i zoptymalizuj, dopóki nie zostaną spełnione cele wydajności. Określanie priorytetów akcji pochodzących z tych przeglądów i dodawanie ich do listy prac na potrzeby zaplanowanego wykonywania. |
Na podstawie wyników testu można przechwytywać i porównywać dane i rozpocząć analizowanie trendów. Działania związane z optymalizacją są oparte na danych. |
Twórz umiejętności kodowania, które koncentrują się na wydajności. Mają standardy kodowania, które są przykładem wzorców kodowania opartych na wydajności. |
Kod, który nie ma problemów z wydajnością, może zwiększyć wydajność cykli testowania , ponieważ testy mogą być skoncentrowane na bardziej znaczących problemach. Wzorce kodowania pomagają uniknąć przerobienia i zachować spójność stylu kodowania. |
Rozwiązanie problemu erozji wydajności w miarę zwiększania użycia, zmiany funkcji i gromadzenia danych w czasie w celu utrzymania wydajności. Zresetuj oczekiwania i ustanów nowe cele, jeśli dostrajanie przynosi tylko krótkoterminowe korzyści. |
Stan wydajności można zachować, zanim degradacja rozwija się w problemy, które negatywnie wpływają na środowisko użytkownika poza akceptowalny zakres. Zmiana celów resetuje model wydajności i nie tracisz czasu na optymalizowanie systemu, który osiągnął już jego pojemność. |
Zwiększanie wydajności dzięki optymalizacji
Zwiększ wydajność systemu w ramach zdefiniowanych celów wydajności, aby zwiększyć wartość obciążenia. |
---|
Cele określone w fazie początkowej są oparte na rozsądnym poziomie środowiska użytkownika, biorąc pod uwagę różne ograniczenia. Należy ponownie ocenić i dostosować cele, aby jeszcze bardziej ulepszyć środowisko. Aby dodatkowo ulepszyć środowisko, wymaga jasnego zrozumienia sposobu, w jaki system jest używany, jak ewoluował i jak platforma lub technologia uległa zmianie w czasie. Cykl monitorowania, optymalizowania, testowania i wdrażania jest procesem ciągłym.
Nakłady pracy związane z optymalizacją wydajności umożliwiają pracę obciążenia z mniejszym zużyciem zasobów. Mogą one spowodować, że obciążenie jest w stanie nadmiernej aprowizacji z wolnej pojemności. Ta pojemność umożliwia zwiększenie niezawodności systemu. Eliminowanie pojemności w celu zwiększenia kosztów systemu. Możesz też ponownie zawężyć pojemność do obsługi nowych funkcji produktów w istniejących zasobach.
Gdy system zyskuje wydajność, skorzystaj z okazji, aby ustawić i utrzymać nowe cele wydajności.
Podejście | Korzyść |
---|---|
Przydzielanie dedykowanych cykli do optymalizacji wydajności w celu spełnienia niefunkcyjnych wymagań i optymalizacji w obszarach funkcjonalnych. Cele tej optymalizacji to zasoby, kod, przechowywanie danych, zapytania bazy danych i inne. | Możesz utworzyć kulturę optymalizacji opartej na wydajności. Zespół jest odpowiedzialny za proaktywne monitorowanie wzorców wydajności, a także dostosowywanie aplikacji. |
Ulepsz architekturę przy użyciu nowych wzorców projektowych i składników, które mogą zwiększyć wydajność, w sposób, który wcześniej nie został uwzględniny z powodu ograniczonego czasu lub budżetu. | Nowy projekt i składniki mogą zoptymalizować system, co prowadzi do lepszego środowiska użytkownika. Można na przykład użyć buforowania lub dodania składnika sieci dostarczania zawartości. Może to również prowadzić do długoterminowych korzyści związanych z kosztami. |
Użyj narzędzi do monitorowania, aby analizować trendy historyczne i identyfikować przepływy i ścieżki implementacji kodu, które najbardziej skorzystałyby z nakładu pracy optymalizacji wydajności. W tym celu zalecamy narzędzia i profileery monitorowania wydajności aplikacji (APM). Identyfikowanie ścieżek gorących operacji i innych potencjalnych wąskich gardeł w systemie. |
Po zidentyfikowaniu powtarzających się problematycznych obszarów zespół może skupić się na tym, gdzie zyski są najwyższe. |
Bądź na bieżąco z innowacjami technologicznymi , które mogą poprawić wydajność. Korzystaj z nowych wersji wydanych dla zależnych struktur i bibliotek. Podobnie użyj nowych funkcji dla zasobów platformy podczas aktualizowania i stosowania poprawek. |
Przyjęcie nowej technologii często może być czynnikiem motywującym, aby szukać możliwości poprawy. Kod, który mógł być powolny w przeszłości, może stać się szybszy dzięki tym aktualizacjom. Warto również wiedzieć, jak niektóre aktualizacje negatywnie wpływają na wydajność. |