Testen der Leistung von Azure Functions mit Azure Load Testing

Wenn sich jemand von Ihnen erinnert, habe ich in der Vergangenheit über Leistungstests von geschrieben Azure-Funktionen mit Tools wie Apache JMeter. Jetzt hat die Azure-Plattform ein nettes neues Tool (derzeit als Vorschau aufgeführt) namens Azure-Lasttests.

Azure-Lasttests ist ein vollständig verwalteter Lasttestdienst, mit dem Sie eine hohe Last generieren können. Der Dienst simuliert den Datenverkehr für Ihre Anwendungen unabhängig davon, wo sie gehostet werden, er abstrahiert die Komplexität und Infrastruktur, um Ihren Auslastungstest in großem Umfang auszuführen, und sammelt detaillierte Ressourcenmetriken, um Ihnen zu helfen, Leistungsengpässe in Ihren Azure-Anwendungskomponenten zu identifizieren.

Es ist wichtig zu erwähnen, dass die zu testende Anwendung überall gehostet werden kann: in Azure, lokal oder in anderen Clouds. Während des Belastungstests sammelt der Dienst die folgenden Sätze von Ressourcenmetriken und zeigt sie in einem Dashboard an:

  • Clientseitige Metriken geben Ihnen Details, die von der Test-Engine gemeldet werden, wie die Anzahl der virtuellen Benutzer, die Antwortzeit auf Anfragen oder die Anzahl der Anfragen pro Sekunde.
  • Serverseitige Metriken Informationen über Ihre verwendeten Azure-Anwendungskomponenten bereitstellen (z. B. Anzahl der Datenbanklesevorgänge, Art der HTTP-Antworten, Ressourcenverbrauch des Containers usw.).

Das folgende Diagramm von Microsoft zeigt, wie Azure Load Testing funktioniert:

Wenn wir die Möglichkeit haben, einen vollständigen Cloud-Lasttestdienst anzubieten, warum sollten Sie ihn dann nicht nutzen, um die Leistung unserer Azure Functions-Apps zu testen? Dies kann nützlich sein, um zu testen, ob eine Funktions-App unter hoher Last gut funktioniert oder ob die Skalierbarkeit der Funktions-App gut eingestellt ist oder nicht.

Um mit der Verwendung zu beginnen Azure-Lasttestsmüssen wir eine Azure Load Testing-Instanz aus dem Azure-Portal erstellen:

Bitte beachten Sie, dass zum Zeitpunkt der Erstellung dieses Beitrags nicht alle Azure-Regionen ausgewählt werden können (wählen Sie also die Region aus, die Ihrer Anwendung am nächsten liegt, um sie zu testen).

Wenn die Azure Load Testing-Instanz bereitgestellt wird, müssen Sie Ihrem Benutzer (oder den Benutzern, die Tests ausführen müssen) die entsprechende Load Test-Rolle zuweisen. Wählen Sie dazu Ihre Azure Load Test-Instanz aus und wählen Sie dann aus Zugriffskontrolle (IAM) und hier Rollenzuweisung hinzufügen:

Hier müssen Sie Ihre Rollenzuweisungen erstellen. Derzeit können Sie die folgenden drei Rollen zuweisen:

  • Testleser laden: Schreibgeschützte Aktionen in der Auslastungstestressource. Leser können Tests und Testläufe in der Ressource auflisten und anzeigen. Leser können keine Tests erstellen, aktualisieren oder ausführen.
  • Belastungstest-Mitwirkender: Anzeigen, Erstellen, Bearbeiten oder Löschen (sofern zutreffend) von Tests und Testläufen in einer Auslastungstestressource.
  • Eigentümer des Belastungstests: Vollständiger Zugriff auf die Auslastungstest-Ressource, einschließlich der Möglichkeit, Assets in einer Ressource anzuzeigen, zu erstellen, zu bearbeiten oder (falls zutreffend) zu löschen. Beispielsweise können Sie die Lasttest-Ressource ändern oder löschen.

Bitte beachten Sie, dass, wenn Sie die haben Eigentümer, Mitwirkenderoder Eigentümer des Belastungstests Rolle auf Abonnementebene haben Sie automatisch die gleichen Berechtigungen wie die Eigentümer des Belastungstests auf Ressourcenebene.

Wenn alles richtig eingerichtet ist, können Sie mit der Erstellung Ihrer Lasttests beginnen. Zum Zeitpunkt des Schreibens dieses Beitrags können Sie einen Lasttest auf zwei Arten erstellen:

  • Erstellen Sie einen Schnelltest mithilfe einer Webanwendungs-URL: nützlich, um einen einzelnen Webendpunkt schnell zu testen.
  • Erstellen Sie einen Test, indem Sie ein JMeter-Testskript (JMX) hochladen; nützlich für die Wiederverwendung eines vorhandenen JMeter-Testskripts oder für fortgeschrittenere Testszenarien.

Um das Auslastungstesten einer Azure-Funktions-App zu demonstrieren, verwende ich hier den Schnelltestansatz.

Wähle aus Tests Menü unter Ihrer Azure Load Testing-Instanz und klicken Sie dann auf Erstellen|Erstellen Sie einen Schnelltest:

In dem Schnell Test Erstellungsseite müssen Sie den zu testenden Endpunkt (URL) und die Ladeparameter eingeben:

Im obigen Beispiel habe ich meinen Azure Function-Endpunkt mit einem Lasttest von 10 virtuellen Benutzern, einer Testdauer von 120 Sekunden und einer Hochlaufzeit von 5 Sekunden getestet.

