Aller au contenu
Ingénierie · 4 min de lecture

Mesurez le p99, car la moyenne cache votre pire journée

L'affirmation Un temps de réponse moyen est presque inutile comme indicateur de santé, car il est dominé par les nombreuses requêtes rapides et ne dit rien des quelques lentes — et...

A Rédigé par Administrator
Mesurez le p99, car la moyenne cache votre pire journée

L'affirmation

Un temps de réponse moyen est presque inutile comme indicateur de santé, car il est dominé par les nombreuses requêtes rapides et ne dit rien des quelques lentes — et les lentes sont les clients que vous perdez. Un tableau de bord affichant une saine moyenne de 120 millisecondes peut coexister avec 1 % de requêtes qui prennent huit secondes, et ce 1 % n'est pas une erreur d'arrondi : sur un site fréquenté, c'est des milliers de personnes par jour devant une page qui semble brisée.

Pourquoi la moyenne ment

Prenez cent requêtes. Quatre-vingt-dix-neuf reviennent en 80 millisecondes et une prend 5 secondes. La moyenne est d'environ 130 millisecondes — un nombre qui paraît correct et ne décrit aucune requête réelle. Personne n'a vécu 130 millisecondes ; quatre-vingt-dix-neuf personnes ont vécu 80 et une a vécu une attente de cinq secondes. La moyenne a mathématiquement effacé le seul point de donnée qui représente un problème.

Cela compte parce que les requêtes lentes ne sont pas réparties au hasard entre vos utilisateurs. Elles se concentrent sur les clients aux plus grandes données, aux plus gros paniers, aux plus longs historiques — souvent vos meilleurs clients. La moyenne vous dit que la requête typique est rapide. Elle ne peut pas vous dire que vos utilisateurs les plus précieux sont ceux qui frappent la queue de distribution.

Ce que signifient les centiles

Un centile est un énoncé direct sur une fraction de votre trafic. La latence au 95e centile est la valeur sous laquelle passent 95 % des requêtes et qu'excèdent 5 %. Le 99e est la valeur que battent 99 %. Lisez-les comme des promesses à vos utilisateurs :

MesureCe qu'elle dit de vos utilisateurs
p50 (médiane)La moitié des requêtes sont plus rapides que ceci
p9519 requêtes sur 20 sont plus rapides ; 1 sur 20 est plus lente
p991 requête sur 100 est plus lente que ceci
p99,91 sur 1000 — votre pire expérience régulière

L'écart entre p50 et p99 est la forme de votre problème. Un p50 de 80 millisecondes et un p99 de 200 millisecondes forment un système sain et régulier. Un p50 de 80 millisecondes et un p99 de 6 secondes forment un système rapide pour la plupart et gravement brisé pour une minorité notable, et seul le centile le révèle.

Le piège de l'amplification de la queue

Il y a une raison contre-intuitive pour laquelle la queue compte plus que son pourcentage ne le laisse croire : un seul chargement de page fait souvent plusieurs requêtes internes, et la page n'est aussi rapide que sa plus lente. Si l'affichage d'un tableau de bord exige 10 appels internes et que chacun a 1 % de risque d'être lent, la probabilité qu'au moins un soit lent n'est pas de 1 % — elle est d'environ 10 %. La queue par requête de 1 % est devenue une queue par page de près d'une sur dix. Voilà pourquoi des systèmes qui paraissent sains au niveau de la requête semblent poussifs au niveau de la page, et pourquoi le p99 de vos services individuels gouverne le p90 de votre expérience utilisateur.

Le mesurer sans pile lourde

Nul besoin d'une plateforme d'observabilité pour commencer. Nginx peut journaliser le temps de requête, et quelques lignes de traitement transforment un fichier de journal en centiles :

log_format perf '$request_time $request_uri';

# puis, sur une fenetre de journal :
awk '{print $1}' access.log | sort -n | \
  awk '{a[NR]=$1} END{print "p50", a[int(NR*0.50)];
                       print "p95", a[int(NR*0.95)];
                       print "p99", a[int(NR*0.99)]}'

C'est un véritable rapport de centiles à partir de données que vous avez déjà. Un vrai système de mesures les calcule en continu et permet de les ventiler par route, ce que vous voudrez ensuite — car le p99 de tout votre site est moins actionnable que le p99 de /checkout précisément.

Fixez des cibles sur les centiles, pas les moyennes

Une fois les centiles mesurés, fixez-y vos objectifs. « Moyenne sous 200 millisecondes » est une cible atteignable tout en échouant gravement pour un cinquième des requêtes. « p95 sous 400 millisecondes et p99 sous 1 seconde » est une cible qui contraint réellement l'expérience, car elle plafonne la gravité de la queue lente. Alertez sur le franchissement du seuil par le centile, pas sur le mouvement de la moyenne, car le temps qu'une queue lente devienne assez grosse pour bouger la moyenne, elle nuit aux utilisateurs depuis un moment.

Par où commencer

Sortez le journal d'accès de la semaine dernière et calculez les p50, p95 et p99 de vos trois routes les plus importantes. Si le p99 tient dans environ trois fois le p50, votre système est régulier et vous pouvez passer à autre chose. Si le p99 vaut dix fois le p50 ou plus, vous avez un problème de queue que votre moyenne cachait, et les requêtes ou chemins de code responsables méritent d'être trouvés — car les utilisateurs du mauvais côté de ce nombre vivent un produit différent, bien pire, que celui que décrit votre moyenne.

#performance #metrics #monitoring #latency

À lire aussi