1. État des lieux
En octobre dernier, le temps de chargement sur les tablettes et les ordinateurs était de 9,55 secondes. Dans un premier temps, j’ai essayé de comprendre la structure du site de L’entreprise.
Celui-ci est sur un serveur dédié*. Un serveur dédié* est un serveur* mis à disposition par un hébergeur* pour un seul client. Au contraire, un serveur* partagé* par plusieurs clients est nommé serveur mutualisé*. Ce serveur* sert de support à un multisite* avec le CMS* WordPress* comprenant une vingtaine de sites. Au vu de la charge du serveur*, sa configuration est bien assez puissante pour l’utilisation que nous en faisons d’après mes recherches et mes collègues en réseau. Donc le problème ne viendrait pas des capacités du serveur*.
Un CMS*, Content Management System est un logiciel permettant de créer et gérer du début à la fin l’apparence et le contenu d’un site web sans avoir à écrire du code, du langage informatique.19 Il peut être utilisé simultanément par plusieurs individus, propose des chaînes de publications de contenu et permet de gérer séparément la forme et le contenu. WordPress* utilise les langages de programmation HTML*, CSS*, JavaScript*, PHP* et MySQL*.
WordPress* est le CMS* gratuit et open source le plus utilisé dans le monde. Un logiciel open-source* est un type de licence qui permet à chacun de le lire, le modifier ou le redistribuer. Il représente 33% des sites web mondiaux en 2019, loin devant Joomla, le deuxième CMS*, qui en représente 3%. WordPress* bénéficie d’une très grande communauté chargée d’améliorer régulièrement l’outil et de faire de nombreuses mises à jour fonctionnelles et techniques. De très nombreux thèmes* gratuits et payants existent et sont compatibles avec la plupart des navigateurs* et responsives*. Un site responsif* est un site conçu pour s’adapter à toutes les résolutions d’écran, que ce soit sur ordinateur, tablette ou mobile.
Du côté de notre site, le thème* et le constructeur de page* Kleo de la marque seventhqueen est installé. Un thème* WordPress* est un ensemble de fichiers qui a pour rôle de modifier et personnaliser l’apparence global du site mais également la disposition des contenus. Un page builder ou constructeur de page* en français est une application qui permet de créer des pages web sans écrire des lignes de code ; c’est une interface de création de site web. Kleo est très puissant et offre des possibilités très importantes mais il ajoute un poids important au site : 53,3 Mo.
Pour compléter Kleo, 81 plugins* sont installés en plus pour l’ensemble des sites. Pour le site, 30 plugins* sont actifs. Un plugin*, appelé extension en français, permet d’ajouter de nouvelles options et d’étendre les fonctionnalités d’un site WordPress*, sans avoir besoin de coder. Par rapport aux fonctionnalités proposés par Kleo et les plugins* installés, nous en utilisons très peu sur le site de L’entreprise. De plus, en regardant les messages d’erreurs côté WordPress* et serveur*, plusieurs plugins* génèrent des erreurs, surtout avec le passage à la version 7 de PHP*. En effet, le changement de version d’un langage informatique entraîne souvent des modifications importantes du langage lui-même. Et les plugins* qui utilisent le langage PHP* doivent être mis à jour pour que leurs fonctionnalités restent actives.
Côté utilisateurs, le nombre d’éléments en première page est trop important et provoque des ralentissements à l’ouverture du site. C’est-à-dire que le nombre de fichiers en css* et en JavaScript* chargés est très important. La question du cache* se pose. Aucun plugin* de cache* n’est installé sur le multisite* côté client. Mais le Gzip*, le cache* côté serveur*, est bien actif. Le CDN* Cloudflare a été mis en place début septembre pour le site L’entreprise.com mais enlevé début avril à la suite de problèmes de cache* et de sécurité. Un réseau de diffusion de contenu (RDC) ou en anglais content delivery network (CDN), est constitué de serveurs* reliés en réseau à travers Internet et qui coopèrent afin de mettre à disposition du contenu ou des données à des utilisateurs. Enfin, des messages nous avertissant que nous atteignons la capacité limite de stockage du serveur* ont commencé à apparaître.
2. HISTORIQUE
Au début, le serveur* a été loué pour mettre en place un site avec le CMS* Magento* avec une configuration serveur* Nginx*. Une configuration serveur* est un ensemble de fichiers de configuration qui définissent les réglages d’un serveur*.
Par la suite, le site du groupe s’est ajouté avec WordPress*. Puis, le site à destination des professionnels a été créé avec Magento*. Cinq autres sites WordPress* indépendants ont été développés.
Postérieurement, un essai de migration* sur le serveur* de l’ancien site de
l’entreprise codé à l’aide de Zend Framework*, un Framework* PHP* a eu lieu mais la migration* n’a pas été concluante pour des problématiques de base de données (MariaDB*) non compatibles avec l’installation actuelle (MySQL*) et a été annulée.
Helpdesk* a été installé avec le service OsTicket* afin de mettre en place un service de ticket pour les demandes pour le service informatique en interne. Pour cela, la configuration serveur* Apache* a été ajoutée sur le serveur*.
Puis, un autre site sous PrestaShop* avec une configuration Apache* s’est ajouté. PrestaShop* est un CMS* spécialisé dans la création de boutique en ligne. Le nouveau site de l’entreprise sous WordPress* avec la configuration Apache* a aussi été ajouté sur le serveur*.
Du fait de la double configuration Apache* et Nginx* mis en place sur le serveur*, le logiciel HA Proxy* a été mis en place sur celui-ci.
Apache* et Nginx* sont tous les deux des logiciels libres de serveur* web. C’està-dire des logiciels qui vont traiter les requêtes des utilisateurs à l’aide des ressources disponibles sur le serveur*. Du fait de son ancienneté, Apache* propose plus de services mais Nginx* est plus efficace pour traiter un nombre de requête très important grâce à son modèle Event Driven*. Apache* utilise le modèle Thread Driven qui crée un thread à chaque fois qu’un utilisateur demande une page web. Un thread*, ou thread* d’exécution, désigne la séquence ordonnée de base comprenant les instructions logicielles qui peuvent être transmises à un cœur de processeur ou être traitées par celui-ci. Quand un thread* attend une information, celui-ci se bloque et créé un nouveau thread* pour une nouvelle demande. Ce modèle pose un problème dans le cas d’un nombre de demandes simultanées importantes car les threads* se bloquent les uns et les autres et augmentent fortement le délai de réponse du serveur*.
Au contraire, le modèle Event Driven* utilise un seul thread* qui traite et répartit toutes les requêtes sur les processus compétents qui eux-mêmes les dispatchent de nouveau si besoin. Cela permet d’avoir une gestion des requêtes fluides, sans blocage et un délai de réponse serveur* faible même avec 10 000 connexions simultanées.
Pour avoir ces deux logiciels sur le même serveur*, Nginx* est configuré pour utiliser son reverse proxy*. Celui-ci traite toutes les demandes entrantes et détermine si ces requêtes doivent être redirigées vers Apache* ou bien traitées directement par Nginx*. Cependant, utiliser ce reverse proxy* peut causer des problèmes aléatoires difficiles à résoudre et il est recommandé d’installer le logiciel HA Proxy* pour y pallier.
HA Proxy* est un logiciel gratuit et open source qui fournit un load balancing* de haute disponibilité et un reverse proxy* pour les serveurs* web. Le load balancing*, c’est à dire la répartition de charge permet d’optimiser le temps de réponse pour chaque requête en évitant de surcharger les algorithmes* de manière inégale. Le reverse proxy* du logiciel s’exécute avant Apache* et Nginx* afin de rediriger directement les requêtes sur l’un ou l’autre.