Co to jest testowanie skalowalności? Ucz się na przykładzie
⚡ Inteligentne podsumowanie
Testowanie skalowalności mierzy zachowanie aplikacji w sytuacji, gdy obciążenie użytkownika, wolumen danych lub szybkość transakcji wzrasta lub spada. Pozwala to określić dokładny punkt, w którym wydajność przestaje się skalować, a także zidentyfikować odpowiedzialne za to wąskie gardło.
Czym jest testowanie skalowalności?
Testowanie skalowalności To niefunkcjonalna metoda testowania, która mierzy wydajność systemu lub sieci, gdy liczba żądań użytkowników jest skalowana w górę lub w dół. Celem testowania skalowalności jest upewnienie się, że system jest w stanie obsłużyć prognozowany wzrost ruchu użytkowników, wolumenu danych i częstotliwości transakcji. Testuje ona zdolność systemu do sprostania rosnącemu zapotrzebowaniu.
Testowanie skalowalności jest podtypem test wydajności, więc koncentruje się na zachowaniu aplikacji, gdy jest ona wdrażana w większym systemie lub testowana pod nadmiernym obciążeniem. Inżynieria oprogramowaniaTestowanie skalowalności mierzy moment, w którym aplikacja przestaje się skalować i identyfikuje przyczynę tego stanu.
Dlaczego warto przeprowadzać testy skalowalności?
Problemy z przepustowością rzadko pojawiają się podczas testów funkcjonalnych. Wychodzą na jaw w najbardziej pracowity dzień handlowy w roku, gdy rozpoczyna się kampania marketingowa lub gdy zbiór danych, który rozrastał się bezszelestnie przez dwa lata, w końcu spowalnia każde zapytanie. Testowanie skalowalności najpierw ujawnia te ograniczenia w kontrolowanym środowisku. W szczególności pomaga:
- Określ, w jaki sposób aplikacja skaluje się wraz ze wzrostem obciążenia i w którym miejscu krzywa się spłaszcza.
- Określ limit jednoczesnych użytkowników aplikacji internetowej, zanim czasy reakcji staną się nie do przyjęcia.
- Określ degradację po stronie klienta i komfort użytkowania przez użytkownika końcowego pod obciążeniem, np. przy powolnym renderowaniu ekranu.
- Określ odporność i degradację po stronie serwera, w tym nasycenie procesora, wycieki pamięci i wyczerpanie puli połączeń.
Najłatwiej przedstawić tę zależność w postaci krzywej: przepustowość rośnie wraz ze wzrostem obciążenia, aż do momentu nasycenia zasobu, po czym dodatkowi użytkownicy jedynie wydłużają kolejkę.
Rodzaje testów skalowalności
Skalowalność nie jest pojedynczą cechą, dlatego plan testów zazwyczaj obejmuje więcej niż jeden wymiar. Cztery poniższe typy to te, które mierzy większość zespołów, a pierwsze dwa decydują o kształcie samego środowiska testowego.
| Typ | Co jest skalowane | Co test udowadnia |
|---|---|---|
| Skalowalność pionowa (powiększać w skali rysunek) | Dodanie procesora, pamięci lub pamięci masowej do pojedynczego serwera | Ile dodatkowego obciążenia pochłania jedna ulepszona maszyna i gdzie znajduje się sufit jednowęzłowy |
| Skalowalność pozioma (skalowanie) | Dodatkowe serwery, kontenery lub węzły za modułem równoważenia obciążenia | Czy przepustowość wzrasta mniej więcej proporcjonalnie do dodanych węzłów, czy też ograniczają ją współdzielone zasoby |
| Skalowalność funkcjonalna | Nowe funkcje, moduły lub usługi | Czy dodaną funkcjonalność można wchłonąć bez pogarszania jakości istniejących transakcji |
| Skalowalność administracyjna | Użytkownicy, najemcy, zespoły lub środowiska do zarządzania | Czy wdrażanie, uprawnienia i monitorowanie pozostają funkcjonalne w miarę rozwoju organizacji |
Skalowanie pionowe jest prostsze, ponieważ architektura rzadko się zmienia, ale pojedyncza maszyna zawsze ma pewien pułap. Skalowanie poziome usuwa ten pułap i poprawia odporność na błędy, kosztem opóźnień w sieci, spójności danych i narzutu na koordynację – a wszystko to test musi mierzyć, a nie zakładać.
Co testować w testach skalowalności
Skalowalność ocenia się na podstawie pomiarów, a nie wrażeń. Rejestruj poniższe atrybuty na każdym etapie obciążenia, aby widoczny był trend, a nie tylko ostateczna wartość.
| Atrybut | Co ci to mówi |
|---|---|
| Czas odpowiedzi | Czas między żądaniem użytkownika a odpowiedzią systemu; powinien pozostać stały w miarę wzrostu współbieżności |
| Przejście ekranu | Jak szybko jedna strona lub widok ustępuje miejsca następnej pod obciążeniem |
| Wydajność | Objętość przetwarzanych żądań w jednostce czasu; plateau oznacza granicę skalowalności |
| Pomiary czasu | Czas sesji, czas ponownego uruchomienia, czas drukowania, czas transakcji i czas wykonania zadania |
| Wydajność w stosunku do liczby użytkowników | Jak zmienia się każda metryka w miarę dodawania kolejnych użytkowników |
| Zapytaj o stawki | Żądania na sekundę, transakcje na sekundę i trafienia na sekundę |
| Wykorzystanie sieci | Zużyta przepustowość i opóźnienie pakietów między warstwami |
| Wykorzystanie procesora i pamięci | Koszt zasobów na transakcję; stale rosnąca liczba często sygnalizuje wyciek |
| Liczniki serwera WWW | Liczba żądań i odpowiedzi na sekundę, głębokość kolejki i odrzucone połączenia |
| Wydajność pod obciążeniem | Połączone zachowanie po odczytaniu wszystkich metryk razem w momencie szczytowym |
Strategia testowania skalowalności
Strategia testowania skalowalności różni się w zależności od typu testowanej aplikacji. Jeśli aplikacja uzyskuje dostęp do baza danychParametry testowania będą obejmować rozmiar bazy danych w odniesieniu do liczby użytkowników, itd.
Wymagania wstępne dotyczące testowania skalowalności
- Możliwość dystrybucji obciążenia — Sprawdź, czy narzędzie do testów obciążeniowych umożliwia generowanie obciążenia z wielu maszyn i sterowanie nim z centralnego punktu.
- Operasystemu — Sprawdź co system operacyjny agenci generujący obciążenie i główny test obciążeniowy działają w ramach.
- Procesor — Sprawdź, jaki typ procesora jest wymagany dla wirtualnego agenta użytkownika i głównego narzędzia do testów obciążeniowych.
- Pamięć — Sprawdź, ile pamięci będzie wystarczające dla wirtualnego agenta użytkownika i głównego testu obciążeniowego.
- Środowisko testowe — Sprawdź, czy Środowisko testowe odzwierciedla produkcję na tyle dokładnie, że możliwe jest przeniesienie wyników.
Jak przeprowadzić testy skalowalności
- Zdefiniuj powtarzalny proces wykonywania testów skalowalności w całym cyklu życia aplikacji
- Określ kryteria skalowalności
- Lista narzędzi programowych wymaganych do przeprowadzenia testu obciążenia
- Ustaw środowisko testowe i skonfiguruj sprzęt wymagany do wykonania testów skalowalności
- Zaplanuj scenariusze testowe oraz testy skalowalności
- Utwórz i zweryfikuj skrypt użytkownika wirtualnego
- Utwórz i zweryfikuj scenariusze testów obciążeniowych
- Wykonaj testy
- Oceń wyniki
- Wygeneruj wymagane raporty
Plan testów skalowalności
Zanim faktycznie utworzysz testy, opracuj szczegółowy plan testów. To ważny krok, aby upewnić się, że test jest zgodny z wymaganiami aplikacji.
Poniżej przedstawiono atrybuty służące do tworzenia dobrze zdefiniowanego Plan testów do testowania skalowalności.
- Kroki dla skryptów:Skrypt testowy powinien zawierać szczegółowe kroki określające dokładne działania, jakie wykonałby użytkownik.
- Dane czasu wykonania:Plan testów powinien określać wszelkie dane czasu wykonania niezbędne do interakcji z aplikacją.
- Testy oparte na danych:Jeśli skrypty wymagają zmiennych danych w czasie wykonywania, należy zrozumieć wszystkie pola wymagające tych danych.
Przykład testowania skalowalności
Rozważmy sklep internetowy, który spodziewa się 2,000 jednoczesnych klientów podczas wyprzedaży sezonowej. Zespół najpierw ustala kryterium zaliczenia: transakcja musi zostać zrealizowana w czasie krótszym niż trzy sekundy dla 95% użytkowników, przy wskaźniku błędów poniżej jednego procenta.
Następnie test uruchamia ten sam skrypt „przeglądaj-wyszukaj-koszyk-zapłać” dla 250, 500, 1,000, 1,500 i 2,000 wirtualnych użytkowników. Czas reakcji utrzymuje się na poziomie prawie dwóch sekund przy 1,000 użytkownikach, spada do 2.8 sekundy przy 1,500 i osiąga dziewięć sekund przy 2,000, podczas gdy obciążenie procesora bazy danych wynosi 98%. Limit skalowalności wynosi zatem około 1,500 użytkowników, a wąskim gardłem jest warstwa bazy danych — a nie serwery aplikacji, które zespół planował dodać.
Narzędzia do testowania skalowalności
Testowanie skalowalności wymaga narzędzia, które może generować obciążenie z kilku maszyn jednocześnie i centralnie raportować wyniki. Wybór zazwyczaj zależy od głównego języka zespołu i testowanych protokołów.
| Narzędzie | Scripting | Najlepiej nadaje się do |
|---|---|---|
| Apache JMeter | Plany testów GUI i XML, Java na podstawie | Szeroki zakres protokołów obejmujący JDBC, JMS, LDAP i SOAP |
| Grafana k6 | JavaSkrypt lub TypeScript | Testy API i mikrousług zintegrowane z procesem CI/CD |
| Gatling | Java, Kotlin lub Scala DSL | Duża liczba wirtualnych użytkowników na wtryskiwacz ze szczegółowymi raportami HTML |
| Szarańcza | Równina Python | Python zespoły, które muszą rozszerzyć klienta poza protokół HTTP |
| LoadRunner | Skrypty w stylu C nagrane w VuGen | Duże przedsiębiorstwa z aplikacjami starszymi i pakietowymi |
Runnery hostowane w chmurze, takie jak BlazeMeterLoadView i Gatling Enterprise bazują na kilku z tych silników i warto je rozważyć, gdy test wymaga dziesiątek tysięcy wirtualnych użytkowników lub ruchu z wielu regionów geograficznych. Szerszy przegląd tej kategorii jest dostępny w przewodniku. narzędzia do testowania wydajności.
Wyzwania i najlepsze praktyki w testowaniu skalowalności
Najbardziej rozczarowujące wyniki skalowalności tracWracamy do konfiguracji testowej, a nie do aplikacji. Oto problemy, które się powtarzają, i nawyki, które im zapobiegają.
Wspólne wyzwania
- Środowiska o zbyt małej powierzchni — Stanowisko testowe dysponujące połową pamięci produkcyjnej zgłasza wąskie gardło, które nie występuje w produkcji.
- Nierealistyczne modele obciążenia pracą — Skrypty bez czasu namysłu lub zmienności danych trafiają do pamięci podręcznej, której prawdziwi użytkownicy by nie zauważyli.
- Wyniki zaszumione — Automatyczne skalowanie, zbieranie śmieci i współdzielony sprzęt w chmurze sprawiają, że dwa identyczne przebiegi nie dają oczekiwanych rezultatów.
- Cienka obserwacja — Bez metryk po stronie serwera powolny wynik pokazuje, że coś się zepsuło, ale nie mówi co.
- Koszty: — Generowanie bardzo wysokiej współbieżności wymaga własnej floty generatorów obciążenia, na co łatwo nie przeznaczyć wystarczający budżet.
Najlepsze praktyki
- Przed pierwszym przebiegiem należy uzgodnić kryteria zaliczenia, takie jak procent czasu reakcji i górny limit błędu.
- Zwiększaj obciążenie stopniowo i utrzymuj je na stałym poziomie przez wystarczająco długi czas, aby układ się ustabilizował.
- Różnicuj dane testowe dla każdego użytkownika wirtualnego, aby buforowanie nie zawyżało wyników.
- Zbieraj dane dotyczące aplikacji, baz danych i infrastruktury, a także liczby po stronie klienta.
- Przechowuj skrypty testowe w systemie kontroli wersji i przeprowadzaj krótką kontrolę skalowalności przy każdej kompilacji, a następnie pełne sprawdzenie przed wydaniem.
- Porównuj trendy dotyczące różnych wersji, zamiast oceniać pojedynczy raport w oderwaniu od reszty.
Testowanie skalowalności a testowanie obciążenia
Te dwa pojęcia są często mylone, ponieważ oba wiążą się z obciążeniem. Różnica tkwi w pytaniu, na które każdy z nich odpowiada: testowanie skalowalności pyta, jak daleko system może się rozrosnąć, podczas gdy testowanie obciążenia pyta czy radzi sobie z przewidywanym obciążeniem.
| Podstawa | Testowanie skalowalności | Testowanie obciążenia |
|---|---|---|
| Skupiać | Koncentruje się na wydajności Twoich stron internetowych, oprogramowania, sprzętu i aplikacji, gdy wprowadzane są zmiany w rozmiarze lub objętości systemu, aby sprostać rosnącym potrzebom. | Testowanie obciążeniowe koncentruje się na testowaniu aplikacji pod dużym obciążeniem w celu określenia momentu, w którym czas reakcji systemu ulega załamaniu. |
| Wzór obciążenia | Obciążenie jest podnoszone etapami, a zasoby można dodawać pomiędzy etapami | Obciążenie jest utrzymywane na oczekiwanym poziomie szczytowym przez ustalony czas |
| Pytanie odpowiedziało | Jak daleko może rozrosnąć się ten system i co go ogranicza? | Czy system ten obecnie spełnia przyjęte cele? |
| Typowy wynik | Limit skalowalności, wąskie gardło i plan pojemności | Ocena zaliczenia lub niezaliczenia w odniesieniu do celów czasu reakcji i przepustowości |
Obaj siedzą pod testy niefunkcjonalne parasol obok stress testing, testowanie kolców, testy wytrzymałościowe oraz badanie objętości, a dojrzała strategia wydajnościowa zwykle obejmuje uruchamianie kilku z nich w oparciu o te same skrypty.

