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

  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, 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:

  1. Zaloguj się do witryny Azure Portal przy użyciu poświadczeń subskrypcji platformy Azure.

  2. W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Utwórz zasób.

  3. Na stronie Marketplace wyszukaj i wybierz pozycję Testowanie obciążenia platformy Azure.

  4. W okienku Testowanie obciążenia platformy Azure wybierz pozycję Utwórz.

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

  6. Po zakończeniu konfigurowania zasobu wybierz pozycję Przejrzyj i utwórz.

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

  8. Aby wyświetlić nowy zasób, wybierz pozycję Przejdź do zasobu.

    Screenshot that shows the deployment completion screen.

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

    Screenshot that shows an error message in the Azure portal that you're not authorized to use the Azure Load Testing resource.

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.

  1. Przejdź do zasobu testowania obciążenia i wybierz pozycję Utwórz na stronie Przegląd .

    Screenshot that shows the button for creating a new test.

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

    Screenshot that shows the Basics tab for creating a test.

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

    Screenshot that shows the Test plan tab and how to upload an Apache JMeter script.

    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 .

  4. 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 prefiksu https:// .

    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.

    Screenshot that shows the parameters tab to add environment variable.

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

    Screenshot that shows the Load tab for creating a test.

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

    Screenshot that shows the Monitoring tab for creating a test.

    Screenshot that shows how to add Azure resources to monitor during the load test.

    Screenshot that shows the Monitoring tab with the list of Azure resources to monitor.

  7. Wybierz pozycję Przejrzyj i utwórz, przejrzyj wszystkie ustawienia, a następnie wybierz pozycję Utwórz.

    Screenshot that shows the tab for reviewing and creating a test.

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.

  1. Wybierz pozycję Testy , aby wyświetlić listę testów, a następnie wybierz utworzony test.

    Screenshot that shows the list of tests.

    Napiwek

    Możesz użyć pola wyszukiwania i filtru Zakres czasu, aby ograniczyć liczbę testów.

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

    Screenshot that shows selections for running a test.

    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.

    Screenshot that shows the dashboard with test results.

    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.

  1. Najpierw przyjrzyj się metryce po stronie klienta. Zauważysz, że 90. percentyl dla metryki Czas odpowiedzi dla żądań interfejsu getadd API 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 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 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 &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

Po zwiększeniu przepływności bazy danych ponownie uruchom 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.

    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.

  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 zmianie ustawień skalowania bazy danych zobaczysz, ż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.

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.