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. Zasymulujesz obciążenie przykładowej aplikacji internetowej Node.js, a następnie użyj pulpitu nawigacyjnego testu obciążeniowego do analizowania metryk po stronie klienta i po stronie serwera.
Przykładowa aplikacja składa się z internetowego interfejsu API Node.js, który współdziała z bazą danych NoSQL. Internetowy interfejs API jest wdrażany w aplikacjach internetowych usługi aplikacja systemu Azure Service i używasz usługi Azure Cosmos DB jako bazy danych.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Wdróż przykładową aplikację.
- Tworzenie i uruchamianie testu obciążeniowego.
- Dodaj składniki aplikacji platformy Azure do testu obciążeniowego.
- Identyfikowanie wąskich gardeł wydajności przy użyciu pulpitu nawigacyjnego testu obciążenia.
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 zainstalowany na komputerze lokalnym.
- 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.
Sprawdzanie wymagań wstępnych
Przed rozpoczęciem sprawdź poprawność środowiska:
Zaloguj się do witryny Azure Portal i sprawdź, czy twoja subskrypcja jest aktywna.
Sprawdź wersję interfejsu wiersza polecenia platformy Azure w terminalu lub oknie polecenia, uruchamiając polecenie
az --version
. Aby uzyskać najnowszą wersję, zobacz najnowsze informacje o wersji.Jeśli nie masz najnowszej wersji, zaktualizuj instalację, postępując zgodnie z przewodnikiem instalacji systemu operacyjnego lub platformy.
Wdrażanie aplikacji przykładowej
W tym samouczku generujesz obciążenie dla przykładowej aplikacji internetowej wdrożonej w usłudze aplikacja systemu Azure Service. Użyj poleceń interfejsu wiersza polecenia platformy Azure, poleceń Usługi Git i poleceń programu PowerShell, aby wdrożyć przykładową aplikację w ramach subskrypcji platformy Azure.
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, po wdrożeniu i uruchomieniu przykładowej aplikacji, możesz utworzyć zasób testowania obciążenia platformy Azure i test obciążeniowy.
Tworzenie testu obciążeniowego
W tym samouczku tworzysz test obciążeniowy przy użyciu interfejsu wiersza polecenia platformy Azure, przekazując skrypt testowy JMeter (jmx
plik). Przykładowe repozytorium aplikacji zawiera już plik konfiguracji testu obciążeniowego i skrypt testu JMeter.
Aby utworzyć test obciążeniowy przy użyciu witryny Azure Portal, wykonaj kroki opisane w przewodniku Szybki start: tworzenie testu obciążeniowego za pomocą skryptu JMeter.
Wykonaj następujące kroki, aby utworzyć zasób testowania obciążenia platformy Azure i test obciążeniowy przy użyciu interfejsu wiersza polecenia platformy Azure:
Otwórz okno terminalu i wprowadź następujące polecenie, aby zalogować się do subskrypcji platformy Azure.
az login
Przejdź do przykładowego katalogu aplikacji.
cd nodejs-appsvc-cosmosdb-bottleneck
Utwórz grupę zasobów dla zasobu testowania obciążenia platformy Azure.
Opcjonalnie możesz również użyć ponownie grupy zasobów wdrożonej wcześniej przykładowej aplikacji.
<load-testing-resource-group-name>
Zastąp symbol zastępczy tekst nazwą grupy zasobów.resourceGroup="<load-testing-resource-group-name>" location="East US" az group create --name $resourceGroup --location $location
Utwórz zasób testowania obciążenia platformy Azure za
az load create
pomocą polecenia .<load-testing-resource-name>
Zastąp symbol zastępczy tekst nazwą zasobu testowania obciążenia.# This script requires the following Azure CLI extensions: # - load loadTestResource="<load-testing-resource-name>" az load create --name $loadTestResource --resource-group $resourceGroup --location $location
Utwórz test obciążeniowy do symulowania obciążenia dla przykładowej aplikacji za
az load test create
pomocą polecenia .<web-app-hostname>
Zastąp symbol zastępczy tekst nazwą hosta usługi App Service przykładowej aplikacji. Ta wartość ma postaćmyapp.azurewebsites.net
. Nie dołączajhttps://
części adresu URL.testId="sample-app-test" webappHostname="<web-app-hostname>" az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
To polecenie używa pliku konfiguracji testu obciążeniowego
Sampleapp.yaml
, który odwołuje się do skryptuSampleApp.jmx
testowego JMeter. Użyj parametru wiersza polecenia, aby przekazać przykładową nazwę hosta aplikacji do testu obciążeniowego.
Masz teraz zasób testowania obciążenia platformy Azure i test obciążeniowy, aby wygenerować obciążenie dla przykładowej aplikacji internetowej w ramach subskrypcji platformy Azure.
Dodawanie składników aplikacji platformy Azure w celu monitorowania aplikacji
Testowanie obciążenia platformy Azure umożliwia monitorowanie metryk zasobów dla składników platformy Azure aplikacji. Analizując te metryki po stronie serwera, można zidentyfikować problemy z wydajnością i stabilnością w aplikacji bezpośrednio z poziomu pulpitu nawigacyjnego testowania obciążenia platformy Azure.
W tym samouczku dodasz składniki platformy Azure dla przykładowej aplikacji wdrożonej na platformie Azure, takiej jak usługa App Service, konto usługi Cosmos DB i inne.
Aby dodać składniki aplikacji platformy Azure dla przykładowej aplikacji do testu obciążeniowego:
W witrynie Azure Portal przejdź do zasobu testowania obciążenia platformy Azure.
W okienku po lewej stronie wybierz pozycję Testy , aby wyświetlić listę testów obciążeniowych
Zaznacz pole wyboru obok testu obciążeniowego, a następnie wybierz pozycję Edytuj.
Przejdź do karty Monitorowanie , a następnie wybierz pozycję Dodaj/Modyfikuj.
Zaznacz pola wyboru dla wdrożonej wcześniej przykładowej aplikacji, a następnie wybierz pozycję Zastosuj.
Napiwek
Możesz użyć filtru grupy zasobów, aby wyświetlić tylko zasoby platformy Azure w przykładowej grupie zasobów aplikacji.
Wybierz pozycję Zastosuj , aby zapisać zmiany w konfiguracji testu obciążeniowego.
Składniki aplikacji platformy Azure dla przykładowej aplikacji zostały pomyślnie dodane do testu obciążeniowego, aby umożliwić monitorowanie metryk po stronie serwera podczas uruchamiania testu obciążeniowego.
Uruchamianie testu obciążeniowego
Teraz możesz uruchomić test obciążeniowy, aby symulować obciążenie dla przykładowej aplikacji wdrożonej w ramach subskrypcji platformy Azure. W tym samouczku uruchomisz test obciążeniowy z poziomu witryny Azure Portal. Alternatywnie możesz skonfigurować przepływ pracy ciągłej integracji/ciągłego wdrażania w celu uruchomienia testu obciążeniowego.
Aby uruchomić test obciążeniowy w witrynie Azure Portal:
W witrynie Azure Portal przejdź do zasobu testowania obciążenia platformy Azure.
W okienku po lewej stronie wybierz pozycję Testy , aby wyświetlić listę testów obciążeniowych
Wybierz test obciążeniowy z listy, aby wyświetlić szczegóły testu i listę przebiegów testów.
Wybierz pozycję Uruchom, a następnie uruchom ponownie, aby rozpocząć test obciążeniowy.
Opcjonalnie możesz wprowadzić opis przebiegu testu.
Po uruchomieniu testu obciążeniowego usługa Azure Load Testing wdraża skrypt testowy JMeter i wszelkie dodatkowe pliki w wystąpieniach aparatu testowego, a następnie uruchamia test obciążeniowy.
Po uruchomieniu testu obciążeniowego powinien zostać wyświetlony pulpit nawigacyjny testu obciążeniowego.
Jeśli pulpit nawigacyjny nie jest wyświetlany, możesz wybrać pozycję Odśwież , a następnie wybrać przebieg testu z listy.
Pulpit nawigacyjny testu obciążeniowego przedstawia szczegóły przebiegu testu, takie jak metryki po stronie klienta i metryki aplikacji po stronie serwera. Wykresy na pulpicie nawigacyjnym są odświeżane automatycznie.
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 przy użyciu metryk po stronie serwera
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 metryki Czas odpowiedzi dla żądań interfejsu
add
API iget
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 może powodować błędy ograniczania przepustowości bazy danych. Może również zwiększyć 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 i Ustawienia i zaktualizuj wartość przepływności do 1200.
Wybierz pozycję Zapisz , aby potwierdzić zmiany.
Weryfikowanie ulepszeń wydajności
Teraz, gdy zwiększono przepływność bazy danych, uruchom ponownie 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.
Możesz wyświetlić nowy wpis przebiegu testu z kolumną stanu, która 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 zaktualizowaniu ustawień skalowania bazy danych można zobaczyć, ż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.
Powiązana zawartość
- Uzyskaj więcej szczegółów na temat diagnozowania testów zakończonych niepowodzeniem
- Monitorowanie metryk po stronie serwera w celu identyfikowania wąskich gardeł wydajności w aplikacji
- Definiowanie kryteriów niepowodzenia testu obciążeniowego w celu zweryfikowania wyników testu pod kątem wymagań usługi
- Dowiedz się więcej o kluczowych pojęciach dotyczących testowania obciążenia platformy Azure.