Les Outils de test de performance expliqués: du côté du serveur

La performance de votre application affecte votre entreprise plus que vous ne l’auriez pensé. Les meilleures organisations d’ingénieries ne considèrent pas laperformance comme quelquechose d’acquis mais comme une caractéristique cruciale de leur produit. Ces organisations comprennent que la performance a un impact direct sur l’expérience de l’utilisateur et en fin de compte sur leurs résultats. Malheureusement, la plupart des équipes d’ingénieries ne teste pas régulièrement la performance et l’extensibilité de leur infrastructure. Dans mon dernier messagesur les tests de performance, je souligne une liste longue d’outils qui peuvent être utilisés pour tester le chargement. Dans ce résumé nous passerons en revue trois outils de test de performance: Siege, MultiMechanize, and Bees with Machine Guns. Je montrerais de simples exemples pour débuter le test de performance de vos applications web sans tenir compte du langage.

Pourquoi des questions de performance?

Quelques statistiques sur l’impact commercial de la performance chez les principales entreprises sur Internet:

Performance Impact

Comme vous commencez le cycle de développement du logiciel il est important de mesurer la performance de l’application et de comprendre l’impact de chaque nouvelle version. Comme votre infrastructure de production évolue, vous devez également suivre l’impact  du système d’ensemble et la mise à niveau de votre  système d’exploitation . Voici quelques outils que vous pouvez utiliser pour un test de chargement de vos applications de production:

Apache Bench

Apache bench est un outil simple pour tester le chargement d’application fournit par défaut avec le serveur Apache httpd. Un simple exemple de test de chargement example.com avec 10 utilisateurs simultanés pendant 10 secondes.

Install Apache Bench:

apt-get install apache2-utils

Apache bench un serveur web avec dix connexions simultanées pendant  10 secondes:

ab -c 10 -t 10 -k http://example.com/

Benchmarking example.com (soyez patient)
Terminer 286 requêtes
Logiciel serveur:        nginx
Nom d’hôte du serveur:        example.com
Port du serveur:            80

Chemin d’accès du document:          /
Longueur du document:        6642 bytes

Niveau de concurrence:      10
Temps pris pour le test:   10.042 seconds
Requêtes complètes:      286
Requêtes échouées:        0
Erreur d’écritures:           0
Requêtes de supervision:    0
Total transféré:      2080364 octets
HTML transféré:       1899612 octets
Requêtes par seconde:    28.48 [#/sec] (signifie)
Temps par requêtes:       351.133 [ms] (signifie)
Temps par requêtes:       35.113 [ms] (signifie, parmi toutes les demandes simultanées)
Taux de transfert:          202.30 [kilooctets/sec] reçu
Temps de connexion (ms)              minimum  signifie[+/-sd] médian   maximum

Connecté:        9   20  14.2     17     148
Traitement:   117  325  47.8    323     574
Attente:      112  317  46.3    314     561
Total:        140  346  46.0    341     589

Pourcentage des requêtes servies dans un certain temps (ms)
50%    341
66%    356
75%    366
80%    372
90%    388
95%    408
98%    463
99%    507
100%    589 (requête la plus longue)

Siege + Sproxy

Personnellement, je préfère Siege à Apache Bench pour un simple test de chargement car il est un peu plus flexible.

Installez Siege:

apt-get install siege

Siege un serveur web avec 10 connexions simultanées pendant 10 secondes:

siege -c 10 -b -t 10S http://example.com/

** SIEGE 2.72
** Préparer 10 utilisateurs simultanés pour se battre.
Le serveur est à présent sous siege…
Transférer le serveur siege…      fait.

Transactions:              263 hits
Disponibilité:              100.00 %
Temps écoulé:              9.36 secs
Données transférées:          0.35 MB
Temps de réponse:             0.35 secs
Taux de transaction:          28.10 trans/sec
Débit:                0.04 MB/sec
Concurrence:               9.82
Transactions réussis:   263
Transactions échouées:       0
Transactions la plus longue:       0.54
Transaction la plus courte:      0.19

 

La plupart du temps vous voulez tester le chargement d’un site en entier et pas seulement  un seul critère. Une approche commune est d’explorer l’ensemble de l’application afin de découvrir tous les urls et puis lancer le un test sur quelquesde ces urls. Les fabricants de Siege ont aussi crée  sproxy qui en conjonction avec wget vous permet d’explorer l’ensemble du site au travers de proxy et d’enregistrer tous les urls accessibles. C’est en fait un moyen plus facile de lister tous les url disponibles dans votre application.

1) Activer sproxy et spécifier la sortie de tous les urls jusqu’à un fichier urls.txt:

sproxy -o ./urls.txt

2) Utiliser wget avec sproxy afin d’explorer tous les  urls de example.com:

wget -r -o verbose.txt -l 0 -t 1 –spider -w 1 -e robots=on -e « http_proxy = http://127.0.0.1:9001 » « http://example.com/ »

3) Triez et dupliquez à nouveau la liste des urls à partir de votre application:

sort -u -o urls.txt urls.txt

4) Siege la liste des urls avec 100 utilisateurs simultanés pendant 3 minutes:

siege -v -c 100 -i -t 3M -f urls.txt

** SIEGE 2.72
** Préparer 100 utilisateurs simultanés à se battre.
Le serveur est à présent sous siege…
Transférer le serveur siege…      fait.

Transactions:              263- hits
Disponibilité:              100.00 %
Temps écoulé:              90.36 secs

Donnée transférée:          3.51 MB
Temps de réponse:             0.35 secs
Tauxde transaction:          88.10 trans/sec
Débit:                                   0.28 MB/sec
Concurrence:               9.82
Transactions réussis:   2630
Transactions échouées:       0
Transaction la plus longue:       0.54
Transaction la plus courte:      0.19