Wenn der Test erstellt ist, können Sie ihn starten. Die Ergebnisse werden in einem Dashboard wie dem folgenden angezeigt:

Hier sehen Sie die Anzahl der virtuellen Benutzer, die Endpoint-Antwortzeit unter der generierten Last und die durchschnittlichen Anforderungen für die Sekundenverteilung. Meine Azure-Funktions-App hier hat 45084 Anfragen in 2 Minuten mit einer durchschnittlichen Antwortzeit von 31 ms erhalten.

Ich kann auch die Metriken der Azure-Funktions-App überprüfen, um die Speichernutzung und die Datennutzung zu ermitteln:

Jetzt kann ich den Belastungstest mit erhöhter Belastung wiederholen, wie folgt:

In diesem Fall wird die Anzahl der virtuellen Benutzer in einer Hochlaufzeit von 10 Sekunden auf 100 erhöht. Die Testdauer beträgt immer 2 Minuten. Die Ergebnisse der Lasttestausführung sind die folgenden:

Die Anzahl eingehender Anforderungen an meine Azure-Funktions-App ist auf 349230 mit einer durchschnittlichen Antwortzeit von 41 ms gestiegen.

Die Azure Functions-Metriken sind die folgenden:

Aus dem obigen Diagramm können Sie sehen, dass die Ausführungsanzahl (Anzahl der empfangenen Anfragen) im Vergleich zum vorherigen Test stark erhöht ist, aber die Speichernutzung nicht zu stark erhöht ist (die Ausführung der Funktions-App verbraucht nicht zu viel Speicher) und die Antwort Zeit ist immer gut. Die My Function-App kann die erhöhte Last unterstützen.

Sie können den Lasttest mehrfach ausführen und auch verschiedene Ausführungen desselben Tests direkt vergleichen. Um Testläufe in Azure Load Testing zu vergleichen, müssen Sie zunächst bis zu fünf Läufe innerhalb eines Auslastungstests auswählen. Sie können nur Läufe vergleichen, die zum selben Lasttest gehören (ein Testlauf muss sich in der Fertig, Gestopptoder Gescheitert Zustand zum Vergleichen).

Um Belastungstests zu vergleichen, wählen Sie einfach zwei oder mehr Testläufe aus, indem Sie die entsprechenden Kontrollkästchen in der Liste der Tests aktivieren und klicken Vergleichen:

Jeder Testlauf wird nun als Overlay in den verschiedenen Grafiken in einem neuen Dashboard angezeigt:

Warum das Vergleichen von Tests meiner Meinung nach wichtig ist? Aus einem Hauptgrund: Leistungsregressionen erkennen.

Stellen Sie sich beispielsweise vor, Sie müssten eine neue Version Ihrer Funktions-App mit einigen Codeänderungen bereitstellen. Durch Vergleichen von Tests können Sie überprüfen, ob sich die Leistung mit dieser neuen Version der Funktions-App nicht verschlechtert hat.

Azure Load Testing generiert automatisch ein Apache JMeter-Skript für Ihre Auslastungstests. Sie können das JMeter-Skript vom Testlauf-Dashboard herunterladen, indem Sie auswählen Download und dann auswählen Eingabedatei:

Sie können die Testergebnisdatei auch als gezippten Ordner herunterladen, indem Sie auswählen Herunterladen|Ergebnisse. Der Ordner enthält eine separate CSV-Datei für jede Test-Engine und enthält Details zu Anforderungen, die die Test-Engine während des Auslastungstests ausgeführt hat.

Azure Load Testing kann auch in CI/CD-Pipelines für kontinuierliche Regressionstests mit Azure DevOps oder Github Actions integriert werden.

Für Azure DevOps-Pipelines müssen Sie die Azure-Lasttests Aufgabenerweiterung aus dem Azure DevOps Marketplace:

und dann können Sie eine Pipeline-Aufgabe wie die folgende hinzufügen:

Wie Sie sehen können, kann dieses Tool äußerst nützlich sein, um Ihre Cloud-Anwendungen zu testen. Mein Fokus liegt hier auf Azure Functions-Apps, weil ich denke, dass sie ein wichtiger Baustein von serverlosen Architekturen und auch ein wichtiger Baustein in vielen Dynamics 365 Business Central SaaS-Projekten sind. Es ist oft wichtig, herauszufinden, ob Ihre Funktions-Apps unter hoher Last gut funktionieren, und wenn Ihre Funktions-Apps unter einem App Service-Plan (dedizierter Plan) ausgeführt werden, kann Ihnen die Feststellung, ob Ihre Ressourcen die richtige Größe haben, helfen, Geld zu sparen und Probleme zu vermeiden.

Der letzte wichtige Hinweis bezieht sich auf die Preisgestaltung. Azure Load Test ist kein kostenloser Dienst, und wenn Sie jetzt einen Lasttest erstellen, gibt Ihnen das Portal eine Schätzung der Nutzung (direkt verbunden mit dem Preis). Details zu den Preisen finden Sie hier, aber im Wesentlichen zahlen Sie einen Festpreis von ca $10 pro Monat, das 50 virtuelle Benutzerstunden pro Monat enthält + Sie können zusätzliche virtuelle Benutzerstunden hinzufügen.

Wenn Sie keine der von Ihnen erstellten Ressourcen für einen Auslastungstest verwenden möchten, denken Sie daran, sie zu löschen, um zu vermeiden, dass Sie für die zugewiesenen Ressourcen bezahlen.

.

Author: admin

Leave a Reply

Your email address will not be published. Required fields are marked *