Qu’est-ce qu’une application monolithique ?

Une application monolithique combine les couches d’interface utilisateur et d’accès aux données de plusieurs fonctionnalités au sein d’une seule application. En général, une application monolithique repose sur une base de code unique, modifiée par plusieurs équipes d’une même organisation, et est déployée comme une seule unité regroupant toutes les fonctionnalités dont ces équipes assurent la maintenance.

Les applications monolithiques sont souvent plus faciles à développer et à déployer grâce à l’intégration étroite de leurs composants. Toutefois, à mesure que le périmètre de l’application et ses exigences en matière de performances augmentent, un monolithe peut devenir difficile à maintenir et à faire évoluer.

Exemples d’architectures d’applications monolithiques

Les systèmes monolithiques peuvent convenir aux applications de petite taille et peu complexes qui n’ont pas besoin d’évoluer rapidement ni de faire l’objet d’une maintenance régulière. Voici quelques exemples d’applications qui reposent généralement sur une architecture monolithique (bien que leurs fonctionnalités les plus récentes puissent s’appuyer sur une infrastructure davantage conteneurisée).

  • Plateformes d’e-commerce – Les applications monolithiques sont courantes dans l’e-commerce, car une fois l’infrastructure mise en place (création de la boutique en ligne, traitement des commandes, traitement des paiements et service client), l’architecture ne nécessite que très peu de mises à jour.
  • Systèmes de gestion de contenu (CMS) – Cette entrée de glossaire a elle-même été rendue possible par une application monolithique (WordPress). Une fois déployées, les applications CMS intègrent toutes les fonctionnalités nécessaires à la gestion de contenu sous forme de pages web.
  • Systèmes bancaires – De nombreux systèmes financiers sont conçus sous forme d’applications monolithiques, car le nombre limité de points d’entrée renforce leur sécurité. De plus, une fois déployée, la base de code contient toutes les fonctionnalités qu’un utilisateur attend d’un service bancaire en ligne : gestion des transactions financières, traitement des paiements et suivi.

Avantages d’une architecture monolithique

Bien que certains aspects des architectures monolithiques soient devenus obsolètes, celles-ci présentent encore de nombreux cas d’usage et avantages.

Parmi les avantages des architectures monolithiques, on peut citer :

  • Simplicité – L’architecture centralisée facilite le développement, le déploiement et la maintenance des monolithes par rapport à des architectures plus complexes telles que les architectures de microservices.
  • Tests plus rapides – En intégrant chaque composant dans un seul programme, une application monolithique peut rapidement être testée dans son ensemble. Contrairement aux architectures composées de plusieurs composants plus petits (par exemple, les microservices), aucun test supplémentaire n’est nécessaire pour les protocoles de communication complexes ou les multiples dépôts de code.
  • Sécurité – Avec moins de points d’entrée pour les acteurs malveillants, les applications monolithiques sont généralement plus faciles à sécuriser. Il est également plus facile d’appliquer des protocoles de sécurité à l’ensemble d’une seule application que de gérer plusieurs configurations de sécurité.
  • Coût – Déployées en tant qu’unité unique, les architectures monolithiques éliminent les coûts supplémentaires liés au déploiement et à la sécurisation de protocoles de communication additionnels, à la mise en place d’une infrastructure d’interconnexion plus importante et au recrutement de collaborateurs possédant des compétences et une formation plus spécialisées.

Inconvénients d’une architecture monolithique

Si la nature unifiée des architectures monolithiques présente des avantages, elle peut également entraîner des problèmes.

Voici quelques-uns des inconvénients des architectures monolithiques :

  • Complexité croissante – Au fil du temps, la croissance d’une application et l’ajout de fonctionnalités peuvent rendre une architecture monolithique plus volumineuse et plus complexe. Cette expansion augmente le risque qu’une mise à jour compromette l’unique base de code qui assure le bon fonctionnement de l’ensemble du programme.
  • Manque d’évolutivité – Lorsqu’une fonctionnalité ou une partie de l’application doit être mise à l’échelle horizontalement, l’ensemble de l’application (y compris les sous-systèmes qui ne nécessitent pas de ressources supplémentaires) doit l’être également. Cela peut ralentir la mise à l’échelle, car les déploiements prennent plus de temps, mais aussi augmenter les coûts, car chaque instance nécessite davantage de ressources matérielles pour fonctionner que dans une architecture de microservices.
  • Résilience – Dans une architecture monolithique, tous les composants de l’application sont étroitement liés et s’exécutent à partir d’une base de code centralisée. Par conséquent, si l’un d’eux tombe en panne, l’ensemble de l’application peut devenir indisponible.
  • Redéploiement complet – Avec une base de code unique représentant l’ensemble de l’application, une architecture monolithique nécessite un redéploiement complet dès qu’un seul composant est modifié ou mis à jour.
  • Pile technologique – Comme les développeurs doivent s’assurer que les outils ou langages qu’ils utilisent s’intègrent à l’architecture monolithique, leur choix est limité. En outre, de nombreuses applications monolithiques sont conçues d’une manière qui n’est pas entièrement compatible avec des technologies plus récentes et plus efficaces, telles que le cloud computing et la conteneurisation.
  • Développement plus lent – Lorsque plusieurs équipes de développement travaillent sur une même base de code volumineuse, une vigilance extrême est nécessaire pour garantir que les interfaces et les limites des domaines sont respectées et préservées. Le code peut parfois introduire un couplage complexe, créant des dépendances entre les équipes qui ralentissent le développement de nouvelles fonctionnalités ou la correction de problèmes critiques.

Qu’est-ce qu’une architecture de microservices ?

À l’inverse de l’architecture monolithique, il existe l’architecture de microservices . Les microservices constituent une approche de l’architecture logicielle qui consiste à créer une application vaste et complexe à partir de petits composants. Chacun de ces composants peut remplir une fonction unique (par exemple, l’authentification, l’envoi de notifications ou le traitement des paiements) ou être regroupé avec d’autres au sein d’un monolithe. Le terme « microservices » (ou simplement « services ») désigne également ces petits composants.

Alors que les applications monolithiques sont fortement couplées (c’est-à-dire que leurs composants sont interconnectés), une application basée sur des microservices est distribuée (c’est-à-dire que ses composants peuvent fonctionner indépendamment). À mesure que les applications gagnent en taille et en complexité, de nombreuses organisations envisagent soit d’abandonner les architectures monolithiques, soit de concevoir leurs nouvelles applications selon une architecture de microservices.

NGINX est fier de proposer les ressources pédagogiques gratuites suivantes aux personnes qui souhaitent en savoir plus sur les architectures monolithiques et de microservices