Multi-Mechanize

Lors du test des applications web quelque fois vous devez écrire des scripts de test qui simulent virtuellement l’activité de l’utilisateur par rapport à un site/service/api. Multi-Mechanize est un  outil open source  pour tester la performance et le chargement. II exécute les scripts Python simultanément afin de générer la charge (transactions synthétiques)  d’un site ou d’un service à distance. Multi-Mechanize est plus communément utilisé pour la performance web et les tests d’extensibilité, mais peut être utilisé pour générer la charge de travail de  tout API accessible à distance depuis Python. Les rapports de test de sortie sont enregistrés en tant qu’HTML ou JMeter-compatible XML.

1) Installez Multi-Mechanize:

pip install multi-mechanize

2) Bootstrapping un nouveau projet de mécanisation multiple est facile:

multimech-newproject demo

importation mécanisme
importation temps

classe de transaction(objet):
def run(self):
br = mechanize.Browser()
br.set_handle_robots(False)

start_timer = time.time()
resp = br.open(‘http://www.example.com/’)
resp.read()
latency = time.time() – start_timer

self.custom_timers[‘homepage’] = latency

assert (resp.code == 200)
assert (‘Example’ in resp.get_data())

 

3) Exécutez le projet multi-mécanisme et revoir les rapports de sortie

multimech-run demo

 

multimech

Bees with Machine Guns

Dans le monde réel vous avez besoin de tester la production de votre infrastructure  avec un trafic réaliste. Afin de générer la quantitéde chargement qui  représente réellement la production, vous avez besoin d’utiliser plus d’une machine. Le Chicago Tribune s’est investi pour aider le monde à résoudre ce problème en créant Bees with Machine Guns. Non seulement il a un nom épique, mais il est incroyablement utile pour tester le chargement en utilisant plusieurs clouds (structures) exemples via Amazon Web Services. Bees with Machine Guns est un utilitaire pour armer (créer) de nombreuses « abeilles » (exemples micro EC2) afin d’attaquer (test de charge) des cibles (applications web).

1) Installez Bees with Machine Guns:

pip install beeswithmachineguns

2) Configurez les services références Amazon Web  in ~/.boto:

[Références]

aws_access_key_id=xxx
aws_secret_access_key=xxx

[Boto]

ec2_region_name = us-west-2
ec2_region_endpoint = ec2.us-west-2.amazonaws.com

3) Créez exemples 2 EC2 en utilisant le groupe de sécurité par défaut dans le us-west-2b zone disponible en utilisant le  ami-bc05898c image et se connecter en utilisant le nom d’utilisateur ec2-user.

bees up -s 2 -g default -z us-west-2b -i ami-bc05898c -k aws-us-west-2 -l ec2-user

Connexion à la (ruche)
Tentative d’appeler 2 (abeilles).
Attendre les (abeilles) pour charger leurs armes à feu…
.
.
.
.
Bee i-3828400c est prêt pour l’attaque
Bee i-3928400d est prêt pour l’attaque
(L’essaim) a réuni 2 (abeilles).

4) Contrôlez si  les exemples ec2  sont prêts à se battre

Rapport (Abeille)

Lire 2 (abeilles) depuis la liste.
Bee i-3828400c: running @ 54.212.22.176
Bee i-3928400d: running @ 50.112.6.191

5) Attaquez un url si les exemples ec2 sont prêts à se battre

Attaques d’abeilles -n 100000 -c 1000 -u http://example.com/

Lire 2 (abeilles) à partir de la liste.
Connexion à la (ruche).
Assemblage (Abeilles).
Chacune des 2 (Abeilles) tireront 50000 coups, 125 à la fois.
Piquer URL ainsi il sera en cache pour l’attaque.
Organiser l’essaim.
0 abeille a rejoint l’essaim.
1  abeille a rejoint l’essaim.
0 abeille tire en faisant feu de son arme à feu. Bang bang!
1 abeille tire en faisant feu de son arme à feu. Bang bang!
1 abeille est à court de munition.
0 abeille est à court de munition.
Offensive complète.
Requêtes complètes:   100000
Requêtes par seconde: 1067.110000 [#/sec] (signifie)
Temps par requêtes:    278.348000 [ms] (signifie)
Temps de réponse 50% :   47.500000 [ms] (signifie)
Temps de réponse 90% :   114.000000 [ms] (signifie)
Mission d’évaluation: Offensive d’abeille écrasée ciblée.

L’essaim est en attente de nouveaux ordres.

6) Isoler tous les exemples EC2

Abeilles supprimées

 

AppDynamics

Avec AppDynamics Pro vous obtenez des mesures de performances en profondeur afin d’évaluer l’extensibilité et la performance de votre application. Utilisez  le navigateur AppDynamics Pro Mesure afin de suivre  le temps de réponse clé et les erreurs pendant la durée des tests de chargement:

 

metrics browser

Utilisez AppDynamics Rapport d’analyse d’extensibilité pour ’évaluer la performance de votre application par rapport aux  tests de chargement:

 

Screen-Shot-2013-10-15-at-5.44.52-PM2-1024x570

Utilisez AppDynamics Pro pour comparer des applications multiples sorties pour voir le changement de la performance et de la stabilité:

 

release

Débuter avec AppDynamics Pro dès aujourd’hui pour la gestion de performance d’application en profondeur

Comme toujours, s’il vous plait,  n’hésitez pas à me laisser un message si vous pensez que j’ai oublié quelque chose où si vous avez une demande sur un sujet en particulier pour un prochain article..

Cet article est la traduction du texte original en anglais. Ci-joint le texte original: http://www.appdynamics.com/blog/devops/load-testing-tools-explained-the-server-side/#sthash.AiG38ybZ.dpuf