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 dans une seule application. En général, une application monolithique existe sous la forme d'une base de code unique modifiée par plusieurs équipes au sein d'une organisation et déployée en tant qu'unité unique contenant toutes les fonctionnalités gérées par ces équipes.

Les applications monolithiques peuvent souvent être plus faciles à développer et à déployer grâce à l’intégration étroite de leurs composants. Cependant, à mesure que la portée de l’application et les exigences de performances augmentent, un monolithe peut devenir difficile à maintenir et à faire évoluer.

Exemples d'architectures d'application monolithiques

Les systèmes monolithiques peuvent convenir aux applications plus petites et moins complexes qui n'ont pas besoin d'être rapidement mises à l'échelle ou d'être régulièrement entretenues. Vous trouverez ci-dessous quelques exemples d’applications qui ont généralement des fondations monolithiques (bien que leurs nouvelles fonctionnalités puissent être basées sur une infrastructure plus conteneurisée ).

  • Plateformes de commerce électronique – Les applications monolithiques sont couramment observées dans le commerce électronique, car une fois l’infrastructure mise en place (création de la boutique en ligne, traitement des commandes, traitement des paiements et service client), très peu de mises à jour de l’architecture sont requises.
  • Systèmes de gestion de contenu (CMS) – Cette entrée de glossaire a été rendue possible par une application monolithique (WordPress). Les applications CMS, une fois 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 construits comme des applications monolithiques car les points d’entrée sont limités, ce qui les rend plus sûrs. De plus, 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, elles présentent encore de nombreux objectifs et attributs positifs.

Certains avantages des monolithes incluent :

  • Simplicité – L’architecture centralisée rend les monolithes plus faciles à développer, à déployer et à entretenir par rapport aux 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 être rapidement testée 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 de référentiels de code multiples.
  • Sécurité – Avec moins de points d’entrée pour les mauvais acteurs, les monolithes sont généralement plus faciles à sécuriser. Il est également plus facile d’appliquer des protocoles de sécurité sur une seule application plutôt que de gérer plusieurs configurations de sécurité.
  • Coût – Déployés en tant qu’unité unique, les monolithes éliminent les coûts supplémentaires associés au déploiement et à la sécurisation de protocoles de communication supplémentaires, à la création d’une infrastructure plus connective et à l’embauche d’employés dotés de compétences et de formations plus spécialisées.
Inconvénients d'une architecture monolithique

Si la nature singulière des monolithes présente des avantages, elle peut également entraîner des problèmes.

Certains inconvénients des monolithes incluent :

  • Augmentation de la complexité – Au fil du temps, la croissance d'une application et les fonctionnalités ajoutées peuvent entraîner une architecture monolithique à devenir plus grande et plus complexe. Cette prolifération augmente le risque qu'une mise à jour puisse compromettre la base de code unique qui assure le bon fonctionnement de l'ensemble du programme.
  • Manque d’évolutivité – Lorsqu’une fonctionnalité ou un domaine de l’application doit être mis à l’échelle 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. Cela peut entraîner à la fois une lenteur dans la mise à l'échelle puisque les déploiements prennent plus de temps, ainsi qu'une augmentation des coûts puisque chaque instance aura des exigences matérielles plus importantes pour fonctionner par rapport aux microservices.
  • Résilience – Dans une architecture monolithique, tous les composants de l’application sont étroitement liés et exécutés à partir d’une base de code centrale. Par conséquent, si l’une d’entre elles échoue, l’ensemble de l’application pourrait tomber en panne.
  • Redéploiement complet – Avec une base de code singulière 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 – Étant donné que les développeurs doivent s’assurer que tous les outils ou langages qu’ils utilisent s’adapteront au monolithe, le choix est limité. De plus, de nombreuses applications monolithiques sont écrites d’une manière qui n’est pas totalement compatible avec les technologies plus récentes et plus efficaces comme le cloud computing et la conteneurisation.
  • Développement plus lent – Lorsque plusieurs équipes de développement travaillent sur une grande base de code, une attention extrême est requise pour garantir que les interfaces et les limites du domaine sont respectées et maintenues. Parfois, le code peut introduire un couplage complexe, ce qui fait que les dépendances entre équipes ralentissent le développement de nouvelles fonctionnalités ou la correction de problèmes critiques.
Qu'est-ce qu'une architecture de microservices ?

Contrairement à l'architecture monolithique, il existe une architecture de microservices . Les microservices sont une approche de l’architecture logicielle qui permet de créer une application volumineuse et complexe à partir de petits composants. Ces composants peuvent chacun exécuter une fonction unique (par exemple, l'authentification, la notification ou le traitement des paiements) ou fonctionner comme des groupes au sein d'un monolithe. « Microservices » (ou simplement « services ») est également le terme désignant 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 de microservices est distribuée (ce qui signifie que leurs composants peuvent agir indépendamment). À mesure que les applications deviennent plus grandes et plus complexes, de nombreuses organisations envisagent de migrer des monolithes ou d'intégrer de nouvelles applications dans un format de microservices.

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