Sync vs Async : Bloquer ou Déléguer ?
Dans un système distribué, la façon dont vos services se parlent définit la performance perçue par l'utilisateur. Faut-il les faire attendre au téléphone (Synchrone ) ou leur envoyer un SMS (Asynchrone) pour qu'ils vivent leur vie ?
Le Duel : Appel vs Texto
Vous appelez un ami pour une info. Tant qu'il ne répond pas, vous restez l'oreille collée au combiné. Vous ne pouvez rien faire d'autre.
Impact : Le temps s'arrête pour l'appelant.
- Bloquant : Le client attend la réponse (Request/Response).
- Simple à comprendre et à débugger.
Vous envoyez un message. Vous posez votre téléphone et allez faire du sport. La réponse arrivera quand elle arrivera (Fire & Forget).
Impact : Vous êtes libéré immédiatement.
- Non-bloquant : Le client continue sa vie immédiatement.
- Idéal pour les tâches longues (envoi d'emails, génération PDF).
Visualisation des Flux

La Solution Magique : Queues & Workers
Le Pattern "Producer / Consumer"
Comment faire de l'asynchrone proprement ? On ne laisse pas le serveur web faire le travail lourd. On utilise un intermédiaire.
Quand choisir quoi ?
| Utiliser SYNCHRONE quand... | Utiliser ASYNCHRONE quand... |
|---|---|
✔ Le client a besoin de la réponse tout de suite (ex: Login, Recherche Google). | ✔ L'action est lente (> 200ms) ou lourde (Traitement vidéo, Analytics). |
✔ C'est une opération de Lecture (GET) simple. | ✔ Vous voulez lisser un pic de trafic (Load Leveling) pour ne pas crasher votre DB. |
✔ La logique transactionnelle est complexe (si étape 2 échoue, étape 1 doit annuler). | ✔ Vous n'avez pas besoin de réponse immédiate (Fire and Forget). |
En Entretien (System Design)
Ne dites pas juste "j'utilise une queue". Expliquez pourquoi.
Flash Quiz
À toi de jouer
Mission : Architecture d'envoi de Newsletter
Vous devez envoyer 1 million d'emails. Si vous faites une boucle `for` en synchrone, votre serveur va timeout après 30 secondes.
Ta mission : Dessine un flux où :
1. L'admin clique sur "Envoyer".
2. L'API répond "OK" en 10ms.
3. Un système de Queue + Workers traite l'envoi en arrière-plan.
Pour les curieux (Bonus)
Solution : Vous donnez une URL de "Callback" (Webhook). Quand le Worker a fini, il appelle cette URL pour vous dire "C'est prêt !". C'est comme dire au livreur : "Sonne chez moi quand tu arrives".
"Utilisateur inscrit" → Queue → Worker "Email Bienvenue" + Worker "Analytics" + Worker "CRM".
C'est la base des architectures modernes "Reactive" et Serverless (AWS Lambda).