Repères ouverts pour le test de charge des serveurs et des applications Web

Il s'agit d'une collection d'utilitaires basée sur les recommandations des résidents de Hacker News et GitHub. La liste comprend: Locust, Vegeta, Slow_cooker, k6 et Siege. Ils sont utilisés par les ingénieurs de DICE, EA et Buoyant, ainsi que par les développeurs de Kubernetes et Load Impact. Parlons de ces outils.


Photos - Victor Freitas - Unsplash

Locust.io


Outil pour les sites de tests de stress. Tous les scripts sont écrits en Python. Une interface Web spéciale construite sur Flask permet de surveiller les résultats en temps réel. Les auteurs de Locust sont des ingénieurs suisses, parmi lesquels des employés des sociétés DICE et EA impliquées dans le développement et la publication de jeux informatiques.

L'outil est basé sur un concept intéressant: le criquet pèlerin ("locust") émule le comportement d'un essaim d'insectes (utilisateurs virtuels), "attaquant" le site lors du test. Les demandes sont formées à l'aide d'une bibliothèque réseau pour organiser le calcul parallèle - gevent . Voici un exemple de test simple, qui est donné sur le site officiel du projet:

from locust import HttpLocust, TaskSet, task class WebsiteTasks(TaskSet): def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") @task def about(self): self.client.get("/about/") class WebsiteUser(HttpLocust): task_set = WebsiteTasks min_wait = 5000 max_wait = 15000 

Locust utilise la bibliothèque de requêtes. Ce module complémentaire pour les outils Python standard simplifie le travail avec HTTP et SSL et rend le code plus visuel. Soit dit en passant, la documentation des demandes peut être utilisée comme une feuille de triche pour les tests de débogage sur Locust.

Cet outil de test de stress existe depuis plus de sept ans. Pendant ce temps, une vaste communauté s'est formée autour de lui - sur GitHub plus de 10 000 étoiles . Locust a été utilisé pour évaluer les performances du réseau Battlelog pour la série de jeux Battlefield. Armin Ronacher, auteur du framework Flask, a parlé positivement de l'outil.

Parmi les inconvénients du Criquet pèlerin , il y a des performances assez faibles et des erreurs périodiques dans l'estimation du temps de réponse des sites. L'outil ne sait pas non plus comment créer des graphiques, mais le problème est résolu en téléchargeant les résultats sous forme de fichiers CSV et en rendant les graphiques dans l'éditeur de table.

Si vous voulez mieux connaître Locust, vous devez faire attention à la documentation de l' outil. Vous pouvez également recommander une performance d' Alexei Romanov de Wargaming au Meetup Python. Il explique comment écrire des scripts qui émulent le comportement des utilisateurs.

Vegetablea


Go utilitaire de ligne de commande pour tester les services HTTP écrits en Go. Il peut être connecté en tant que bibliothèque pour créer vos propres outils de test de charge. Vegeta a été développé par l'un des auteurs de la plateforme open source Sourcegraph , un moteur de révision et de navigation du code source utilisé par Lyft, Uber et Yelp.

Vegeta évalue les capacités des ressources du réseau, "bombardant" leurs demandes avec une fréquence définie. Par exemple, pour vérifier localhost, entrez simplement la commande suivante:

 echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report 

Par défaut, Vegeta fonctionne avec le flux de lecture de commandes standard (stdin), de sorte que la ressource pour les tests est transmise par écho. Le paramètre de durée indique la durée du test. Le rapport sera généré dans le fichier results.bin. Vegeta génère des rapports au format texte, mais peut dessiner des graphiques . Vous pouvez les générer avec la commande suivante:

 vegeta plot -title=Results results.bin > results-plot.html 

Une grande communauté s'est formée autour de Vegeta - 12 mille étoiles sur GitHub . L'outil a même été utilisé par les développeurs de Kubernetes pour évaluer les performances de leur plateforme - puis Vegeta a généré environ 10 millions de requêtes par seconde sur un cluster de milliers de nœuds.

La documentation décrivant toutes les fonctions et drapeaux pour les tests Vegeta est dans le référentiel sur GitHub . Vous pouvez également y trouver des fichiers exécutables précompilés.

Slow_cooker


