Tir de perf AppsGW

Introduction

Aujourd’hui, nous allons nous intéresser aux tests de charge des reverse proxy (aussi appelés load balancers de niveau 7), plus particulièrement ceux du Cloud Azure. Les tests de charge sont essentiels pour évaluer les performances et la capacité d’un système à gérer un nombre important de requêtes simultanées.

Dans un monde où les applications et les services en ligne sont de plus en plus sollicités, il est crucial de s’assurer que votre infrastructure est en mesure de répondre à la demande. Il est également important de connaître les limites de chaque brique de votre infrastructure afin d’optimiser les performances et d’anticiper les besoins en ressources lors de pics d’activité.

Dans cet article, nous allons explorer les différentes méthodes pour réaliser des tests de charge sur les reverse proxy et découvrir comment identifier les points d’amélioration potentiels dans nos infrastructures Azure. Nous utiliserons l’outil Vegeta pour mener à bien ces tests, et nous vous montrerons comment tirer le meilleur parti de cet outil pour obtenir des résultats précis et exploitables.

Vegeta

Vegeta est un outil open-source de test de charge HTTP, conçu pour être simple, rapide et flexible. Il permet d’évaluer les performances de vos systèmes en générant un trafic important sur une application ou un service en ligne.

Nous allons voir ensemble l’usage de Vegeta pour tester les performances de vos reverse proxy en utilisant Docker et directement le binaire téléchargé depuis le dépôt GitHub.

https://github.com/peter-evans/vegeta-docker

Docker

Pour faciliter l’utilisation de Vegeta, nous pouvons afficher les commandes disponibles en exécutant la commande suivante :

docker run --rm -i peterevans/vegeta

Lançons maintenant le test :

docker run --rm -i --add-host=web.ravindra-job.fr:168.20.19.1  peterevans/vegeta sh -c "echo 'GET https://web.ravindra-job.fr' | vegeta attack -rate=10 -duration=30s -insecure| tee results.bin | vegeta report"

Cette commande lance un test de charge sur l’URL https://web.ravindra-job.fr avec un taux de 10 requêtes par seconde pendant 30 secondes.

Les résultats du test sont enregistrés dans le fichier results.bin et affichés sous forme de rapport.

Binary

Nous pouvons également effectuer les tests en téléchargeant le binaire directement depuis le dépôt :

cd ~/downloads
wget https://github.com/tsenart/vegeta/releases/download/v12.8.3/vegeta-12.8.3-linux-amd64.tar.gz
tar -zxvf vegeta-12.8.3-linux-amd64.tar.gz
chmod +x vegeta
./vegeta --version

Gatling

Gatling est un autre outil open-source de test de charge HTTP, conçu pour être puissant, facile à utiliser et extensible. Il est particulièrement adapté pour tester les applications et services web modernes, grâce à sa prise en charge des protocoles HTTP, WebSocket et gRPC.

Nous allons explorer comment utiliser Gatling pour tester les performances de vos reverse proxy en utilisant Docker et en téléchargeant directement le binaire depuis le dépôt officiel.

https://gatling.io/

Docker

Pour utiliser Gatling avec Docker, nous pouvons utiliser l’image Docker officielle :

docker pull gatling/gatling:latest

Nous devons ensuite créer un fichier de simulation Gatling pour décrire notre scénario de test. Créez un fichier MySimulation.scala avec le contenu suivant :

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class MySimulation extends Simulation {
  val httpProtocol = http.baseUrl("https://web.ravindra-job.fr")
  val scn = scenario("BasicTest").exec(http("GET").get("/"))

  setUp(scn.inject(atOnceUsers(10))).protocols(httpProtocol)
}

Exécutez ensuite le test avec la commande suivante :

docker run -it --rm -v $(pwd)/MySimulation.scala:/opt/gatling/user-files/simulations/MySimulation.scala gatling/gatling -s MySimulation

Cette commande lancera un test de charge avec 10 utilisateurs simultanés sur l’URL https://web.ravindra-job.fr.

Binary

