L'architecture en microservices, pour un développement rapide et fluide

Face à la nécessité d'être agile tout en composant avec la complexité croissante des applications, les architectures logicielles à base de microservices montent en puissance.

Dans le domaine informatique, Marc Andreessen l’avait prédit en 2011 lors de la publication de son très célèbre article du Wall Street Journal  "Pourquoi le logiciel dévore le monde" -  "Nous sommes à l’aube d’un bouleversement massif et vaste, dans lequel les sociétés logicielles sont destinées à prendre le contrôle de larges pans de l’économie".

Pour espérer prospérer, l’innovation doit être au cœur des entreprises, quel que soit le secteur. Et en matière d’IT, les équipes informatiques font encore face à des systèmes historiques lourds, souvent considérés comme complexes et manquant cruellement d’agilité. Confrontées à ces problématiques, les entreprises n’ont d’autres choix que de se tourner vers de nouvelles infrastructures.

Pour relever ces défis liés à l’agilité des services, le coût de l’infrastructure technique, du développement et la maintenance, de grands acteurs tels Amazon, Google, Facebook, Twitter, Netflix, se tournent désormais vers des architectures basées sur les microservices, plus adaptés pour les applications complexes, et utiles à long terme.

L’avantage des microservices est – paradoxalement - leur périmètre fonctionnel réduit : ils peuvent ainsi être testés de manière exhaustive et automatique de manière efficace, sans commune mesure avec ce qui est possible pour une application monolithique énorme. Également, ils peuvent être déployés de manière indépendante. Le facteur psychologique de crainte associé à leurs déploiements se réduit alors drastiquement de même que la procrastination qui en résulte : en mettant à jour un petit microservice, on ne risque que de petits dommages ! Les discussions sans fin autour du risque associé aux bugs résiduels sont alors quasi-inexistantes, et encore diminuées par l’utilisation des meilleures techniques DevOps (déploiements Canari ou A/B). Déployer de nouvelles versions devient alors BAU ("Business As Usual") et surtout vecteur de succès pour l’entreprise !

Fondées sur les succès indéniables de ces leaders mondiaux, les solutions de modernisation du mainframe incitent à une transformation incrémentale de l’architecture des applications historiques vers une nuée de microservices indépendants selon l’approche suivante.

  • Les composants de l’application sont tout d’abord ré-hébergés en l’état (= dans leur forme binaire mainframe initiale) sur un mainframe piloté par logiciel (SDM – Software Defined Mainframe), lui-même sur Linux. Cette étape est accomplie sans risques majeurs grâce aux avantages de l’approche binaire.
  • Ces composant sont ensuite analysés par des outils permettant d’obtenir un graphe exhaustif des dépendances appelant-appelé entre ceux-ci.
  • Un sous-arbre est extrait de ce graphe pour chaque programme (au sens large), point d’entrée d’un traitement batch ou transactionnel.
  • L’ensemble des nœuds de cet arbre, soit tous les programmes potentiellement appelés durant le traitement, peuvent alors être packagés dans leur forme binaire mainframe originale avec les composants idoines du SDM pour constituer une image de container Docker qui embarque tous les composants du microservice ainsi défini. Cette image Docker peut alors être exécutée sur tout cluster Kubernetes tel que défini par le client.

Il est important de noter que cette restructuration peut être réalisée sans changement ni recompilation des programmes mainframe. Le monolithe historique est ainsi remplacé par une myriade de containers Docker orchestrée par Kubernetes de manière idoine, représentant chacun seulement un processus unitaire de l’application complète.

Dès cet instant, chaque microservice peut suivre son propre chemin d’évolution, à sa propre vitesse, en large indépendance par rapport à ses pairs.  Les besoins d’innovations liés au changement du métier de l’entreprise peuvent alors être assouvis beaucoup plus rapidement.

Bien sûr, ces containers Docker ne sont pas indépendants entre eux au niveau des données : ils doivent partager en temps réel des données (bases relationnelles, file d’attente de messages, verrous logiques, etc.) pour fournir les mêmes résultats qu’auparavant. Ce partage est rendu possible par la mise à disposition des mécanismes de partage de ressources similaires à ceux existant sur le mainframe.

Enfin, cette approche par microservices doit être outillée de manière idoine : elle génère de la souplesse et de l’agilité mais sur la base d’une gestion millimétrique (donc automatisée) de la constellation d’images Docker nécessaires au fonctionnement de l’application dans sa nouvelle forme granulaire. En effet, le monolithe basé sur un contenant unique est remplacé par une myriade de containers indépendants qui doivent chacun être mis à jour par les programmes applicatifs nécessaires à leur fonctionnement quand l’application évolue.

Cette nouvelle plateforme DevOps doit être assortie de briques techniques qui peuvent être intégrées avec les composants standards d’un cluster distribué (Kubernetes pour l’orchestration des containers, registre des images Docker pour la gestion de leurs versions, etc.) afin d’en permettre une exploitation efficace à long terme.

A l’époque où “le logiciel dévore le monde”, pour que les applications mainframe se voient offrir un siège au banquet, il faut opter pour la voie de la modernisation. Les containers et les microservices ouvrent la voie royale pour atteindre cette modernité et surtout de cette agilité devenue essentielle.

Mais, la même agilité informatique ne surgira pas brutalement et sans effort pour les sociétés historiquement en place sur leur marché : elle est le fruit de la mise en place d’une architecture informatique sous-jacente, méticuleusement conçue et implémentée, de laquelle résulte cette agilité logicielle extrême. Toutes les sociétés précédemment citées s’appuient sur une conception très similaire de leur système de base : une myriade de containers logiciels hébergeant indépendamment, à travers des microservices, les divers composants de leur application. Ces microservices collaborent étroitement pour rendre le service global attendu par le client. "Diviser pour mieux régner" est clairement la stratégie gagnante de ces leaders.