Montée en charge

Vers l'infini et au delà !

Pour permettre à une application Web de monter en charge, je procède généralement à des modifications dans l’ordre suivant :

Attendre le bon moment

Et oui, un point particulièrement important est de ne pas commencer trop tôt les optimisations de performance, on ne doit commencer à optimiser que lorsque la base de code et les schémas de données sont (relativement) stables

Limiter le nombre de requêtes vers la base de données

La base de données est souvent le premier point de contention qui empêche la montée en charge
De plus, cette base n’est pas forcément située sur la même machine que le serveur Web, ce qui induit une latence additive pour les différentes requêtes
Enfin, limiter le nombre de requêtes autant que possible permet de se retrouver avec une liste courte de requêtes et prépare l’étape suivante

Optimiser les requêtes

On veillera à optimiser chacune des requêtes qui partent vers la base de données.
Si on utilise un ORM, il est nécessaire de regarder la requête SQL qui est générée
On devra utiliser les outils mises à disposition par la base de données, par exemple, le EXPLAIN de PostgreSQL permet de voir le détail du plan d’exécution prévu
Enfin, idéalement, il faudra limiter le nombre de champs que l’on récupère pour diminuer la taille totale de la réponse

Créer des index

Cette étape doit se faire seulement après la précédente : il n’y a pas de recette magique pour la création des index en base de données : il faut connaitre ses données, connaitre leur structure, leur répartition statistique en fonction des champs avant de trouver les index qui permettront de gagner quelques microsecondes sur chaque requête (bon, souvent plus :))

La création d’index n’est pas non plus la panacée universelle : si elle nous permet de gagner du temps en lecture, elle dégrade en contrepartie les temps d’écritures puisqu’en plus de l’enregistrement, la base doit également procéder à la mise à jour des index.

Mettre en place des systèmes de cache

A titre personnel, je mets généralement en place les systèmes de caches après les créations d’index
Mais cette étape peut arriver plus tôt si, par exemple :on veut mettre en cache des pages pour améliorer l’expérience utilisateur et/ou son classement dans les moteurs de recherche.

Réorganiser physiquement les données sur le disque

Certaines bases de données permettent de réordonner les données proches (au sens d’un index donné) pour qu’elles soit proches physiquement : ceci permet une lecture plus rapide des données à renvoyer

Optmiser la base de données

La plupart des bases de données relationnelles sont “livrées” avec une configuration leur permettant de fonctionner sur des machines modestes, qui peuvent correspondre à des machines d’il y a 15 ans, on veillera donc à tuner sa base de données pour en tirer le maximum sur son serveur de production surpuissant :p

Optimiser le système

On peut changer les paramètres du système d’exploitation sous-jacent pour lui permettre de se focaliser sur l’application que l’on souhaite optimiser.

Besoins d'infos supplémentaires ?
Vous pouvez me contacter

Projets associés