Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Antywzorce wydajności, podobnie jak wzorce projektowe, są typowymi wadliwymi procesami i implementacjami w organizacjach. Są to typowe rozwiązania, które mogą powodować problemy ze skalowalnością, gdy aplikacja jest pod presją. Świadomość tych praktyk może pomóc uprościć komunikację pojęć wysokiego poziomu wśród praktyków oprogramowania, a wiedza na temat antywzorzec może być przydatna podczas przeglądania kodu lub diagnozowania problemów z wydajnością.
Oto typowy scenariusz: aplikacja działa dobrze podczas testowania wydajnościowego. Jest on udostępniany w środowisku produkcyjnym i zaczyna obsługiwać rzeczywiste obciążenia. W tym momencie zaczyna działać źle — odrzuca żądania użytkowników, zawiesza się lub zgłasza wyjątki. Następnie zespół programistyczny ma do czynienia z dwoma pytaniami:
- Dlaczego to zachowanie nie zostało wyświetlone podczas testowania?
- Jak możemy to naprawić?
Odpowiedź na pierwsze pytanie jest prosta. Symulowanie rzeczywistych użytkowników w środowisku testowym wraz ze wzorcami zachowania i ilościami pracy, którą mogą wykonać, jest trudne. Jedynym całkowicie pewnym sposobem zrozumienia, jak system zachowuje się pod obciążeniem, jest obserwowanie go w środowisku produkcyjnym. Aby było jasne, nie sugerujemy, aby pominąć testowanie wydajnościowe. Testowanie wydajności ma kluczowe znaczenie dla uzyskiwania podstawowych metryk wydajności. Należy jednak przygotować się do obserwowania i poprawiania problemów z wydajnością w przypadku wystąpienia ich w systemie na żywo.
Odpowiedź na drugie pytanie, jak rozwiązać ten problem, jest mniej prosta. Każda liczba czynników może przyczynić się, a czasami problem tylko manifestuje się w pewnych okolicznościach. Instrumentacja i rejestrowanie są kluczem do znalezienia głównej przyczyny, ale musisz również wiedzieć, czego szukać.
W oparciu o nasze zaangażowanie z klientami platformy Microsoft Azure zidentyfikowaliśmy niektóre z najczęstszych problemów z wydajnością, które klienci widzą w środowisku produkcyjnym. Dla każdego antywzorca opisujemy, dlaczego zwykle występuje, jakie są jego objawy, oraz techniki rozwiązywania problemu. Udostępniamy również przykładowy kod ilustrujący zarówno antywzorzec, jak i sugerowane rozwiązanie skalowalności.
Niektóre z tych antywzorców mogą wydawać się oczywiste podczas czytania opisów, ale występują częściej niż można myśleć. Czasami aplikacja dziedziczy projekt, który działał lokalnie, ale nie jest skalowany w chmurze. Lub aplikacja może zaczynać się od bardzo czystego projektu, ale w miarę dodawania nowych funkcji co najmniej jeden z tych antywzorców wkradnie się. Niezależnie od tego, ten przewodnik pomoże Ci zidentyfikować i naprawić te antywzorce.
Wykaz antywzorzeców
Oto lista antywzorców, które zidentyfikowaliśmy:
| Antywzorzec | Opis |
|---|---|
| Zajęta baza danych | Odciążanie zbyt dużej ilości przetwarzania do repozytorium danych. |
| zajęty frontend | Przenoszenie zadań intensywnie korzystających z zasobów na wątki w tle. |
| Gadatliwe I/O | Stale wysyła wiele małych żądań sieciowych. |
| Nadmiarowe pobieranie | Pobieranie większej ilości danych niż jest potrzebne, co powoduje niepotrzebne we/wy. |
| Niewłaściwa instancjacja | Wielokrotne tworzenie i niszczenie obiektów, które mają być współużytkowane i używane ponownie. |
| Trwałość monolityczna | Używanie tego samego magazynu danych dla danych z bardzo różnymi wzorcami użycia. |
| brak cache'owania | Nie udaje się buforować danych. |
| hałaśliwy sąsiad | Jeden najemca korzysta z nieproporcjonalnej ilości zasobów. |
| Burza ponownych prób | Ponawianie nieudanych żądań do serwera zbyt często. |
| Synchroniczne I/O | Blokowanie wątku wywołującego po zakończeniu operacji we/wy. |
Następne kroki
Więcej informacji o dostrajaniu wydajności można znaleźć w sekcji Skuteczność wydajności w ramach Well Architected Framework