Samouczek: uruchamianie testu obciążeniowego w celu zidentyfikowania wąskich gardeł wydajności w aplikacji internetowej
Z tego samouczka dowiesz się, jak identyfikować wąskie gardła wydajności w aplikacji internetowej przy użyciu testowania obciążenia platformy Azure. Utworzysz test obciążeniowy dla przykładowej aplikacji Node.js.
Przykładowa aplikacja składa się z internetowego interfejsu API Node.js, który współdziała z bazą danych NoSQL. Wdrożysz internetowy interfejs API w celu aplikacja systemu Azure Service web apps i użyjesz usługi Azure Cosmos DB jako bazy danych.
Dowiedz się więcej o kluczowych pojęciach dotyczących testowania obciążenia platformy Azure.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Wdróż przykładową aplikację.
- Tworzenie i uruchamianie testu obciążeniowego.
- Identyfikowanie wąskich gardeł wydajności w aplikacji.
- Usuń wąskie gardło.
- Uruchom ponownie test obciążeniowy, aby sprawdzić ulepszenia wydajności.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Interfejs wiersza polecenia platformy Azure w wersji 2.2.0 lub nowszej. Uruchom polecenie
az --version
, aby znaleźć wersję zainstalowaną na komputerze. Jeśli musisz zainstalować lub uaktualnić interfejs wiersza polecenia platformy Azure, zobacz Jak zainstalować interfejs wiersza polecenia platformy Azure. - Visual Studio Code. Jeśli go nie masz, pobierz go i zainstaluj.
- Git. Jeśli go nie masz, pobierz go i zainstaluj.
Wdrażanie przykładowej aplikacji
Aby można było przetestować przykładową aplikację, musisz ją wdrożyć i uruchomić. Użyj poleceń interfejsu wiersza polecenia platformy Azure, poleceń Git i poleceń programu PowerShell, aby to zrobić.
Otwórz program Windows PowerShell, zaloguj się do platformy Azure i ustaw subskrypcję:
az login az account set --subscription <your-Azure-Subscription-ID>
Sklonuj repozytorium źródłowe przykładowej aplikacji:
git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
Przykładowa aplikacja to aplikacja Node.js składająca się ze składnika internetowego usługi aplikacja systemu Azure i bazy danych usługi Azure Cosmos DB. Repozytorium zawiera skrypt programu PowerShell, który wdraża przykładową aplikację w ramach subskrypcji platformy Azure. Zawiera on również skrypt Apache JMeter, który będzie używany w kolejnych krokach.
Przejdź do katalogu aplikacji Node.js i wdróż przykładową aplikację przy użyciu tego skryptu programu PowerShell:
cd nodejs-appsvc-cosmosdb-bottleneck .\deploymentscript.ps1
Po wyświetleniu monitu podaj następujące informacje:
- Identyfikator subskrypcji platformy Azure.
- Unikatowa nazwa aplikacji internetowej.
- Lokalizacja. Domyślnie lokalizacja to
eastus
. Kody regionów można pobrać, uruchamiając polecenie Get-AzLocation .
Ważne
W przypadku nazwy aplikacji internetowej użyj tylko małych liter i cyfr. Nie używaj spacji ani znaków specjalnych.
Po zakończeniu wdrażania przejdź do uruchomionej przykładowej aplikacji, otwierając w
https://<yourappname>.azurewebsites.net
oknie przeglądarki.
Teraz, gdy aplikacja została wdrożona i uruchomiona, możesz uruchomić swój pierwszy test obciążeniowy.
Konfigurowanie i tworzenie testu obciążeniowego
W tej sekcji utworzysz test obciążeniowy przy użyciu przykładowego skryptu testowego apache JMeter.
Repozytorium źródłowe przykładowej aplikacji zawiera skrypt Apache JMeter o nazwie SampleApp.jmx. Ten skrypt wykonuje trzy wywołania interfejsu API do aplikacji internetowej w każdej iteracji testowej:
add
: Wykonuje operację wstawiania danych w usłudze Azure Cosmos DB dla liczby odwiedzających aplikację internetową.get
: Wykonuje operację GET z usługi Azure Cosmos DB w celu pobrania liczby.lasttimestamp
: Aktualizacje sygnaturę czasową od momentu, gdy ostatni użytkownik udał się do witryny internetowej.
Uwaga
Przykładowy skrypt Apache JMeter wymaga dwóch wtyczek: Custom Thread Groups
i Throughput Shaping Timer
. Aby otworzyć skrypt w lokalnym wystąpieniu narzędzia Apache JMeter, należy zainstalować obie wtyczki. Aby to zrobić, możesz użyć Menedżera wtyczek Apache JMeter.
Tworzenie zasobu testowania obciążenia platformy Azure
Zasób testowania obciążenia platformy Azure to zasób najwyższego poziomu dla działań związanych z testowaniem obciążenia. Ten zasób udostępnia scentralizowane miejsce do wyświetlania testów obciążeniowych, wyników testów i powiązanych artefaktów oraz zarządzania nimi.
Jeśli masz już zasób testowania obciążenia, pomiń tę sekcję i przejdź do sekcji Tworzenie testu obciążeniowego.
Jeśli nie masz jeszcze zasobu testowania obciążenia platformy Azure, utwórz go teraz:
Zaloguj się do witryny Azure Portal przy użyciu poświadczeń subskrypcji platformy Azure.
W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Utwórz zasób.
Na stronie Marketplace wyszukaj i wybierz pozycję Testowanie obciążenia platformy Azure.
W okienku Testowanie obciążenia platformy Azure wybierz pozycję Utwórz.
Na stronie Tworzenie zasobu testowania obciążenia wprowadź następujące informacje:
Pole opis Subskrypcja Wybierz subskrypcję platformy Azure, której chcesz użyć dla tego zasobu usługi Azure Load Testing. Grupa zasobów: Wybierz istniejącą grupę zasobów. Możesz też wybrać pozycję Utwórz nową, a następnie wprowadzić unikatową nazwę nowej grupy zasobów. Nazwa/nazwisko Wprowadź unikatową nazwę, aby zidentyfikować zasób testowania obciążenia platformy Azure.
Nazwa nie może zawierać znaków specjalnych, takich jak \/"[]:|<>+=;,?*@&lub biały znak. Nazwa nie może zaczynać się od podkreślenia (_) i nie może kończyć się kropką (.) ani kreską (-). Długość musi wynosić od 1 do 64 znaków.Lokalizacja Wybierz lokalizację geograficzną do hostowania zasobu testowania obciążenia platformy Azure.
Ta lokalizacja określa również, skąd są hostowane aparaty testowe i skąd pochodzą żądania klienta JMeter.Uwaga
Opcjonalnie możesz skonfigurować więcej szczegółów na karcie Tagi . Tagi to pary nazw/wartości, które umożliwiają kategoryzowanie zasobów i wyświetlanie skonsolidowanego rozliczeń przez zastosowanie tego samego tagu do wielu zasobów i grup zasobów.
Po zakończeniu konfigurowania zasobu wybierz pozycję Przejrzyj i utwórz.
Przejrzyj podane ustawienia, a następnie wybierz pozycję Utwórz. Utworzenie konta trwa kilka minut. Przed przejściem poczekaj na wyświetlenie strony portalu, aby wyświetlić Wdrożenie zostało ukończone .
Aby wyświetlić nowy zasób, wybierz pozycję Przejdź do zasobu.
Opcjonalnie możesz zarządzać dostępem do zasobu testowania obciążenia platformy Azure.
Testowanie obciążenia platformy Azure używa kontroli dostępu opartej na rolach (RBAC) do zarządzania uprawnieniami dla zasobu. Jeśli wystąpi ten komunikat, twoje konto nie ma niezbędnych uprawnień do zarządzania testami.
Tworzenie testu obciążeniowego
Następnie utworzysz test obciążeniowy w zasobie testowania obciążenia dla przykładowej aplikacji. Test obciążeniowy można utworzyć przy użyciu istniejącego skryptu JMeter w przykładowym repozytorium aplikacji.
Przejdź do zasobu testowania obciążenia i wybierz pozycję Utwórz na stronie Przegląd .
Na karcie Podstawy wprowadź informacje o nazwie testu i opisie testu. Opcjonalnie możesz zaznaczyć pole wyboru Uruchom test po utworzeniu, aby automatycznie uruchomić test obciążeniowy po jego utworzeniu.
Na karcie Plan testu wybierz metodę testową skryptu JMeter, a następnie wybierz skrypt testowy SampleApp.jmx z sklonowanego przykładowego katalogu aplikacji. Następnie wybierz pozycję Przekaż , aby przekazać plik na platformę Azure i skonfigurować test obciążeniowy.
Opcjonalnie możesz wybrać i przekazać dodatkowe pliki konfiguracji narzędzia Apache JMeter lub inne pliki, do których odwołuje się plik JMX. Jeśli na przykład skrypt testowy używa zestawów danych CSV, możesz przekazać odpowiednie pliki CSV .
Na karcie Parametry dodaj nową zmienną środowiskową. Wprowadź wartość webapp w polu Nazwa i
<yourappname>.azurewebsites.net
wartość. Zastąp tekst<yourappname>
zastępczy nazwą nowo wdrożonej przykładowej aplikacji. Nie dołączaj prefiksuhttps://
.Skrypt testowy Apache JMeter używa zmiennej środowiskowej do pobrania adresu URL aplikacji internetowej. Następnie skrypt wywołuje trzy interfejsy API w aplikacji internetowej.
Na karcie Ładowanie skonfiguruj następujące szczegóły. Możesz pozostawić wartość domyślną dla tego samouczka.
Ustawienie Wartość Opis Wystąpienia aparatu 1 Liczba równoległych aparatów testowych z uruchomionym skryptem Apache JMeter. Na karcie Monitorowanie określ składniki aplikacji, które mają być monitorowane za pomocą metryk zasobów. Wybierz pozycję Dodaj/zmodyfikuj , aby zarządzać listą składników aplikacji.
Wybierz pozycję Przejrzyj i utwórz, przejrzyj wszystkie ustawienia, a następnie wybierz pozycję Utwórz.
Uwaga
Konfigurację testu można zaktualizować w dowolnym momencie, na przykład w celu przekazania innego pliku JMX. Wybierz test na liście testów, a następnie wybierz pozycję Edytuj.
Uruchamianie testu obciążeniowego w witrynie Azure Portal
W tej sekcji użyjesz witryny Azure Portal, aby ręcznie uruchomić utworzony wcześniej test obciążeniowy. Jeśli pole wyboru Uruchom test po utworzeniu zostało zaznaczone, test będzie już uruchomiony.
Wybierz pozycję Testy , aby wyświetlić listę testów, a następnie wybierz utworzony test.
Napiwek
Możesz użyć pola wyszukiwania i filtru Zakres czasu, aby ograniczyć liczbę testów.
Na stronie szczegółów testu wybierz pozycję Uruchom lub Uruchom test. Następnie wybierz pozycję Uruchom w okienku Potwierdzenia testu przebiegu, aby rozpocząć test obciążeniowy.
Testowanie obciążenia platformy Azure rozpoczyna monitorowanie i wyświetlanie metryk serwera aplikacji na pulpicie nawigacyjnym.
Metryki po stronie klienta przesyłania strumieniowego są widoczne podczas uruchamiania testu. Domyślnie wyniki są odświeżane automatycznie co pięć sekund.
Możesz zastosować wiele filtrów lub zagregować wyniki do różnych percentyli, aby dostosować wykresy.
Napiwek
Test obciążeniowy można zatrzymać w dowolnym momencie w witrynie Azure Portal, wybierając pozycję Zatrzymaj.
Przed przejściem do następnej sekcji poczekaj, aż test obciążeniowy zakończy się w pełni.
Identyfikowanie wąskich gardeł wydajności
W tej sekcji przeanalizujesz wyniki testu obciążeniowego, aby zidentyfikować wąskie gardła wydajności w aplikacji. Sprawdź zarówno metryki po stronie klienta, jak i po stronie serwera, aby określić główną przyczynę problemu.
Najpierw przyjrzyj się metryce po stronie klienta. Zauważysz, że 90. percentyl dla metryki Czas odpowiedzi dla żądań interfejsu
get
add
API jest wyższy niż dla interfejsulasttimestamp
API.Możesz zobaczyć podobny wzorzec błędów, w którym
lasttimestamp
interfejs API ma mniej błędów niż inne interfejsy API.Wyniki interfejsów
add
API iget
są podobne, natomiastlasttimestamp
interfejs API działa inaczej. Przyczyną może być powiązana baza danych, ponieważ zarówno interfejsyadd
API, jak iget
obejmują dostęp do bazy danych.Aby dokładniej zbadać to wąskie gardło, przewiń w dół do sekcji Pulpit nawigacyjny metryk po stronie serwera.
Metryki po stronie serwera zawierają szczegółowe informacje o składnikach aplikacji platformy Azure: plan usługi aplikacja systemu Azure, aplikacja internetowa usługi aplikacja systemu Azure Service i usługa Azure Cosmos DB.
W metrykach planu usługi aplikacja systemu Azure widać, że metryki Procent użycia procesora CPU i Procent pamięci znajdują się w akceptowalnym zakresie.
Teraz przyjrzyj się metryce po stronie serwera usługi Azure Cosmos DB.
Zwróć uwagę, że metryka Znormalizowane użycie jednostek RU pokazuje, że baza danych szybko działa przy 100% wykorzystaniu zasobów. Wysokie użycie zasobów mogło spowodować błędy ograniczania przepustowości bazy danych. Może również mieć zwiększony czas odpowiedzi dla
add
internetowych interfejsów API iget
.Widać również, że metryka Aprowizowana przepływność dla wystąpienia usługi Azure Cosmos DB ma maksymalną przepływność wynoszącą 400 jednostek RU. Zwiększenie aprowizowanej przepływności bazy danych może rozwiązać problem z wydajnością.
Zwiększanie przepływności bazy danych
W tej sekcji przydzielisz więcej zasobów do bazy danych, aby rozwiązać wąskie gardło wydajności.
W przypadku usługi Azure Cosmos DB zwiększ ustawienie skalowania jednostek RU bazy danych:
Przejdź do zasobu usługi Azure Cosmos DB, który został aprowizowany w ramach przykładowego wdrożenia aplikacji.
Wybierz kartę Eksplorator danych.
Wybierz pozycję Skaluj &Ustawienia i zaktualizuj wartość przepływności do 1200.
Wybierz pozycję Zapisz , aby potwierdzić zmiany.
Weryfikowanie ulepszeń wydajności
Po zwiększeniu przepływności bazy danych ponownie uruchom test obciążeniowy i sprawdź, czy wyniki wydajności uległy poprawie:
Na pulpicie nawigacyjnym przebiegu testu wybierz pozycję Uruchom ponownie, a następnie wybierz pozycję Uruchom ponownie w okienku Ponowne uruchamianie testu.
Zostanie wyświetlony nowy wpis przebiegu testu z kolumną stanu, która będzie przechodzić przez stany Aprowizacja, Wykonywanie i Gotowe . W dowolnym momencie wybierz przebieg testu, aby monitorować postęp testu obciążeniowego.
Po zakończeniu testu obciążeniowego sprawdź wyniki czasu odpowiedzi i wyniki błędów metryk po stronie klienta.
Sprawdź metryki po stronie serwera dla usługi Azure Cosmos DB i upewnij się, że wydajność uległa poprawie.
Wartość znormalizowanych jednostek RU w usłudze Azure Cosmos DB jest teraz o 100% niższa niż 100%.
Po zmianie ustawień skalowania bazy danych zobaczysz, że:
- Czas odpowiedzi dla
add
interfejsów API iget
został ulepszony. - Znormalizowane użycie jednostek RU pozostaje nadal w granicach limitu.
W rezultacie ogólna wydajność aplikacji uległa poprawie.
Czyszczenie zasobów
Ważne
Możesz ponownie użyć zasobu usługi Azure Load Testing utworzonego na potrzeby innych samouczków dotyczących testowania obciążenia platformy Azure i artykułów z instrukcjami.
Jeśli nie planujesz korzystać z żadnych utworzonych zasobów, usuń je, aby nie ponosić żadnych dodatkowych opłat. Jeśli przykładowa aplikacja została wdrożona w innej grupie zasobów, warto powtórzyć poniższe kroki.
Aby usunąć zasoby przy użyciu witryny Azure Portal:
Wybierz przycisk menu w lewym górnym rogu, a następnie wybierz pozycję Grupy zasobów.
Z listy wybierz utworzoną grupę zasobów.
Wybierz pozycję Usuń grupę zasobów.
Wpisz nazwę grupy zasobów. Następnie wybierz Usuń.
Aby usunąć zasoby przy użyciu interfejsu wiersza polecenia platformy Azure, wprowadź następujące polecenie:
az group delete --name <yourresourcegroup>
Należy pamiętać, że usunięcie grupy zasobów spowoduje usunięcie wszystkich zawartych w niej zasobów.
Następne kroki
Przejdź do następnego samouczka, aby dowiedzieć się, jak skonfigurować zautomatyzowany przepływ pracy testowania regresji przy użyciu usługi Azure Pipelines lub Funkcji GitHub Actions.