Plateforme de réservation camping
De 10 à 1000+ utilisateurs simultanés grâce à des optimisations ciblées et une librairie de cache innovante.
Le défi
Une plateforme de gestion et de réservation de terrains de camping en ligne ne supportait qu'une dizaine d'utilisateurs connectés simultanément avant de ralentir drastiquement ou de tomber en panne.
Le système gérait les réservations, la disponibilité des emplacements, les calculs de prix complexes (tarifs variables selon saison, type d'emplacement, durée, etc.) et les paiements en ligne. Mais l'architecture initiale n'était pas conçue pour scaler.
Contexte
- Secteur
- Tourisme / Réservation en ligne
- Stack technique
- PHP, Laravel, Vue.js, MySQL
- Type de trafic
- Multi-utilisateurs simultanés
- Période haute
- Été, weekends, vacances
Problèmes identifiés
Aucune scalabilité
Le système ne supportait que 10 utilisateurs simultanés maximum. Au-delà, le site devenait inutilisable avec des temps de chargement de 30+ secondes.
Requêtes répétitives
Les calculs de disponibilité et de prix étaient effectués à chaque requête, interrogeant la base de données des dizaines de fois pour chaque page.
Base de données surchargée
Pas d'index optimisés, requêtes SQL lentes, pas de système de cache. La BD était le goulot d'étranglement principal.
Appels API dupliqués côté frontend
L'application Vue.js comportait plusieurs composantes qui effectuaient les mêmes appels API de façon indépendante, multipliant inutilement la charge sur le serveur.
Notre approche
1. Audit et profilage complet
Analyse détaillée du code PHP/Laravel, des requêtes MySQL et des patterns d'utilisation. Identification des points de contention et des requêtes les plus coûteuses.
- Profilage avec Xdebug et Sentry
- Analyse des slow query logs MySQL
- Identification des calculs répétitifs
2. Création d'une librairie de cache de base de données
Développement d'un package Laravel de cache transparent pour les requêtes de base de données : webo3/laravel-db-cache. Ce package intercepte automatiquement les requêtes SQL au niveau de la connexion, sans aucune modification du code applicatif.
- Cache transparent des requêtes SELECT avec invalidation intelligente lors des mutations (INSERT, UPDATE, DELETE)
- Trois drivers supportés : Array (en mémoire par requête avec éviction LRU), Redis (architecture L1/L2, compatible AWS ElastiCache/Valkey) et Null
- Normalisation des requêtes (casse, espaces) pour maximiser le taux de cache hit
- Compression gzip et sérialisation igbinary pour Redis
- Middleware de monitoring pour les statistiques de cache
- Compatible PHP 8.1+ et Laravel 9 à 12
Valeur ajoutée : Ce package a été publié en
open source sur Packagist
sous licence MIT, installable via composer require webo3/laravel-db-cache.
3. Optimisation de la base de données
- Ajout d'index stratégiques sur les colonnes les plus interrogées
- Réécriture des requêtes SQL inefficaces
- Normalisation et restructuration de certaines tables
- Optimisation des JOIN et des sous-requêtes
4. Migration de la logique métier de MySQL vers PHP
Les calculs de prix et les règles d'affaires étaient implémentés sous forme de fonctions stockées MySQL, ce qui rendait le scaling de la base de données coûteux et complexe. Chaque instance MySQL devait porter la charge du calcul en plus du stockage des données.
- Réécriture des fonctions MySQL de calcul de prix en PHP/Laravel
- Migration des règles d'affaires (tarifs par saison, type d'emplacement, durée) vers la couche applicative
- MySQL recentré sur son rôle de stockage et de lecture de données
- Scaling horizontal facilité : ajouter des serveurs PHP est simple et peu coûteux vs scaler MySQL
5. Déduplication des appels API côté Vue.js
L'application frontend en Vue.js comportait plusieurs composantes qui déclenchaient les mêmes appels API de façon indépendante, générant une charge serveur inutile.
- Création d'une fonction de déduplication des appels API : les requêtes identiques en cours sont partagées entre composantes au lieu d'être lancées en parallèle
- Élimination des appels redondants entre composantes affichées simultanément
- Réduction significative du nombre de requêtes HTTP vers le backend
6. Optimisation des calculs et du cache applicatif
- Mise en cache des tarifs et règles de pricing côté PHP
- Pré-calcul des disponibilités pour les périodes populaires
- Optimisation des algorithmes de calcul
- Réduction du nombre de requêtes SQL par page de 90%
Résultats mesurables
Augmentation de 5000% de la capacité
Pages qui chargeaient en 5-10s maintenant < 1s
Réduction drastique de la charge BD
Impact business
- Aucune panne lors des périodes de pointe (été, weekends)
- Expérience utilisateur fluide même avec 1000+ utilisateurs
- Code réutilisable publié en open source (crédibilité technique)
- Économies sur l'infrastructure serveur (moins de ressources nécessaires)
Technologies et outils utilisés
Langages et frameworks
Outils d'analyse
Votre plateforme a des problèmes de scalabilité ?
Que ce soit pour supporter plus d'utilisateurs, réduire les coûts d'infrastructure ou améliorer l'expérience utilisateur, webO3 peut vous aider.
Votre site est lent ? Recevez un diagnostic gratuit en 24 h.
Triage gratuit sans engagement. Un expert vous répond en moins de 8 h ouvrables.