Il s'agit d'un outil de test de charge de serveur écrit en Go. Il a été développé par les ingénieurs de Buoyant, qui crée un réseau de service pour Kubernetes - Linkerd. Il fait partie de la Cloud Native Computing Foundation et est considéré comme un concurrent de Google Istio .


Photos - Joshua Aragon - Unsplash

Habituellement, les utilitaires de test de charge vérifient les capacités du serveur, en lui envoyant autant de demandes que possible en peu de temps. Les auteurs de slow_cooker disent que leur outil vous permet d'évaluer le travail du fer sous une charge prévisible pendant longtemps.

Des experts dynamiques utilisent leur développement pour tester Linkerd et d'autres services, tels que nginx. L'instrument est assez jeune - il a environ trois ans - donc jusqu'à ce qu'il ait une grande communauté. Mais la situation pourrait changer à l'avenir, par exemple, son référentiel a déjà été bifurqué chez Skysanner, un service international de recherche de billets d'avion.

Vous pouvez trouver le code source sur GitHub .

k6


Un outil pour les tests de charge et de régression des microservices, conteneurs et sites hébergés dans le cloud. Il est écrit en Go et par les développeurs JavaScript de Load Impact - c'est une application pour tester la "persistance" des sites.

Le travail avec k6 est basé sur le tout comme modèle de code, lorsque la logique de test et tous les paramètres sont écrits en JavaScript. Dans les scripts, les étapes individuelles peuvent être regroupées, ce qui peut être pratique pour ceux qui sont habitués à suivre les principes du BDD. Voici un exemple d'un tel groupe:

 import { group } from "k6"; export default function() { group("user flow: returning user", function() { group("visit homepage", function() { // load homepage resources }); group("login", function() { // perform login }); }); }; 

L'outil permet également d' enregistrer des scripts et de construire des graphiques - cette dernière fonction est implémentée sur InfluxDB et Grafana. Et il a des intégrations avec des systèmes CI comme Jenkins, Circle CI, Team City et GitLab.

Les utilisateurs disent que k6 ne consomme pas beaucoup de ressources et possède une API pratique. Mais il y a plusieurs inconvénients, en particulier, k6 ne prend pas en charge websocket et ne sait pas comment effectuer des tests sur des systèmes distribués. Bien que les développeurs de k6 dans le fil thématique sur Hacker News aient déclaré que ces fonctionnalités apparaîtront à l'avenir.

Si vous voulez vous familiariser avec les capacités de k6, les résidents de HN recommandent de commencer par la documentation technique - elle est détaillée et avec des exemples. Si vous avez des questions, vous pouvez contacter le forum officiel .

Siège


Siege vous permet de charger des serveurs Web de test. L'utilitaire a été créé par l'ingénieur Jeff Fulmer (Jeff Fulmer), afin que les développeurs puissent vérifier la consommation de ressources de leur code dans des conditions proches du combat. Siege émule un flux continu d'accès au site de la part de nombreux utilisateurs, comme s'il tenait le serveur "en état de siège" - d'où le nom de l'outil.

Après le test, l'utilitaire affiche: le temps d'analyse, le nombre de transactions par seconde, le débit, le nombre de demandes réussies et infructueuses, ainsi que leur nombre avec un code de réponse de 200. Voici un exemple de rapport généré par Siege.

Siege est assez répandu dans la communauté informatique. Par exemple, une section entière du livre " NGINX High Performance " est consacrée aux tests de charge avec son aide. Il est également utilisé par certains fournisseurs de cloud.

Parmi les inconvénients de Siege, on peut distinguer la syntaxe non standard et les méthodes non évidentes de calcul des paramètres de test - par exemple, les redirections sont considérées comme des transactions réussies, leur nombre peut donc dépasser le nombre total de demandes. Si vous voulez essayer Siege dans la pratique, étudiez le manuel en ligne - il y a quelques "bizarreries" du système.

Lecture supplémentaire sur le blog 1cloud.ru:

Nouveautés du noyau Linux 5.3 - Pilotes graphiques, virtualisation et autres mises à jour
Pourquoi les développeurs de navigateurs traditionnels ont à nouveau refusé d'afficher le sous-domaine
Pourquoi Apple a modifié les exigences pour les développeurs d'applications

Source: https://habr.com/ru/post/fr474474/


All Articles