AI EducademyAIEducademy
🌳

Fondations IA

🌱
AI Seeds

Partez de zéro

🌿
AI Sprouts

Construisez les fondations

🌳
AI Branches

Mettez en pratique

🏕️
AI Canopy

Approfondissez

🌲
AI Forest

Maîtrisez l'IA

🔨

Maîtrise IA

✏️
AI Sketch

Partez de zéro

🪨
AI Chisel

Construisez les fondations

⚒️
AI Craft

Mettez en pratique

💎
AI Polish

Approfondissez

🏆
AI Masterpiece

Maîtrisez l'IA

🚀

Prêt pour la Carrière

🚀
Rampe de lancement entretien

Commencez votre parcours

🌟
Maîtrise comportementale

Maîtrisez les compétences relationnelles

💻
Entretiens techniques

Réussissez l'épreuve de code

🤖
Entretiens IA et ML

Maîtrisez l'entretien ML

🏆
Offre et au-delà

Décrochez la meilleure offre

Voir tous les programmes→

Labo

7 expériences chargées
🧠Terrain de jeu neuronal🤖IA ou humain ?💬Labo de prompts🎨Generateur d'images😊Analyseur de sentiment💡Constructeur de chatbot⚖️Simulateur d'ethique
🎯Entretien simuléEntrer dans le labo→
ParcoursBlog
🎯
À propos

Rendre l'éducation en IA accessible à tous, partout

❓
FAQ

Common questions answered

✉️
Contact

Get in touch with us

⭐
Open Source

Construit publiquement sur GitHub

Commencer gratuitement
AI EducademyAIEducademy

Licence MIT. Open Source

Apprendre

  • Programmes
  • Leçons
  • Labo

Communauté

  • GitHub
  • Contribuer
  • Code de conduite
  • À propos
  • FAQ

Soutien

  • Offrez-moi un café ☕
  • Conditions d'utilisation
  • Politique de confidentialité
  • Contact
Programmes d'IA et d'ingénierie›⚒️ AI Craft›Leçons›Fondamentaux de la conception de systèmes
🏗️
AI Craft • Avancé⏱️ 20 min de lecture

Fondamentaux de la conception de systèmes

Pourquoi le System Design est important

Chaque application à grande échelle est construite à partir des mêmes briques fondamentales. Les recruteurs ne s'attendent pas à ce que vous inventiez une nouvelle technologie - ils veulent voir que vous savez sélectionner et combiner les bons composants pour un problème donné. Cette leçon couvre la boîte à outils que vous utiliserez dans chaque entretien de design.

Architecture Client-Server

À la base, le web suit un modèle simple : les clients envoient des requêtes, les servers les traitent, et les réponses reviennent. Mais les systèmes modernes ajoutent des couches entre ces deux points pour gérer le scale, la fiabilité et la performance.

Une requête typique peut traverser : client → CDN → load balancer → API gateway → application server → cache → database. Chaque couche résout un problème spécifique, et comprendre quand chaque couche est nécessaire distingue les bons candidats des moyens.

💡

En entretien, commencez toujours par esquisser le flux client-server de haut niveau avant d'entrer dans les détails. Cela démontre une réflexion structurée.

Load Balancers : Distribuer le trafic

Un server unique a une capacité limitée. Les load balancers distribuent les requêtes entrantes sur plusieurs servers grâce à des stratégies comme :

  • Round-robin - les requêtes sont réparties séquentiellement entre les servers
  • Least connections - dirige vers le server qui gère le moins de requêtes actives
  • Consistent hashing - associe les requêtes à des servers spécifiques selon une clé (utile pour le caching)

Les load balancers effectuent aussi des health checks, retirant automatiquement les servers défaillants du pool. Dans les environnements cloud, des services comme AWS ALB ou Azure Front Door gèrent cela de manière transparente.

🧠Vérification rapide

Un service de fil d'actualité reçoit 10 fois plus de lectures que d'écritures. Quelle approche de load balancing garantit le mieux que les utilisateurs atteignent systématiquement le même server avec un cache chaud ?

Caching : De la vitesse à chaque couche

Le caching stocke les données fréquemment consultées au plus près du consommateur. Il existe à plusieurs niveaux :

Leçon 1 sur 100% terminé
←Retour au programme

Discussion

Sign in to join the discussion

Suggérer une modification de cette leçon

| Couche | Exemple | Latency | |--------|---------|---------| | Browser cache | Assets statiques, réponses API | ~0ms | | CDN | Images, fichiers CSS, JS | ~10-50ms | | Application cache | Redis, Memcached | ~1-5ms | | Database cache | Cache des résultats de requêtes | ~5-10ms |

La cache invalidation est célèbre pour être l'un des problèmes les plus difficiles en informatique. Les stratégies courantes incluent le TTL (time-to-live), le write-through (mise à jour du cache à chaque écriture) et le cache-aside (l'application gère le cache explicitement).

🤯

La célèbre citation de Phil Karlton - « Il n'y a que deux choses difficiles en informatique : la cache invalidation et nommer les choses » - est tellement citée qu'elle est devenue un passage obligé dans les entretiens de system design.

