System Design

Architecture & Conception
Performance vs Scalabilité

Concevoir des systèmes capables de gérer des millions d'utilisateurs tout en maintenant performance, fiabilité et maintenabilité.

Uber Instagram WhatsApp Netflix Amazon
✨ Petite application = monolithe 🚀 Large échelle = distribution

⚡ Performance vs 📈 Scalabilité

Performance

Définition : Rapidité de traitement d'une requête individuelle.

  • Latence (ms) - temps de réponse
  • Throughput (req/s) - débit
  • Utilisation CPU/RAM
  • Temps d'exécution algorithmique
Objectif : minimiser le temps de réponse

📈 Scalabilité

Définition : Capacité à gérer une charge croissante.

  • Ajout de ressources
  • Distribution de charge
  • Élasticité
  • Tolérance aux pannes
Objectif : supporter plus d'utilisateurs

🔄 Complémentarité & Opposition

Complémentarité : Un système scalable a besoin de composants performants.

Opposition : La distribution (scalabilité) ajoute de la latence réseau, réduisant la performance brute.

1msCache local
50msCache distribué
Scalabilité

🏛️ Monolithic vs Microservices

🏢 Monolithic

Une seule application, un seul codebase

  • Démarrage simple
  • Déploiement unique
  • Partage mémoire rapide
  • Difficile à scaler
  • Couplage fort
Ex: Amazon (débuts), Shopify (débuts)
VS

🔧 Microservices

Services indépendants, communication API

  • Scalabilité indépendante
  • Déploiement séparé
  • Isolement des pannes
  • Complexité réseau
  • Latence inter-services
Ex: Netflix, Uber, Amazon (actuel)

⚡ Optimisation Performance

💾

Caching

Redis, Memcached, CDN

Réduction I/O disque

🔄

Async Processing

Files d'attente, Event-driven

Découplage opérations

🗜️

Compression

Zstd, Brotli, gzip

Réduction bande passante

📊

Indexing

B-Trees, indexes inversés

Accès O(log n)

⚙️

Connection Pool

Réutilisation connexions

Réduction overhead TCP

🚀

Compilation JIT

Optimisation runtime

Code natif

🔍

Profiling

Identification goulots

Optimisation ciblée

📦

Lazy Loading

Chargement différé

Réduction initiale

📊 Scalabilité: Verticale vs Horizontale

⬆️ Scale Up (Vertical)

Augmenter la puissance d'une machine

  • CPU plus rapide
  • Plus de RAM
  • SSD NVMe
  • Limite hardware physique
  • Point unique de défaillance
  • Coût exponentiel
Ex: Base de données SQL unique
VS

⬌ Scale Out (Horizontal)

Ajouter plus de machines

  • Distribution charge
  • Élasticité cloud
  • Théoriquement illimité
  • Haute disponibilité
  • Complexité réseau
  • Coût linéaire
Ex: Google, Amazon, Netflix

⚖️ Load Balancing

🎯 Rôle

Distribuer le trafic entre plusieurs serveurs

  • Éviter la surcharge
  • Haute disponibilité
  • Scalabilité horizontale
  • Failover automatique

🛠️ Outils

  • NGINX
  • HAProxy
  • AWS ELB
  • Traefik

Algorithmes de répartition

Round Robin
Least Connections
IP Hash

💾 Caching Stratégies

📦 Types de Cache

  • In-memory: Redis, Memcached
  • CDN: CloudFlare, Akamai
  • Database cache: Buffer pool
  • Application cache: Local

🎯 Stratégies

  • Cache-Aside
  • Write-Through
  • Write-Behind
  • Cache Invalidation
Facebook: cache presque tout (utilisateurs, posts, photos) avec plusieurs couches

🗄️ Gestion des Données

🔷 SQL

Relationnel, ACID

  • PostgreSQL
  • MySQL
  • Oracle
  • Cohérence forte
  • Schéma fixe

🔶 NoSQL

Flexible, BASE

  • MongoDB (Document)
  • Cassandra (Wide-column)
  • Redis (Key-value)
  • Neo4j (Graph)
  • Cohérence éventuelle

📋 Réplication

Copies pour haute disponibilité

🔪 Sharding

Partitionnement horizontal

🎯 Consistency

ACID vs BASE

📨 Messaging & Async

📤 Systèmes

  • Apache Kafka
  • RabbitMQ
  • AWS SQS/SNS
  • Redis Pub/Sub

✅ Bénéfices

  • Découplage services
  • Background processing
  • Buffering pics trafic
  • Fiabilité (persistence)

Use Case: Traitement commandes

Commande → Kafka → Validation → Paiement → Email (asynchrone)

🐳 Containers & Orchestration

📦 Docker

Containerisation: isolation, reproductibilité, légèreté

  • Images immutables
  • Déploiement rapide
  • Consistance env

☸️ Kubernetes

Orchestration: scaling auto, rolling updates, service discovery

  • Auto-scaling
  • Self-healing
  • Load balancing

🎯 Cas Pratiques

💬 WhatsApp

Chat temps réel

  • WebSocket pour messages
  • Database sharding
  • Cache utilisateurs
  • Files pour notifications

🚗 Uber

Ride-sharing

  • Geo-indexing (PostGIS)
  • Matching en temps réel
  • Microservices
  • Kafka pour events

📺 Netflix

Streaming vidéo

  • CDN pour contenu
  • Encoding distribué
  • Recommendations ML
  • Chaos engineering

⚠️ Défis & Monitoring

🔴 Défis

  • Latence réseau
  • Cohérence données
  • Tolérance aux pannes
  • Sécurité
  • Complexité distribuée

📊 Monitoring

  • Prometheus (métriques)
  • Grafana (dashboards)
  • Jaeger (tracing)
  • ELK Stack (logs)
49's (99.99%)
P99Latence
SLAGaranties

🎯 Conclusion

Principes clés

  • Performance: optimiser localement
  • 📈 Scalabilité: penser distribution
  • ⚖️ Trade-offs: chaque choix a un coût
  • 🔧 Outils: choisir selon besoin
  • 📊 Monitoring: mesurer pour améliorer

"La meilleure architecture évolue avec les besoins"