25 nov. 2015

Les centiles et la performance applicative

Contexte d'utilisation


Le centile est particulièrement utilisé dans le cadre de la surveillance d'une application informatique. Les mesures sont toujours recueillis sur une période de temps donnée. Et ces mesures font référence à une ou plusieurs transaction(s) (Une transaction applicative est une requête, un appel ou une fonction lié(s) à l'application). Les centiles sont utilisés pour représenter un temps de réponse d'une transaction. Le calcul du centile s'applique sur un ensemble de mesures de ces temps de réponse.

La moyenne et la médiane ne suffisent pas


Inadapté à l'effet des dépendances


Dans le contexte d'un programme informatique, pour la réalisation d'une seule fonction précise, de nombreuses requêtes techniques sont généralement envoyés à l'application. De plus, une requête technique sera elle-même souvent dépendante d'autres requêtes. Ainsi, nous observons généralement un phénomène de cascade et de propagation des lenteurs. Une seule requête lente peut impacter plusieurs fonctions de l'application. Et une requête lente peut ralentir un grand nombre d'autres. Ces deux effets combinés exacerbent les impacts de quelques lenteurs sur tous le système applicatif. Ainsi quelques lenteurs peuvent dégrader fortement l'expérience utilisateur.

Lorsque nous observons unitairement les requêtes, nous n'avons généralement pas une bonne représentation de l'impact sur les fonctions de l'application. Les métriques associées à des requêtes particulières sont toujours plus optimistes et partiels en comparaison à une mesure qui prendrait comme référence les fonctions applicatives nécessaires à l'utilisateur final. Quelques requêtes anormalement longues ne feront varier que faiblement la moyenne (ou la médiane) de temps de réponse pour cette requête avec un grand ensemble d'appels. En effet, la donnée est "lissée" dans la masse des requêtes plus nominales dans le cas de la moyenne (ou de la médiane). Par contre, ces quelques requêtes peuvent faire grandement varier l'accessibilité et la rapidité de la fonction applicative qui dépends de cette requête.

Ainsi, la moyenne et la médiane ne permettent pas d'observer facilement les anomalies qui ont un réel impact sur les utilisateurs de l'application.

Sensibilité aux singularités


Des études attestent que les temps de réponse de transactions/requêtes d'un système informatique ne sont généralement pas uniformes dans le temps. Des évènements sporadiques provoquent souvent de brèves et rares pics sur les temps de réponses ou des indisponibilités du système. Ces perturbations se traduisent par des temps de réponses très lents en comparaison avec la grande majorité de ceux mesurées.

Les causes de ces pics doivent être bien sûr analysés et traités dans leur contexte. Cependant, ces pics doivent être ignorés pour l'analyse de la performance de requêtes particulières car ils interviennent du fait de facteurs indépendants de l'implémentation de ces requêtes. La probabilité d'occurrence de ces pics est très faible et sont la conséquence de phénomènes qui ne sont pas liés à la charge de l'application, ni à un contexte nominal de fonctionnement. Les causes peuvent être :

  • Un processus externe indépendant allouant des ressources partagées avec l'application (CPU, mémoire, réseau, ...) comme par exemple un processus automatique de mise à jour du système
  • Une pause induite par le "ramasse miette" (Garbage Collector) rare et impactante
  • L'exécution spontanée et manuelle d'un "batch" consommateur de ressource
  • Une pause liée à une exécution en mode "déboggage"
  • Un "swap" disque
  • etc ...
Ces pics ont un impact sur les mesures. Et la moyenne est non adaptée car elle est sensible à ces mesures perturbatrices, particulièrement lorsque celles-ci ont de fortes valeurs. Une forte perturbation aura d'autant plus d'impact sur la moyenne que la perturbation est grande.


Source : http://www.jybaudot.fr/

Définition d'un centile


Un centile (percentile en anglais) est un nombre particulier d'un ensemble de nombres triés. Un centile est toujours lié à un pourcentage qui définie la proportion de nombres inférieurs (ou égal) à celui recherché. Ainsi, nous parlons par exemple du 99ième centile d'un ensemble. Et le 99ième centile d'un ensemble de nombres est le nombre le plus grand du sous-ensemble contenant 99% des mesures et où les plus grandes valeurs de l'ensemble initial sont absentes.

Le centile permet d'indiquer directement des valeurs significatives qui impactent vraiment leur environnement (à hauteur de son paramètre en pourcentage). De plus, le centile n'est que faiblement sensible aux singularités car celles-ci sont représentées par les valeurs élevées qui sont ignorées. Ainsi le centile est adapté à l'analyse de temps de réponse de requêtes dans le cas d'une application par exemple.


source : wikipedia

Un exemple


Soit un ensemble E de 10 nombres triés {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

  • Le 90ième centile de E est 9
  • Le 80ième centile de E est 8
  • Le 70ième centile de E est 7
  • etc.

Les cas spéciaux


  • Le 50ième centile est la médiane d'un ensemble de valeurs, c'est à dire la valeur au centre.
  • Le 100ième centile est le maximum d'un ensemble de valeurs, c'est à dire la plus grande valeur.

Le nine-th ou le nombre de neufs


Seuls des centiles particuliers sont généralement utilisés dans le cadre de l'analyse de la performance applicative. Il s'agit des centiles dont le pourcentage associé est écrit avec uniquement des neufs. Ainsi, dans ce cas nous pouvons abréger cette mesure en l'appelant "n nine-th" d'après l'anglais où n est le nombre de neufs dans le pourcentage. Bien sûr, au delà de deux neufs, les neufs suivants sont indiqués dans la fraction décimale du pourcentage lié au centile. Ainsi :
  • 1 nine-th = 90ième centile
  • 2 nine-th = 99ième centile
  • 3 nine-th = 99,9ième centile
  • 4 nine-th = 99,99ième centile
  • etc.

Combien de neuf dois je considérer ?


Il n'existe pas de formule (à ma connaissance) pour déterminer le nombre de neuf adéquat pour une mesure. Il est plutôt empirique de déterminer le seuil de neuf au delà duquel les performances se dégradent significativement. Des outils (un APM par exemple) vous permettront d'observer vos résultats avec différents centiles. Dès lors, il sera intéressant de considérer le centile qui présente des dégradations significatives par rapport au précédent (avec un neuf de moins).

Les applications ayant particulièrement des problèmes de performances ou de disponibilité analyseront les résultats du premier ou second neuf. Mais les applications les plus robustes et stables feront référence au 5ème neuf pour mesurer leur qualité de service.

L'importance du centile avec un grand nombre de neuf est par ailleurs détaillé sur le blog "Latency Tip Of The Day" :http://latencytipoftheday.blogspot.fr/2014/06/latencytipoftheday-most-page-loads.html

Conclusion


Le centile permet de traiter les problématiques de temps de réponse sur un système applicatif car il réponds aux besoins suivants :

  • Ignorer les valeurs les plus grandes qui proviennent généralement de singularités non liées à la transaction (ou application) observée
  • Mettre en évidence des valeurs dégradées pour traiter les cas problématiques qui ont un effet de cascade le plus grand sur le reste du système applicatif
  • Pouvoir répondre aux besoins précités en faisant varier le ratio de données à filtrer, à l'aide du pourcentage (ou du nombre de neufs dans ce dernier)


Fabrice LARCHER est architecte et développeur senior de Nudge APM. Accompagne les clients dans l’amélioration de la fiabilité et la robustesse de leurs applications pour apporter plus de satisfaction aux utilisateurs