Builders Academy
Microservices — Architecture Distribuée
1 of 1

Chapitre 1 · Leçon 1

Décomposer en services

Bounded Contexts → Services

Section 1

Définir les frontières d'un service

Step 1

Le monolithe d'abord

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

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

Communication synchrone vs asynchrone

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.

snippet.typescript

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};

Topics and skills covered

  • Microservices
  • Service Design
  • Bounded Context
  • API Gateway