Avec l'augmentation du trafic sur le site ou du volume de la base de données atteignant des millions d'enregistrements, les méthodes de développement standard ne suffisent plus. Les pages commencent à charger pendant plusieurs secondes, le processeur du serveur est à 100 %, la base de données verrouille les tables et les utilisateurs voient des erreurs 504 Gateway Timeout.
Le simple achat d'un serveur plus cher ne résout le problème que temporairement — les requêtes non optimales s'échelonnent très mal. Nous abordons l'optimisation des systèmes à haute charge (Highload) au niveau de l'architecture et du code. Nous analysons les journaux de requêtes lentes (Slow Query Log), construisons des bases d'index efficaces, réécrivons les requêtes SQL lourdes et déployons la mise en cache en mémoire vive (Redis, Memcached).
Pour les projets contenant des téraoctets de données, nous déployons des architectures distribuées : réplication de base de données (Master-Slave) pour séparer les flux de lecture et d'écriture, ainsi que le dimensionnement horizontal (sharding).
Accélération du temps d'exécution des requêtes SQL lentes après optimisation des index
RPS (requêtes par seconde) — performance cible de la base de données optimisée
Temps de réponse de l'API sur le backend sous charge maximale en mode mis en cache
Lignes de données — le volume minimal de tables avec lesquelles nous travaillons dans le cadre de l'optimisation
Une requête SQL non optimale avec des boucles imbriquées commence à s'exécuter exponentiellement plus lentement à mesure que la base de données grandit. Nous écrivons un code backend propre et rapide et configurons les index corrects, vous permettant d'économiser sur la location de serveurs.
Nous menons une étude détaillée des métriques système et optimisons les goulots d'étranglement.
En utilisant des profileurs spécialisés (Blackfire, Xdebug, V8 Profiler), nous décomposons le fonctionnement des scripts serveur en millisecondes. Nous trouvons les fonctions « lourdes », les fuites de mémoire vive et les boucles superflues.
L'optimisation du code serveur lui-même permet de réduire la charge processeur (CPU) plusieurs fois.
Les requêtes envoyées aux disques durs classiques et aux SGBD prennent relativement du temps. Nous configurons Redis/Memcached — des bases de données en mémoire vive. Les données « chaudes » et rarement modifiées sont servies en une fraction de milliseconde.
Le serveur renvoie instantanément la page ou le bloc mis en cache, sans solliciter la base de données principale.
Lors d'opérations simultanées d'écriture et de lecture, la base de données peut verrouiller des tables (Database locks). Nous configurons la réplication : le serveur principal (Master) accepte les données en écriture, et un pool de serveurs de copie (Slaves) fournit les données en lecture.
Cela exclut les blocages mutuels et répartit la charge de lecture entre les machines.
Processus cohérent de collecte de logs, de débogage des requêtes, de configuration de cache et de tests de charge.
Nous activons la surveillance des requêtes SQL lentes. Nous identifions les requêtes dont le temps d'exécution dépasse 100 ms. Nous établissons une carte de charge de la base de données.
Nous analysons les plans d'exécution des requêtes (EXPLAIN). Nous ajoutons des index composés, éliminons le balayage complet des tables (Full Table Scan), optimisons les jonctions JOIN.
Nous lançons le profilage du code backend. Nous recherchons les fuites de mémoire, les algorithmes de traitement de données inefficaces, nous optimisons les boucles internes.
Nous concevons le schéma de mise en cache : cache-aside pour les blocs statiques du site, les listes de produits, les menus. Nous configurons la durée de vie (TTL) et l'invalidation du cache.
Nous configurons finement les fichiers de configuration du SGBD (my.cnf, postgresql.conf) : répartition du pool tampon de mémoire, cache de connexion et paramètres d'écriture sur disque.
Via les outils k6/wrk, nous simulons une affluence de pointe de milliers d'utilisateurs. Nous mesurons la stabilité du temps de réponse, la consommation CPU et prouvons les résultats par des chiffres.
Nous utilisons des logiciels avancés de profilage et de mise en cache de bases de données.
Principaux profileurs de code. Ils fournissent des « cartes d'appels » (Call Graphs) interactives, permettant de visualiser quelle ligne PHP ou Node.js consomme les ressources du processeur.
Cache ultra-rapide en RAM. Utilisé pour stocker les résultats de requêtes lourdes, les sessions utilisateur et les jetons, répondant aux requêtes en quelques microsecondes.
Logiciel moderne pour effectuer des tests de charge. Génère des requêtes HTTP asynchrones en milliers de flux, permettant d'évaluer les limites de résistance du backend avant le lancement.
Le prix dépend de la taille de la base de données, de la complexité de la logique serveur et du taux de RPS requis.
| Possibilités | Optimisation SQL et des index Nettoyage de la base de données et accélération des requêtes lentes 60 000 ₽ Délai : jusqu'à 7 jours Commander | Populaire Mise en cache et code Intégration de Redis, profilage du code backend 95 000 ₽ Délai : jusqu'à 14 jours Commander | Architecture Highload Réplication de base de données, mise à l'échelle horizontale clé en main à partir de 180 000 ₽ Délai : à partir de 20 jours Discuter |
|---|---|---|---|
| Nombre de requêtes SQL à optimiser | jusqu'à 30 requêtes lourdes | jusqu'à 70 requêtes + mise en cache | Refonte complète de la structure de la base de données et des requêtes |
| Intégration de la mise en cache Redis | Mise en cache de base des blocs | Cache distribué Redis Sentinel | |
| Profilage du code backend (Blackfire / Node) | Profilage de base | Refactoring approfondi des goulots d'étranglement | |
| Configuration de la réplication (Master-Slave) | Séparation des flux Read/Write | ||
| Tests de stress (k6 / wrk) | Test jusqu'à 1 000 RPS | Tests jusqu'à 10 000+ RPS avec rapport | |
| Optimisation des configurations serveurs et SGBD | Configuration de my.cnf/postgresql.conf | Optimisation des tampons RAM | Optimisation complète du noyau du système d'exploitation, de Nginx et de la base de données |
Votre serveur est constamment surchargé et les utilisateurs se plaignent de la lenteur du site ? Écrivez-nous — nous effectuerons un profilage de la charge et vous montrerons où se perdent les millisecondes.
Faites une demande — nos architectes Highload prépareront votre site à l'afflux de centaines de milliers de visiteurs, optimiseront les requêtes, configureront la mise en cache et garantiront un fonctionnement stable sous charge.
Optimiser le backend sous charge