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.

  1. Otwórz program Windows PowerShell, zaloguj się do platformy Azure i ustaw subskrypcję:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. 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.

  3. 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
    

    Napiwek

    Program PowerShell można zainstalować w systemie Linux/WSL lub macOS.

    Po zainstalowaniu polecenia można uruchomić poprzednie polecenie jako pwsh ./deploymentscript.ps1.

  4. 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.

  5. 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:

  1. Otwórz okno terminalu i wprowadź następujące polecenie, aby zalogować się do subskrypcji platformy Azure.

    az login
    
  2. Przejdź do przykładowego katalogu aplikacji.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. 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
    
  4. 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
    
  5. 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łączaj https:// 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 skryptu SampleApp.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:

  1. W witrynie Azure Portal przejdź do zasobu testowania obciążenia platformy Azure.

  2. W okienku po lewej stronie wybierz pozycję Testy , aby wyświetlić listę testów obciążeniowych

  3. Zaznacz pole wyboru obok testu obciążeniowego, a następnie wybierz pozycję Edytuj.

    Screenshot that shows the list of load tests in the Azure portal, highlighting how to select a test from the list and the Edit button to modify the load test configuration.

  4. Przejdź do karty Monitorowanie , a następnie wybierz pozycję Dodaj/Modyfikuj.

  5. Zaznacz pola wyboru dla wdrożonej wcześniej przykładowej aplikacji, a następnie wybierz pozycję Zastosuj.

    Screenshot that shows how to add app components to a load test in the Azure portal.

    Napiwek

    Możesz użyć filtru grupy zasobów, aby wyświetlić tylko zasoby platformy Azure w przykładowej grupie zasobów aplikacji.

  6. 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:

  1. W witrynie Azure Portal przejdź do zasobu testowania obciążenia platformy Azure.

  2. W okienku po lewej stronie wybierz pozycję Testy , aby wyświetlić listę testów obciążeniowych

  3. Wybierz test obciążeniowy z listy, aby wyświetlić szczegóły testu i listę przebiegów testów.

  4. Wybierz pozycję Uruchom, a następnie uruchom ponownie, aby rozpocząć test obciążeniowy.

    Opcjonalnie możesz wprowadzić opis przebiegu testu.

    Screenshot that shows how to start a load test in the Azure portal.

    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.

  5. 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.

    Screenshot that shows the client-side metrics graphs in the load test dashboard in the Azure portal.

    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.

  1. Najpierw przyjrzyj się metryce po stronie klienta. Zauważysz, że 90. percentyl metryki Czas odpowiedzi dla żądań interfejsu add API i get jest wyższy niż dla interfejsu lasttimestamp API.

    Screenshot that shows the client-side metrics.

    Możesz zobaczyć podobny wzorzec błędów, w którym lasttimestamp interfejs API ma mniej błędów niż inne interfejsy API.

    Screenshot that shows the error chart.

    Wyniki interfejsów add API i get są podobne, natomiast lasttimestamp interfejs API działa inaczej. Przyczyną może być powiązana baza danych, ponieważ zarówno interfejsy add API, jak i get obejmują dostęp do bazy danych.

  2. 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.

    Screenshot that shows the Azure App Service plan metrics.

    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.

  3. Teraz przyjrzyj się metryce po stronie serwera usługi Azure Cosmos DB.

    Screenshot that shows Azure Cosmos DB metrics.

    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 i get .

    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:

  1. Przejdź do zasobu usługi Azure Cosmos DB, który został aprowizowany w ramach przykładowego wdrożenia aplikacji.

  2. Wybierz kartę Eksplorator danych.

    Screenshot that shows Data Explorer tab.

  3. Wybierz pozycję Skaluj i Ustawienia i zaktualizuj wartość przepływności do 1200.

    Screenshot that shows the updated Azure Cosmos DB scale settings.

  4. 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:

  1. Na pulpicie nawigacyjnym przebiegu testu wybierz pozycję Uruchom ponownie, a następnie wybierz pozycję Uruchom ponownie w okienku Ponowne uruchamianie testu.

    Screenshot that shows selections for running the load test.

    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.

  2. Po zakończeniu testu obciążeniowego sprawdź wyniki czasu odpowiedzi i wyniki błędów metryk po stronie klienta.

  3. Sprawdź metryki po stronie serwera dla usługi Azure Cosmos DB i upewnij się, że wydajność uległa poprawie.

    Screenshot that shows the Azure Cosmos DB client-side metrics after update of the scale settings.

    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 i get 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:

  1. Wybierz przycisk menu w lewym górnym rogu, a następnie wybierz pozycję Grupy zasobów.

  2. Z listy wybierz utworzoną grupę zasobów.

  3. Wybierz pozycję Usuń grupę zasobów. Screenshot of the selections to delete a resource group in the Azure portal.

  4. 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.