Agenda :
Les enjeux de la performance d'un site Web
Les différents éléments de performance d'un site Web
Infrastructure, architecture technique, tuning, architecture applicative, WebPerf
L'obsession de la mesure
Les outils
Les quickwins
Caches, upscaling, outscaling, sharding
La démarche de test de charge
Méthodologie, outils, types de test, données de test
La démarche PDCA
Intégrer les tests de charge au cycle de développement
Environnement éphémère
2. Les événements Oxalide
• Objectif : présentation d’une thématique métier ou technique
• Tout public : 80 à 100 personnes
• Déroulé : 1 soir par trimestre de 18h à 21h
• Introduction de la thématique par un partenaire
• Tour de table avec des clients et non clients
• Echange convivial autour d’un apéritif dînatoire
• Objectif : présentation d’une technologie
• Réservé aux clients : public technique avec laptop – 30 personnes
• Déroulé : 1 matinée par trimestre de 9h à 13h
• Présentation de la technologie
• Tuto pour la configuration en ligne de commande
• Objectif : présentation d’une thématique métier ou technique
• Réservé aux clients : 30 personnes
• Déroulé : 1 matin par trimestre de 9h à 12h
• Big picture
• Démonstration et retour d’expérience
Apérotech
Workshop
Morning Tech
4. Speakers
Adrien le Priol
ITWO Customer Team 1
@Priolix @lpiot
Ludovic Piot
Resp. du pôle Conseil,
Architecture et DevOps
5. Introduction
● Les enjeux de la performance sur le Web
● Les différents éléments de performance d'un
site Web
Les bonnes pratiques
● Limiter le trafic non monétisable
● Infrastructure (HTTP/2 HTTPs, architecture
technique, tuning, architecture applicative,
WebPerf
● AMP by Google
● Les quickwins par grands thèmes
(infra / archi tech / archi appli / WebPerf)
● compression gzip, taille des images…
cas de Leroy-Merlin (règles de 10 images de
100 Ko maxi).
● Caches, upscaling, outscaling, sharding
Agenda
L’obsession de la mesure
● Les outils
● La démarche de test de charge
● Méthodologie, outils, types de test, données de
test
La démarche PDCA
● Intégrer les tests de charge au cycle de
développement (tests de non-regression)
● Environnements éphémères
9. +1 second could cost Amazon
$1.6 Billion in Sales
source : https://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales
10. +0.4 second and Google could lose
8 millions searches per day
source : https://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales
12. Pour ce qui est des performances, les
développeurs pensent souvent avoir
livré ça…
En réalité, assez souvent, quand on le
fait tourner en production, ça
ressemble plutôt à ça…
13. Les enjeux de la performance sur le Web
Les performances d’un
système sont une
spécification fonctionnelle
implicite du système.
source : http://www.arthursclipart.org
14. Les enjeux de la performance sur le Web
La performance du
système doit être une
préoccupation
perpétuelle du cycle de
développement.
source : http://www.geantsduweb.com/
15. Les différentes composantes de la performance d’un site Web
Navigateur Web
Cache
Moteur JS
Interpréteur
HTML
Connexions
HTTP
Equipements
réseau
Serveur DNS
Routeurs
Firewall
Proxies
Serveur Cache
Statiques
Config.
Routage
backends
Refactoring
HTML
Serveur Web
Workers
Config.
Rewrite
ruless
Redirect
Reverse-Proxy
Algo. TLS
ACL
Rewrite rules
Protocoles
HTTP
Serveur App
Workers
Config.
Protocole d’
échange
Stockage
statiques
Message broker
Queues
TTL
Protocole d’
échange
Patterns de
diffusion
App
Sync / Async
Cache appli.
Langage
Qualité du
code
Plateforme
load-balance
# instances
sizing & unit
perfs
Tuning
Base de données
Size
Cache
Sharding
Stats /
Explain plan
My Platform… well… sort of…
17. Identifier le trafic monétisable
Connaître son auditoire.
Éliminer les parasites:
outils d’intelligence concurrentielle
bases de données marketing
monitoring média, clipping
agences SEO
Badbots*
*les bad bots représentaient jusqu’à 35% du nombre total de visites - (source : Datadome)
18. Limiter le trafic non-monétisable
Robot.txt
User-agent: ArchitextSpider
Disallow: *
Améliorer le référencement
Bloquer le référencement de certaines ressources.
Déclaratif
20. Limiter le trafic non-monétisable
Solutions SaaS : Datadome
Quoi
● User agent
● IP owner
● Géolocalisation
Comment
● Nombre de hits par adresse IP
● Vitesse de crawl
● Récurrence des hits
● Nombre de hits générant des erreurs 404
● Cookies
Apache
Nginx
Varnish (4.0 - 4.1 - 5.0, 3.0)
IIS module (ASP.Net)
Wordpress plugin
DATADOME
27. Quickwin
& bon sens
Optimiser la taille/nombre des images
Minifier CSS/JS
Activer le Gzip
Exécuter les JS en fin de chargement
Limiter les ressources externes (JS, annonceurs, statistiques … )
43. L’obsession de la mesure
La mesure de
performance doit être au
cœur du processus de
développement
informatique.
source : http://www.geantsduweb.com/
44. Les tests de charge
Différents types de test de charge
Objectif : mesurer la performance unitaire
Ex. : le use case de souscription est testé pour 1 utilisateur et, pour chaque étape du use
case, on mesure le temps passé dans les différents composants de l’application.
Test de
performance
unitaire
Test de
charge
Test de
rupture
Test de
vieillissement
Objectif : mesurer la tenue en charge de l’application sur la population cible
Ex. : on simule l’utilisation de l’application par 200 utilisateurs en parallèle pendant 2 heures.
Objectif : déterminer les limites de l’application
Ex. : on augmente le nombre d’utilisateurs en parallèle sur l’application jusqu’à ce que le
taux d’erreurs / les temps de réponse ne soient plus acceptables.
Objectif : déterminer la capacité de l’application à fonctionner sur une période étendue
Ex. : on simule l’utilisation de l’application pendant 48h, avec une charge constante et égale
à la charge moyenne.
45. Tests de charge
But:
Connaître les limites de la plateforme
Déterminer les goulets d’étranglement
Optimiser le paramétrage middleware et applicatif
Cibler d'éventuelles anomalies de conception logiciel,
architecture.
46. Méthodologie d’un tir de charge
Définition du plan et
des cas de test
Création des scénarii et
des scripts de tests
Enregistrement des
métriques
Consolidation des
métriques et édition
d’un rapport de test
Analyse du rapport de
test et émission des
préconisations
1
2
3
4
5
Plan de test Cas de test Création des
paliers de données1
Scripts de test Scénarii de test
Capture des
métriques
Données de test
3
Métriques
Contrôleur
Rapport d’analyse
Rapport de test
charge
monitoring
pilotage
Injecteurs
Exécution : simulation
d’utilisateurs3
Application cible
47. Tests de charge
Qualité du tir de charge
dépend que la qualité du
scénario
Connaître le comportement
de ses utilisateurs (RUM:
Google analytics, Newrelic)
55. Les tests de perf dans un cycle projet
Mode Waterfall
PROD
Archi
Dev
Perf
56. Les tests de perf dans un cycle projet
Mode agile
PROD
Archi
Dev
Perf
1. Conception
des tests
2. Automatisation
des tests
3. Développement
logiciel
#1 #2 #3
4. Exécution auto-
matique des tests
57. Les tests de perf dans un cycle projet
Mode “dans la vraie vie”
PROD
Archi
Dev
Perf
1. Conception
des tests
2. Automatisation
des tests
3. Développement
logiciel
#1 #2 #3
4. Exécution auto-
matique des tests
PERFORMANCES
CATASTROPHIQUES
MEP À L’ARRACHE
Délai
OPTIMISATIONS
COMME ON PEUT
58. Les tests de perf dans un cycle projet
Mode “Etat de l’art”
PROD
Archi
Dev
Tests de charge en continu
1. Conception
des tests
2. Automatisation
des tests
3. Développement
logiciel
#1 #2 #3
4. Exécution auto-
matique des tests
59. 2
1
3
4
AMI
0
Cloud-init
EC2
Chef-solo CodeDeploy
ECR
S3 bucket
Tirs de performance automatisés
Environnements éphémères
1
• Terraform provisionne des instances EC2 sur AWS
(accès via SSH possible)
• Utilisation d’AMIs spécifiques enrichies avec un chef-solo
2
3
• CodeDeploy déclenche l’exécution de Chef-solo
• Chef-solo récupère les cookbooks sur un bucket S3
• Installation des packages et configuration OS +
middleware
4
• CodeDeploy lance le déploiement de l’application
• Récupération des artefacts applicatifs sur des dépôts (git,
nexus, registry Docker)
• Déploiement de l’application
5 • Déclenchement des scénarios Gatling
• job lancé en automatique via un pipeline Gitlab-CI0
• Scripts de démarrage cloud-init
• Déclenchement de CodeDeploy