Votre application s'est développée. Le serveur, qui dormait auparavant paisiblement, dispose désormais d'un CPU à 100%. Les utilisateurs se plaignent de la lenteur. la base de données plante. Bienvenue dans le problème de l’échelle.
Faire évoluer un backend pour prendre en charge des millions de requêtes n’est pas une tâche triviale. Cela nécessite de passer du mode « faire fonctionner » au mode « faire fonctionner ». Voici les meilleures pratiques architecturales pour préparer votre backend à la guerre.
1. Base de données : Le cœur (et le goulot d'étranglement)
la base de données est presque toujours la première à tomber en panne.
- Indexation : vérifiez si toutes vos requêtes utilisent des index. Une recherche sans index (Full Table Scan) dans une base de données de 1 million de lignes arrête tout.
- Cache (Redis) : Arrêtez de tout demander à la banque. Si les informations ne changent pas toutes les secondes (par exemple profil utilisateur, liste des catégories), enregistrez-les dans Redis (mémoire RAM). C'est 100 fois plus rapide.
- Connection Pooling : L'ouverture et la fermeture d'une connexion avec la banque coûtent cher. Utilisez un « Pool » qui maintient les connexions ouvertes et réutilisables.
2. Asynchronisme (ne faites pas attendre l'utilisateur)
Si l'utilisateur clique sur "Générer un rapport PDF", et que cela prend 10 secondes, ne laissez pas la requête HTTP ouverte en attente.
- Files d'attente : utilisez RabbitMQ, Kafka ou SQS.
- Le flux : L'utilisateur demande le rapport -> Le backend répond "Ok, noté" (202 Accepté) et l'envoie à la file d'attente -> Un "Travailleur" le prend dans la file d'attente, le traite et informe l'utilisateur (Notification Push/E-mail) lorsqu'il est prêt.
3. Apatride (pas de mémoire)
Pour évoluer, vous avez besoin de plusieurs serveurs (instances) exécutant le même code. Si vous enregistrez la session de l'utilisateur en mémoire sur le serveur A et que la requête suivante arrive sur le serveur B, l'utilisateur sera déconnecté.
- Pratique : Utilisez des jetons JWT (l'état reste sur le client) ou stockez les sessions sur Redis (base de données partagée). Vos serveurs d'applications doivent être jetables.
4. CDN (Réseau de diffusion de contenu)
Ne diffusez pas d’images, de vidéos et de CSS depuis votre serveur principal. Utilisez un CDN (Cloudflare, AWS CloudFront). Le CDN stocke des copies des fichiers sur des serveurs répartis dans le monde entier. L'utilisateur télécharge la photo depuis le serveur situé au coin de sa maison, soulageant ainsi son infrastructure centrale et accélérant le chargement.
5. Surveillance (Observabilité)
Vous ne pouvez pas réparer ce que vous ne voyez pas. Installez des outils APM (Application Performance Monitoring) comme New Relic ou Datadog. Sachez exactement :
- Quel point de terminaison est le plus lent ?
- Quelle requête bancaire prend le plus de temps ?
- Quel est le taux d'erreur (500) ?
Conclusion
La mise à l’échelle consiste à éliminer les goulots d’étranglement. C'est un jeu de détective. Vous trouvez le goulot d'étranglement (par exemple, la banque), le résolvez (le cache) et le goulot d'étranglement change d'emplacement (par exemple, le réseau). Gardez l’architecture simple, découplée et observable, et vous survivrez à la croissance.
A lire aussi
-Backend pour les applications : architecture, technologies et bonnes pratiques -Backend pour les applications - Bonnes pratiques pour les startups
