L'évolutivité est la capacité d'un système à croître sans dégrader les performances. Lorsque le nombre d’utilisateurs augmente, l’application doit réagir. Ce guide présente des stratégies techniques pour créer des systèmes évolutifs.
Types d'évolutivité
### Vertical (évolutivité)
Plus de ressources sur la même machine : CPU, RAM, disque. Simple mais limité.
Horizontal (évolutivité)
Plus de machines dans le système. Distribue la charge. Théoriquement illimité.
Élastique
Automatique selon la demande. Il monte en pics, diminue en vallées.
Goulots d'étranglement courants
Base de données
Requêtes lentes, connexions épuisées, verrous.
Processeur
Traitement intensif, code inefficace.
Mémoire
Données en mémoire, caches, fuites de mémoire.
E/S
Disque, réseau, opérations de blocage.
Réseau
Latence, bande passante, connexions concurrentes.
## Stratégies back-end
Services apatrides
Aucun état sur le serveur. Toute instance répond à n’importe quelle demande.
Équilibrage de charge
Distribue les demandes. Round-robin, moins de connexions, hachage IP.
###Mise à l'échelle horizontale
Ajoutez automatiquement des instances en fonction des métriques.
Traitement asynchrone
Files d'attente pour les travaux lourds. Réponse rapide, traitement plus tard.
Mise à l'échelle de la base de données
Regroupement de connexions
Réutilise les connexions. PgBouncer, ProxySQL.
Lire les répliques
Lisez les répliques. Distribue les requêtes SELECT.
Mise en cache
Redis, Memcached. Évitez les requêtes répétées.
Optimisation des requêtes
Index corrects, requêtes efficaces.
Partage
Divise les données horizontalement. Complexe mais évolutif.
###NoSQL
DynamoDB, Cassandre. Mise à l'échelle horizontale native.
Mise en cache
Niveaux
Navigateur → CDN → API Gateway → Application → Base de données.
###Modèles
Cache-côté, lecture et écriture.
Invalidation
TTL, invalidation explicite, pilotée par les événements.
Cache distribué
Cluster Redis pour une haute disponibilité.
Files d'attente de messages
Objectif
Découpler les composants. Tampon à pointes.
Technologies
RabbitMQ, SQS, file d'attente Redis, Kafka.
###Modèles
Files d'attente de travail, pub/sub, demande/réponse.
Garanties
Au moins une fois, au plus une fois, exactement une fois.
Microservices
Avantages pour l'échelle
Chaque service évolue indépendamment.
Défis
Complexité opérationnelle, latence du réseau.
###Communication
REST, gRPC, files d'attente de messages.
Découverte de services
Comment les services se retrouvent.
Conteneurs et orchestration
###Docker
Encapsule l’application. Cohérence entre les environnements.
Kubernetes
Orchestration. Mise à l'échelle automatique, vérifications de l'état, mises à jour progressives.
Sans serveur
Fonctions à la demande. AWS Lambda, Fonctions Cloud.
## CDN
Objectif
Contenu statique en bordure. Latence inférieure.
Que boucler
Images, CSS, JS, vidéos, API pouvant être mises en cache.
Fournisseurs
Cloudflare, CloudFront, Fastly.
Mise à l'échelle automatique
Métriques
CPU, mémoire, requêtes, latence, métriques personnalisées.
Politiques
Suivi des cibles, mise à l'échelle des étapes, planifié.
Temps de recharge
Période entre les actions de mise à l’échelle.
Dimensionnement correct
Instances adaptées à la charge de travail.
Optimisation des performances
Profilage
Identifiez où le temps est passé.
Optimisation du code
Algorithmes efficaces, évitez les requêtes n+1.
Chargement paresseux
Facturation sur demande.
###Compression
GZIP, Brotli pour les réponses HTTP.
Observabilité
Surveillance
Prometheus, Datadog, CloudWatch.
Journalisation
Journalisation centralisée. ELK, Loki.
Traçage
Traçage distribué. Jaeger, radiographie.
Alerte
Notifications proactives.
Résilience
Disjoncteur
Pour les cascades de pannes.
Réessayez avec Backoff
Réessayez à intervalles croissants.
###Clôture
Isole les ressources par type d’opération.
Dégradation gracieuse
Fonctionne partiellement lorsque quelque chose échoue.
Tests de charge
Tests de charge
Comportement sous charge normale attendue.
Tests de résistance
Trouvez la limite de rupture.
Tests de pointe
Réponse aux pics soudains.
Tests de trempage
Stabilité sous charge prolongée.
Outils
k6, JMeter, Locust, Gatling.
Modèles de cloud
Multi-AZ
Haute disponibilité dans plusieurs zones.
Multi-région
Reprise après sinistre, latence globale.
Spot/Préemptif
Instances bon marché pour des charges de travail tolérantes aux pannes.
Conclusion
L'évolutivité est le résultat d'une architecture consciente. Planifiez dès le début, surveillez et optimisez constamment là où cela compte. L’objectif est de se préparer à la croissance de l’entreprise.
##FAQ
1) Quand dois-je commencer à penser à l'échelle ? De l'architecture. Mais n’optimisez pas prématurément.
2) Horizontal ou vertical d'abord ? La verticale est plus simple. Horizontal quand il atteint la limite.
3) Les microservices évoluent-ils toujours mieux ? Pas nécessairement. Un monolithe bien conçu peut grimper beaucoup.
4) Comment savoir si je dois grimper ? Surveiller les métriques. Le temps de réponse et l’utilisation des ressources l’indiquent.
5) L'escalade coûte-t-elle cher ? Cela dépend. Le cloud vous permet de payer pour l'utilisation. Optimisez d'abord le code.
A lire aussi
- Évolutivité des applications : stratégies et guide rapide
- Architecture logicielle évolutive : comment créer des systèmes qui grandissent
- Architecture d'application : Guide complet des systèmes évolutifs
- Cache dans les applications
- Cache dans les applications : bonnes pratiques et principes fondamentaux
- Cache dans les applications : bonnes pratiques et étapes essentielles
