Démarche d’amélioration des performances Drupal

Améliorer les performances d’un site (Drupal ou non) peut se révéler être une tâche complexe puisque, par définition, tous les niveaux d’architecture matérielle et logicielle sont potentiellement concernés (Apache, PHP, MySQL, infrastructure).

Une démarche rigoureuse et méthodique est impérative afin de ne pas se lancer dans des optimisations en aveugle. En voici les principales étapes :

Constater, Reproduire, Diagnostiquer, Prioriser, Corriger, Mesurer, Itérer

Pour chaque étape, nous mentionnerons certains outils classiquement utilisés, sans être exhaustif. Chacun d’entre eux mériterait un développement à part.

Constater

Le constat de départ est souvent la conséquence d’une remontée utilisateur, que ce soit en Front ou en Back.

Des outils de sondage peuvent nous aider à repérer les pages les plus lentes si besoin est.

  • Outils : module performance, SEO spider, pingdom, wget

Reproduire

A moins que le souci constaté ne soit général, il est important de parvenir à le reproduire (éventuellement à l’aide d’outils de montée en charge) afin de pouvoir mesurer par la suite si les optimisations mises en œuvre corrigent bien le problème. Il est recommandé d’étalonner les mesures (en servant une page minimaliste par exemple).

  • Outils : ab, jmeter, selenium grid, batch sql

Diagnostiquer

Une fois qu’on sait reproduire le problème, nous allons ouvrir le capot pour voir ce qui se passe dessous.

Le diagnostic va se faire coté serveur en examinant directement les processus, la RAM, l’utilisation disque et réseau. On peut le compléter par des mesures du coté client pour voir si certains éléments (images trop lourdes par exemple, ressources lentes) posent problème. Nous pouvons aussi installer des sondes afin de pouvoir étudier le comportement du serveur dans le temps ou grâce à des alertes qui permettent d’intervenir en temps réel et au bon moment. Ces sondes permettront aussi de valider les améliorations de performances dans les étapes ultérieures. L’historique des évolutions du site peut se révéler un outil précieux de diagnostic. En effet, parfois, les pertes de performances ne font pas suite à une augmentation du trafic, mais à une évolution.

  • Outils Serveur : top, iostat, iotop, dstat
  • Outils Clients : firebug, yslow
  • Sondes : munin, nagios, log apache, log mysql (slow queries)

Prioriser

Tout optimiser serait beaucoup trop coûteux, il faut donc cibler les endroits où l’intervention sera la plus efficace, selon la loi d’Amdahl:

Il vaut mieux investir sur une petite optimisation d’un sous-système gourmand au global plutôt qu’une grosse optimisation d’un sous-système peu consommateur

Il s’agit d’identifier les goulots d’étranglement (bottleneck). Il y a parfois certains calculs lourds qui mobilisent la puissance serveur et ralentissent tous les autres processus.

Corriger

En fonction des pistes retenues dans les étapes principales, nous allons pouvoir agir à différents niveaux. Au niveau de serveur Apache, nous pouvons améliorer la bande passante en examinant la volumétrie, le temps de latence et de connexion du serveur. Nous pouvons aussi optimiser le code en lui-même en rajoutant des caches ou des queues (pour décaler certains traitements pendant les phases où le serveur est le moins chargé).

Dans le cas de Drupal, il peut être intéressant d’examiner les modules utilisés, certains sont réputés être gourmands ou mal cohabités entre eux. La base de données peut aussi être optimisée, souvent au niveau des index ou de certaines requêtes. Enfin, si toutes les méthodes précédentes ne suffisent pas, il faut envisager un changement d’architecture (rajouter un serveur, déporter certains calculs, augmenter les capacités, etc…)

  • Bande passante (apache): etag, CDN, Minify, gz, ESI, Varnish, Squid, Akamai
  • Code (php) : memcache, APC + améliorations de code (CRON, AJAX), htprof
  • Drupal : modules domains / og / i18n / admin_menu
  • BDD (mysql) : indexation, agrégation, optimisation des requêtes
  • Infrastructure : dimensionnement, rajout de serveurs, load balancing, cluster/replication

Mesurer, Itérer

Comme nous avons mise en place les outils de mesure au préalable, une fois les optimisations mises en œuvre, il faudra en mesurer l’impact et si elles ne sont pas suffisantes, reprendre la procédure au départ.

Pour aller plus loin :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

huit + 3 =