Monolithe modulaire > micro-services

Qu'est-ce qu'un monolithe modulaire ?
Imaginez une maison où chaque pièce à une fonction précise. La cuisine est l'endroit où vous cuisinez, le salon est l'endroit où vous vous détendez et la chambre est l'endroit où vous dormez.
Dans le développement logiciel, un monolithe modulaire ressemble à cette maison. Il s'agit d'une application qui regroupe toutes les fonctions en modules au sein d'une unité. Chaque module a des responsabilités spécifiques et travaille de manière indépendante. Prenons un exemple d'application de vente en ligne. Un monolithe modulaire a des modules pour gérer différentes parties de l'application.
Un pour la gestion des produits, un autre pour les commandes, un autre pour les paiements, etc.
Chaque module ressemble à une pièce de votre maison. Par exemple, le module Product Management gère l'ajout, la modification et la suppression de produits dans la base de données. Le module de paiement gère les transactions financières.
Une particularité des monolithes modulaires est que les modules peuvent directement communiquer entre eux au sein d'une application sans utiliser des mécanismes de communication complexes. Ce qui facilite le développement et la maintenance des applications.
Comment se compare-t-il aux micro-services ?
Parlons maintenant des micro-services. Au lieu d'une maison, imaginez une série de maisons autonomes. Chaque maison est un micro-service indépendant qui peut avoir sa propre cuisine, son salon, sa chambre, etc. Chaque micro-service est responsable d'une fonction spécifique de l'application et peut communiquer entre eux à l'aide de mécanismes de communication inter-processus ou réseau.
Contrairement aux monolithes modulaires, où tous les modules fonctionnent dans la même application, les micro-services sont des unités autonomes qui peuvent être développées, déployées et scale indépendamment. Chaque micro-service possède sa propre base de code et son propre storage de données et peut-être développé dans un langage de programmation adapté à son context.
L'architecture des micro-services offre une plus grande flexibilité et évolutivité. Vous pouvez scale uniquement les micro-services dont vous avez besoin, rajouter des micro-services individuellement et gérer chaque service indépendamment des pannes et des mises à jour.
Alors pourquoi le monolithe modulaire est-il une meilleure approche pour votre V1 que les micro-services ?
Moins de complexité
Le monolithe modulaire est une approche architecturale plus simple que les micro-services. Il y a moins de codes à écrire, moins de services à gérer et moins de composants à orchestrer. Cela rend l'ensemble du processus de développement et de déploiement plus simple et plus rapide.
Facilité de déploiement
Le déploiement d'un monolithe modulaire est plus facile que le déploiement de micro-services. Avec un monolithe modulaire, déployez seulement une seule application. Avec des micro-services, vous devez déployer chaque service individuellement.
Ce dernier point peut être un avantage pour les micro-services, mais pas pour votre V1
Communication interne plus rapide
Dans un monolithe de modulaire, les différents modules communiquent via des appels de fonction internes. Ce qui est plus rapide que la communication inter-services via des mécanismes de communication inter-processus ou réseau, tels que les API REST, les notifications asynchrones, etc. La latence du réseau peut être un facteur limitant dans l'architecture des micro-services.
Ce qui réduit également les coûts réseaux et la bande passante utilisée.
Meilleure gestion de la base de code
Les micro-services ont généralement des problèmes de synchronisation entre les différentes versions de chaque service. Les monolithes modulaires facilitent grandement la gestion de votre base de code puisque vous n'avez qu'une seule version de votre application.
Cela facilite également le maintien de la cohérence du code. Tous les modules sont regroupés au sein d'une même application, ce qui facilite la mise en œuvre de pratiques cohérentes et de conventions communes. Ce qui donne aux développeurs une vue globale de l'application, et donc, facilite la refactorisation et la réutilisation du code.
Disclaimer ![]()
Que vous choisissiez de faire un monolithe modulaire, ou d'utiliser des micro-services pour votre prochain projet, pensez modularité !
Il y a beaucoup trop de micro-services qui sont en vérité un amas de monolithes NON modulaires ce qui signifie que vous avez tous les désavantages des micro-services (coût, complexité, non-cohérence, etc) et en plus, vous avez un code couplé à l'intérieur de vos services.
Je n'ai rien contre les micro-services, au contraire, je pense qu'ils amènent une autre sorte de modularité, mais, vous devriez toujours commencer par un monolithe modulaire. Ça vous obligera à avoir une base de code découplée ce qui permet d'analyser les points de douleur.
Par exemple, le langage non adapté à un module (ex : machine learning), ou encore des goulots d'étranglement, endpoint qui utilise une grosse partie de ressources de votre server qui pourrait être externalisé.
L'idée est vraiment de faire émerger les problématiques et non d'essayer de les anticiper. Vous devez prendre autant de feedback de votre code que le feedback que vous demandez de vos utilisateurs. Pour ainsi, créer le meilleur produit possible
Faites des monolithes modulaires et arrêtez les micro-services, si vous désapprouvez, change my mind !
Vous pouvez également voir l'avis d'Amazon avec Prime Vidéo qui sont revenus des micro-services pour économiser 90% sur leurs coûts !