Qu’est-ce qu’une application monolithique ?

Une application monolithique combine l’interface utilisateur et les couches d’accès aux données pour plusieurs fonctionnalités en une seule application. Généralement, une application monolithique existe sous la forme d’une base de code unique qui est modifiée par plusieurs équipes au sein d’une organisation, et est déployée en tant qu’unité unique contenant toutes les fonctionnalités maintenues par ces équipes.

Les applications monolithiques sont souvent plus faciles à développer et à déployer grâce à l’intégration étroite de leurs composants. Cependant, lorsque la portée de l’application et les exigences de performance augmentent, une application monolithique peut devenir difficile à maintenir et à faire évoluer.

Exemples d’architectures d’applications monolithiques

Les systèmes monolithiques peuvent convenir à des applications plus petites et moins complexes qui n’ont pas besoin d’évoluer rapidement ou d’être régulièrement maintenues. Voici quelques exemples d’applications qui reposent généralement sur des bases monolithiques (bien que leurs nouvelles fonctionnalités puissent être basées sur une infrastructure plus conteneurisée).

  • Plateformes d’e-commerce - Les applications monolithiques sont couramment utilisées dans le domaine de l’e-commerce, car une fois l’infrastructure mise en place (construction de la boutique en ligne, traitement des commandes, traitement des paiements et service à la clientèle), très peu de mises à jour de l’architecture sont nécessaires.
  • Systèmes de gestion de contenu (CMS) - Cette entrée du glossaire a été rendue possible par une application monolithique (WordPress). Les applications CMS, lorsqu’elles sont déployées, contiennent 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 comme des applications monolithiques parce que les points d’entrée sont limités, ce qui les rend plus sûrs. En outre, lors du déploiement, la base de code contient toutes les fonctionnalités qu’un consommateur attend d’une expérience 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, il existe encore de nombreux objectifs et attributs positifs.

Les monolithes présentent les avantages suivants :

  • 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 en microservices.
  • Tests plus rapides - En intégrant chaque composant dans un seul programme, il est plus rapide de tester une application monolithique dans son ensemble. Contrairement aux architectures composées de plusieurs composants plus petits (par exemple, les microservices), il n’y a pas de tests supplémentaires pour les protocoles de communication complexes ni pour les dépôts de code multiples.
  • Sécurité - Avec moins de points d’entrée pour les acteurs malveillants, les monolithes sont généralement plus faciles à sécuriser. Il est également plus facile d’appliquer des protocoles de sécurité à une seule application que de gérer de multiples configurations de sécurité.
  • Coût - Déployés en tant qu’unité unique, les monolithes éliminent les coûts supplémentaires liés au déploiement et à la sécurisation de protocoles de communication additionnels, à la construction d’une infrastructure de connexion plus importante et à l’embauche d’employés possédant des compétences et une formation plus spécialisées.
Inconvénients d’une architecture monolithique

Si la nature singulière des monolithes a ses avantages, elle peut aussi poser des problèmes.

Les monolithes présentent certains inconvénients :

  • Complexité croissante - Au fil du temps, la croissance d’une application et l’ajout de fonctionnalités peuvent entraîner l’agrandissement et la complexification d’une architecture monolithique, ce qui accroît le risque qu’une mise à jour compromette la base de code unique qui assure le bon fonctionnement de l’ensemble du programme.
  • Manque d’évolutivité - Lorsqu’une fonction ou un domaine de l’application doit évoluer horizontalement, l’ensemble de la grande application (y compris les sous-systèmes qui ne nécessitent pas de ressources supplémentaires) doit être mis à l’échelle, ce qui peut entraîner à la fois une lenteur dans l’évolution, car les déploiements prennent plus de temps, et une augmentation des coûts, car chaque instance aura besoin d’un matériel plus important pour fonctionner, par rapport à des microservices.
  • Résilience - Dans une architecture monolithique, tous les composants de l’application sont étroitement liés et fonctionnent à partir d’une base de code centrale. Par conséquent, si l’un d’entre eux tombe en panne, c’est l’ensemble de l’application qui risque de s’effondrer.
  • Redéploiement complet - Avec une base de code unique représentant l’ensemble de l’application, un monolithe nécessite un redéploiement complet chaque fois qu’un seul composant est modifié ou mis à jour.
  • Pile technologique - Comme les développeurs doivent s’assurer que les outils ou les langages qu’ils utilisent s’intègrent au monolithe, le choix est restreint. En outre, de nombreuses applications monolithiques sont écrites d’une manière qui n’est pas totalement compatible avec des technologies plus récentes et plus efficaces telles que l’informatique en cloud et la conteneurisation.
  • Ralentissement du développement - Lorsque plusieurs équipes de développement travaillent sur une base de code importante, il faut veiller à ce que les interfaces et les limites du domaine soient respectées et maintenues. Parfois, le code peut introduire un couplage complexe, ce qui fait que les dépendances entre les équipes ralentissent le développement de nouvelles fonctionnalités ou la résolution de problèmes critiques.
Qu’est-ce qu’une architecture en microservices ?

À l’architecture monolithique s’oppose l’architecture en microservices. Les microservices consistent en une approche de l’architecture logicielle qui permet de construire une application complexe de grande envergure à partir de petits composants. Ces composants peuvent remplir chacun une fonction unique (par exemple, l’authentification, la notification ou le traitement des paiements) ou fonctionner comme des ensembles au sein d’un monolithe. « Microservices » (ou simplement « services ») est également le terme utilisé pour désigner les petits composants eux-mêmes.

Alors que les applications monolithiques sont étroitement couplées (ce qui signifie que leurs composants sont interconnectés), une application microservices est distribuée (ce qui signifie que ses composants peuvent agir de manière indépendante). Comme les applications deviennent plus importantes et plus complexes, de nombreuses organisations envisagent soit d’abandonner les applications monolithiques, soit d’incorporer de nouvelles applications dans un format microservices.

NGINX est fier d’offrir les ressources éducatives gratuites suivantes pour ceux qui explorent les monolithiques et les microservices