
Monolithe ou Microservices : Que choisir pour votre prochain projet ?
L'un des premiers choix d'architecture auquel sont confrontées les équipes d'ingénierie est de décider comment structurer leur backend. Faut-il construire une seule grosse application (le Monolithe) ou diviser l'application en une myriade de petits services indépendants (les Microservices) ?
Voici une représentation visuelle pour bien visualiser la différence :

1. L'Architecture Monolithique
Un monolithe regroupe toutes les fonctionnalités de l'application dans une seule et même base de code.
Exemple concret dans .NET : Vous avez une unique solution (fichier .sln) qui contient l'API, le site web frontend, la logique métier pour les Utilisateurs, la logique pour les Commandes, et l'accès à une seule grande base de données.
Les Avantages du Monolithe :
- Facilité de développement initial : Pas besoin de gérer des communications complexes sur le réseau.
- Déploiement simple : Vous uploadez un seul dossier ou une seule image Docker sur votre serveur.
- Transactions simples : Si une commande échoue, vous pouvez annuler toute la transaction en base de données de manière très sûre.
Ses Inconvénients :
- Plus la base de code grandit, plus le démarrage local et la compilation deviennent lents (le fameux couplage spaghetti).
- Tout doit utiliser la même stack technologique (par exemple, si le projet est en C# 8, vous ne pouvez pas facilement migrer juste le module "Notification" vers un langage plus adapté ou vers C# 12 sans migrer tout le reste).
2. Les Microservices
À l'inverse, l'approche microservices divise l'application en de multiples petits services autonomes. Chaque service possède sa propre base de données et communique avec les autres via le réseau (API REST, gRPC, ou Messaging asynchrone type RabbitMQ).
Exemple concret : UserService.API, OrderService.API et NotificationService.API sont des projets distincts avec des bases de données distinctes.
Les Avantages des Microservices :
- Délégation des responsabilités : L'équipe "Commandes" peut déployer son API sans affecter l'équipe "Utilisateurs".
- Scalabilité ciblée : Si le service de Recherche de produits est soudainement assailli de requêtes pour le Black Friday, vous pouvez lui allouer 10 serveurs supplémentaires en laissant le service Utilisateur tourner sur un seul.
Ses Inconvénients :
- La Complexité : Réaliser une requête qui implique 4 services différents nécessite de gérer les pannes réseau, les délais et les "demi-succès" (ex: la commande est créée, mais la notification échoue).
- L'Observabilité requise : Impossible de débugger correctement sans des outils de trace distribuée comme Jaeger ou OpenTelemetry.
Conclusion
Le conseil général dans l'industrie, comme le rappelle souvent Milan Jovanović, est de commencer par un Monolithe Modulaire. Concevez votre application en seul bloc, mais avec des barrières très strictes entre vos modules (Bounded Contexts de l'approche DDD). Si le projet réussit et grandit, ces modules seront extrêmement faciles à extraire en véritables microservices.
S'abonner à la newsletter
Recevez un e-mail à chaque fois que je publie un nouvel article sur l'ingénierie logicielle, l'architecture et .NET. Jamais de spam.