Chapitre 1 · Leçon 1
Bounded Contexts → Services
Section 1
Step 1
Ne commence jamais avec des microservices. Commence avec un monolithe bien structuré (Clean Architecture + DDD). Extrais des services quand tu as un besoin réel : scalabilité indépendante, déploiement autonome, équipes séparées.
snippet.typescript
1/*
2 * Les 4 raisons valides d'extraire un microservice
3 *
4 * 1. SCALABILITÉ : Le service de vidéo consomme 10x plus de CPU que les autres
5 * → Extraire VideoService pour le scaler indépendamment
6 *
7 * 2. DÉPLOIEMENT : Les mises à jour du service de paiement nécessitent
8 * un déploiement de toute l'app → Extraire PaymentService
9 *
10 * 3. ÉQUIPES : Équipe A travaille sur auth, équipe B sur contenu
11 * → Extraire pour éviter les conflits de merge
12 *
13 * 4. TECH STACK : Le service de ML a besoin de Python, le reste est Node
14 * → Extraire MLService en Python
15 *
16 * Mauvaises raisons :
17 * ❌ "Les microservices c'est moderne"
18 * ❌ "Pour un projet de 2 devs"
19 * ❌ "Pour s'entraîner" (la complexité opérationnelle est réelle)
20 */
21
22// Exemple de décomposition d'une plateforme éducative
23const services = {
24 AuthService: "Inscription, login, sessions",
25 UserService: "Profils, préférences, progression",
26 ContentService: "Tutoriels, chapitres, leçons (lecture seule)",
27 ContentManagement: "CRUD tutoriels (admin seulement)",
28 NotificationService:"Emails, push notifications",
29 SearchService: "ElasticSearch, indexation, recherche",
30 AnalyticsService: "Events, métriques, tableaux de bord",
31};Step 2
Deux modes de communication : synchrone (REST, gRPC — réponse immédiate) et asynchrone (Kafka, RabbitMQ — via messages). La règle : préfère l'asynchrone pour les effets de bord.