Databases : SQL vs NoSQL

Choisir la bonne database est l'une des décisions de design les plus déterminantes :

Les SQL databases (PostgreSQL, MySQL) offrent des transactions ACID, une strong consistency et des schemas structurés. Elles excellent quand les données ont des relations claires et que des requêtes complexes avec des jointures sont nécessaires.

Les NoSQL databases se déclinent en plusieurs catégories :

  • Document stores (MongoDB) - schemas flexibles, idéales pour des structures de données variées
  • Key-value stores (DynamoDB, Redis) - lookups ultra-rapides par clé
  • Wide-column stores (Cassandra) - throughput d'écriture massif, distribué par conception
  • Graph databases (Neo4j) - données riches en relations comme les réseaux sociaux
🧠Vérification rapide

Vous concevez un système qui stocke des profils utilisateurs avec des données semi-structurées qui changent fréquemment (des champs différents selon le type d'utilisateur). Quel type de database convient le mieux ?

Message Queues : Traitement asynchrone

Toutes les opérations n'exigent pas une réponse immédiate. Les message queues (RabbitMQ, Apache Kafka, AWS SQS) découplent les producteurs des consommateurs, permettant :

  • Traitement asynchrone - envoyer un e-mail après l'inscription sans bloquer la réponse
  • Load levelling - absorber les pics de trafic en mettant les requêtes en tampon
  • Fault tolerance - si un consommateur tombe en panne, les messages attendent dans la queue

Kafka mérite une mention spéciale : ce n'est pas qu'une simple queue mais un distributed event log, permettant des architectures event-driven où plusieurs consommateurs peuvent traiter indépendamment le même flux d'événements.

Architecture diagram showing client, load balancer, application servers, cache layer, database, and message queue
Les briques fondamentales d'un système scalable - chaque couche répond à un besoin spécifique.

Microservices vs Monolith

| Aspect | Monolith | Microservices | |--------|----------|---------------| | Deployment | Unité unique | Services indépendants | | Scaling | Tout est scalé ensemble | Scaling par service | | Complexité | Plus simple au départ | Overhead opérationnel | | Données | Database partagée | Database par service |

Commencez par un monolith, extrayez des microservices quand c'est nécessaire. La plupart des recruteurs apprécient les candidats qui reconnaissent que les microservices introduisent une complexité de système distribué (pannes réseau, cohérence des données, orchestration du deployment) et ne sont pas toujours le bon choix.

🤔
Think about it:

Netflix a migré d'un monolith vers des microservices sur plusieurs années. Mais Shopify - qui traite des milliards en transactions - fonctionne toujours sur un monolith modulaire. Quels facteurs pourraient rendre une approche meilleure que l'autre pour une entreprise donnée ?

Le CAP Theorem simplifié

Le CAP theorem stipule qu'un système distribué ne peut garantir simultanément que deux des trois propriétés suivantes :

  • Consistency - chaque lecture retourne l'écriture la plus récente
  • Availability - chaque requête reçoit une réponse
  • Partition tolerance - le système continue de fonctionner malgré les pannes réseau

Puisque les network partitions sont inévitables dans les systèmes distribués, le vrai choix se fait entre CP (consistency plutôt qu'availability) et AP (availability plutôt que consistency).

  • Systèmes CP (ex : HBase, MongoDB avec majority reads) - retournent des erreurs plutôt que des données obsolètes
  • Systèmes AP (ex : Cassandra, DynamoDB) - répondent toujours, mais les données peuvent être légèrement obsolètes
🧠Vérification rapide

Vous concevez un système de transactions bancaires où des soldes incorrects pourraient entraîner des pertes financières. Quel compromis CAP devez-vous privilégier ?

Le framework d'entretien

Lors d'un entretien de system design, suivez cette structure :

  1. Requirements - clarifiez les exigences fonctionnelles et non fonctionnelles (5 min)
  2. API design - définissez les endpoints ou interfaces clés (5 min)
  3. Data model - choisissez les databases et définissez les schemas (5 min)
  4. Architecture haut niveau - esquissez le système avec les briques d'aujourd'hui (10 min)
  5. Deep dives - scalez les bottlenecks, gérez les pannes, optimisez (15 min)
🤔
Think about it:

Pensez à un système que vous utilisez quotidiennement - Instagram, Uber ou Spotify. Pouvez-vous identifier quelles briques de cette leçon il utilise probablement ? Où se situerait le load balancer ? Qu'est-ce qui serait en cache ? Quel type de database conviendrait à son modèle de données ?

Points clés à retenir

  • Tout système scalable utilise les mêmes briques fondamentales - apprenez-les une fois, appliquez-les partout
  • Les load balancers, caches et message queues résolvent chacun des défis de scaling distincts
  • Le choix de database (SQL vs NoSQL) dépend de la forme des données, des besoins en consistency et des patterns d'accès
  • Le CAP theorem impose des compromis - sachez quel côté votre système doit favoriser
  • Suivez le framework structuré : requirements → API → data → architecture → deep dives

Prochaine leçon : nous appliquerons ces fondamentaux pour concevoir un URL shortener à partir de zéro.