Nous pouvons également effectuer les tests en téléchargeant le binaire directement depuis le dépôt :

wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/3.7.3/gatling-charts-highcharts-bundle-3.7.3-bundle.zip
unzip gatling-charts-highcharts-bundle-3.7.3-bundle.zip
cd gatling-charts-highcharts-bundle-3.7.3

Créez ensuite le fichier MySimulation.scala avec le même contenu que précédemment, et placez-le dans le répertoire user-files/simulations/.

Exécutez le test avec la commande suivante : ./bin/gatling.sh -s MySimulation

Le test de charge sera lancé avec 10 utilisateurs simultanés sur l’URL https://web.ravindra-job.fr, et les résultats seront enregistrés dans le répertoire results/.

—-> plus d’information sur la DOC : https://gatling.io/docs/gatling/reference/current/core/simulation/

Artillery

Artillery est un outil open-source de test de charge HTTP, conçu pour être moderne, puissant et facile à utiliser. Il est particulièrement adapté pour tester les applications et services web modernes, grâce à sa prise en charge des protocoles HTTP, WebSocket et Socket.io.

Nous allons explorer comment utiliser Artillery pour tester les performances de vos reverse proxy.

https://artillery.io/

Docker

Pour exécuter vos scripts de test en utilisant la dernière image Docker d’Artillery, utilisez la commande docker run. Vous pouvez monter le répertoire contenant vos scripts de test dans le conteneur en utilisant l’option -v, et référencer vos scripts de test lors de l’exécution de la commande run :

docker run --rm -it -v ${PWD}:/scripts \
  artilleryio/artillery:latest \
  run /scripts/test_script.yaml

Dans cet exemple, vous montez votre répertoire courant contenant votre script de test Artillery (test_script.yaml) sur le répertoire /scripts à l’intérieur du conteneur. Vous pouvez ensuite exécuter le script de test en référençant le chemin complet à l’intérieur du conteneur - dans ce cas, /scripts/test_script.yaml.

Assurez-vous d’avoir créé le fichier test_script.yaml avec le contenu approprié, comme décrit précédemment dans la section “Installation et exécution”.

Binary

Pour installer Artillery, vous aurez besoin de Node.js et npm sur votre machine. Installez ensuite Artillery avec la commande suivante :

npm install -g artillery

Créez un fichier de configuration YAML pour décrire votre scénario de test. Créez un fichier artillery-config.yml avec le contenu suivant :

config:
  target: "https://web.ravindra-job.fr"
  phases:
    - duration: 30
      arrivalRate: 10

scenarios:
  - flow:
      - get: "/"

Exécutez le test avec la commande suivante :

artillery run artillery-config.yml

Cette commande lancera un test de charge avec 10 utilisateurs arrivant par seconde pendant 30 secondes sur l’URL https://web.ravindra-job.fr.

Grafana

Pour analyser et visualiser les résultats de nos tests de charge de manière plus approfondie, il est intéressant de les intégrer dans un système de monitoring tel que Grafana.

Grafana offre une plateforme de visualisation et d’analyse de données permettant de suivre en temps réel les performances de notre infrastructure.

Simuler une charge sur nos application gateway

Dans notre exemple avec Grafana, on peut observer clairement la montée en charge lors de l’exécution des tests sur nos reverse proxy, tels que les Application Gateway d’Azure.

Les métriques telles que le débit (throughput) et la latence peuvent être affichées sous forme de graphiques pour faciliter la détection des Goulot d’étranglement et des problèmes de performance.

En simulant une charge importante sur nos Application Gateway, nous pouvons déterminer leur capacité à gérer un grand nombre de requêtes simultanées et optimiser leur configuration en conséquence. Les outils de test de charge, tels que Vegeta et Gatling, peuvent être utilisés en conjonction avec Grafana pour surveiller et analyser les performances de nos reverse proxy en temps réel.

Ainsi, nous pourrons prendre des décisions éclairées sur les améliorations et les ajustements nécessaires pour garantir la disponibilité et la réactivité de nos applications et services en ligne.