Par Andrea Zerial Mind7 Consulting
Quand on met en œuvre un Système d’Information, l’architecture IT joue un rôle crucial et depuis plusieurs années, l’architecture modulaire informatique a pris de l’importance et progressivement remplacé les architectures monolithiques.
Avant tout, d’où vient-on avant l’architecture modulaire ?
L’architecture monolithique est, comme son nom l’indique, un système informatique où toutes les fonctions et les composants sont regroupés en un seul bloc. Ainsi, toutes les fonctionnalités, tous les « bouts de code », toutes les applications sont exécutées sur une seule et même plateforme. Sans aucune séparation physique ou logique.
L’image du monolithe, c’est celle de 2001, l’odyssée de l’espace (oui, je suis un peu cinéphile sur les bords…). Une belle révolution, mais en même temps, on ne sait pas trop par quel bout le prendre.
L’approche monolithique peut en effet rapidement devenir complexe et difficile à maintenir. En particulier sur des applications « touffues » ou qui couvrent un périmètre fonctionnel important. En effet, puisque l’application est d’un seul bloc, cela signifie qu’en cas de mise à jour ou de modification, il faut intervenir sur toute l’application à la fois. Cela pose donc des problèmes de disponibilité, de performance et de dépendance entre les différentes fonctionnalités ou éléments techniques.
L’architecture modulaire informatique a ses propres avantages
Les architectures modulaires sont une alternative plus récente aux monolithes. Elles sont construites en séparant les fonctions et les composants en modules distincts. Chaque module est plus ou moins autonome, il peut fonctionner indépendamment des autres composants. Il peut être hébergé sur une infrastructure dédiée ou distincte et être déployé (et donc maintenu) de façon complètement distincte.
Cela présente plusieurs avantages :
Le déploiement et la résilience
Avec des modules séparés, les mises à jour peuvent être effectuées de manière indépendante. Ce qui réduit ainsi les risques de perturbation de l’ensemble du système. En cas de pépin, c’est une fonctionnalité qui est bloquée et non pas toute l’application.
L’évolutivité
L’architecture modulaire est plus facile à adapter en fonction des besoins des utilisateurs. En effet, les équipes qui interviennent sur le code ont à connaître ou étudier uniquement le code du composant technique à modifier. Les dépendances sont certes bien présentes, mais plus claires à identifier que quand on a un seul gros bloc de lignes de code. La modularité permet au final de réduire les cycles de livraison.
La réutilisabilité
Certains modules peuvent être réutilisés dans différentes applications, ce qui permet de réduire les coûts de développement. Bien entendu, cela ne veut pas dire que dans un « monolithe », les fonctionnalités sont systématiquement dupliquées. Cependant, l’architecture modulaire informatique incite à penser de façon plus générique et donc à faciliter la réutilisation.
Sur ce dernier point par exemple, un client m’évoquait récemment son regret de ne pas pousser plus loin la généralisation. Ainsi, il était question de gérer un système de taxes, et même si le module avait été conçu de façon générique, il n’avait pas été pensé pour gérer un montant au sens large. Ce qui aurait permis par exemple de traiter d’éventuelles demandes futures.
Quelques exemples
Il existe plusieurs exemples d’architectures modulaires dans l’environnement IT.
Architecture SOA
L’une des plus populaires est historiquement l’architecture SOA (Service-Oriented Architecture). Cette architecture consiste à diviser les fonctions de l’application en services distincts et à les intégrer via des interfaces standardisées (HTTP ou SOAP). Ces services sont en général gérés via des registres et des annuaires qui permettent aux utilisateurs de découvrir et d’utiliser des services disponibles dans le système. Cela simplifie notamment la conception et la maintenance des applications.
Architecture microservices
L’architecture microservices est plus récente. Elle consiste à diviser une application en de multiples petits services indépendants. Comme toute architecture modulaire informatique, les services peuvent être déployés et mis à jour individuellement. Facilitant ainsi la maintenance et la résolution des problèmes. Chaque service est conçu pour réaliser une tâche spécifique et communique avec les autres services via des interfaces API standardisées.
Les services
Les services sont souvent développés dans des langages de programmation différents et utilisent des technologies de stockage de données adaptées à leurs besoins. La complexité réside alors dans le fait de choisir le bon langage et la bonne « stack technique » en fonction de ce que le microservice doit faire. Cela apporte selon moi une complexité différente au SI. Si on prend systématiquement le meilleur choix technique, on arrive rapidement à un patchwork de langages et de composants. À l’inverse, si on se limite trop, pour des questions de cohérence et de disponibilité de ressources, on peut apporter une complexité inutile à ces microservices, faute d’avoir utilisé le bon « outil ».
Le serverless
Enfin, on peut selon moi aussi citer dans les exemples d’architectures modulaires le concept du « serverless). Il s’agit pour l’équipe de développement de se concentrer sur le code de l’application et de s’abstraire le plus possible des aspects d’infrastructure. En effet, on utilise un fournisseur de cloud qui gère les serveurs et les ressources sous-jacentes, telles que le stockage et la mise en réseau, en facturant uniquement les ressources utilisées par l’application. Cette approche tend à faciliter l’adoption d’architectures plus modulaires puisque toute la complexité de l’infrastructure (ou presque) est gommée par le fournisseur de cloud. Or, il s’agissait là le principal avantage de l’architecture monolithique classique : avoir un seul bloc à déployer plutôt qu’une multitude, et là, ce n’est même plus un problème !
L’adoption d’une architecture modulaire dans l’environnement IT offre de nombreux avantages par rapport aux architectures monolithiques. Les architectures modulaires sont plus flexibles, évolutives et résilientes, ce qui permet de gérer plus efficacement les systèmes informatiques. Les exemples d’architectures modulaires telles que les microservices et l’architecture SOA montrent comment ces approches peuvent être utilisées avec succès pour améliorer les performances et la résilience des systèmes d’information.