D'une architecture monolithique aux microservices : un défi technique colossal

Publié le 22 mars 2022
6 minutes de lecture
Architecture microservices symbolisée par des légos

En 2020, nous avions initié une totale redirection technologique des applications créées pour notre client historique Économie d’Énergie, avec une refonte logique et technologique (Symfony, React.js, Intelligence Artificielle) de l’écosystème projet dans un environnement microservices. L’équipe chargée de cette refonte a réalisé un travail considérable pour réussir à boucler le lot 1 des développements en fin d’année 2021, et arriver à la première phase de déploiement en ce début 2022.

Contexte et objectifs du projet de refonte en microservices

Depuis 2010, OpenStudio développe, en partenariat avec Économie d’Énergie, les principales plateformes de récolte de certificats d’économie d’énergie (CEE) auprès de grands comptes, mais aussi des projets hors contexte réglementaire (SEE). En 10 ans, nous avons réalisé 70 sites, et chaque année, OpenStudio met en production une vingtaine de projets en moyenne (+ 20 % de croissance/an).
En 2020, Économie d’Énergie nous a sollicité pour une refonte totale de toutes ces plateformes avec de nombreux ajouts de fonctionnalités. Avec l’accord du client, nous avons décidé de profiter de ce renouvellement pour effectuer un transfert technologique en passant sous une architecture microservices.
 Les objectifs de cette refonte en profondeur sont multiples :

  • Réduction de la dette technique,
  • Amélioration de la productivité des opérateurs utilisant le Back office de l’application  
  • Amélioration des capacités à traiter des volumes de dossiers importants (big data),
  • Conception d’une gestion générique,
  • Harmonisation des différentes plateformes et l’ajout de fonctionnalités utilisant l’intelligence artificielle.

Afin de relever tous ces challenges, nous avons fait le choix d’une architecture microservices, plus moderne et surtout parfaitement adaptée à l’ampleur du projet.

Pourquoi le choix d’une architecture microservices ?

Historiquement, la plupart des applications sont conçues de manière monolithique, c’est-à-dire que toutes les tâches sont réalisées dans une seule application. Pour cela, il existe une grande base de données commune et des interfaces utilisateurs pour les traiter. C’était le cas des plateformes que nous avions développées pour Économie d’Énergie depuis 2010. Dans une approche en microservices, le principe est de diviser l’application en services autonomes responsables respectivement d’une seule tâche. Ces microservices, ou micro-applications, ont une seule chose à faire mais doivent la réaliser correctement. Plusieurs équipes supervisent leur/ leurs propre(s) microservice(s). Une application complète est donc composée d’une multitude de microservices, mis en relation les uns avec les autres.

Bien que complexe à réaliser d’un point de vue technique, les avantages d’un développement en microservices sont indéniables :

Une liberté technique : Possibilité de choisir le langage de programmation le plus adapté aux usages de chaque microservice.

Robustesse : En cas de défaillance d’un microservice, l’application peut tout de même fonctionner, et la maintenance sera facilitée puisqu’elle pourra se concentrer sur un seul service.

Connectivité : Avec l’intégration d’ API, les microservices d’une application peuvent communiquer entre eux. Les microservices peuvent aussi se connecter avec d’autres applications externes.

Évolutivité : Possibilité de changer, modifier ou remplacer facilement les microservices

Scalabilité : Un système en microservices  dispose de son propre environnement. Lors d’une surcharge on peut dupliquer un microservice (scalable) et/ou augmenter la capacité de la machine qui l’héberge.

D’autre part, une architecture microservices subira moins les effets de l’obsolescence, cette durabilité correspond à la démarche numérique responsable favorisée par OpenStudio.

L’architecture microservices, un défi de taille


Sur ce projet, tous les portails actuels ont subi (ou vont subir) une refonte sous une architecture microservices couplée avec le logiciel de message broker (fr : agent de message) RabbitMQ, qui permet aux microservices de communiquer de manière asynchrone. Il gère également les problématiques de gestion de montée en charge (par exemple un service qui souhaite envoyer 500 000 emails avec pièce jointe).
 Des applications existantes ont été installées pour fournir des services transverses comme KeyCloack pour la centralisation des authentifications ou min.io pour la gestion des documents selon un paradigme objet (Object Storage).

L’un des gros challenges à relever fut l’adoption d’une architecture microservices (une nouveauté chez OpenStudio), notamment par les développeurs habitués aux systèmes monolithiques et par les développeurs juniors. Afin de gérer cette transition et la montée en compétence, les équipes ont participé à des workshops, elles ont pratiqué le pair-programming (fr : programmation en binôme) et se sont appuyées sur la forte culture de l’entraide existante chez OpenStudio.

GILLES BOURGEAT, Responsable technique Clermont-Ferrand

Coté DevOps, les microservices sont hébergés sur un cluster Kubernetes, un orchestrateur de conteneur. OpenStudio s’occupe de l’utilisation de cette infrastructure pour l’intégration des services et leur monitoring, mais son déploiement est géré par un autre prestataire. Les technologies Helm et Argo CD servent au déploiement des applications dans Kubernetes. Le monitoring se fait grâce à Prometheus et Grafana pour récupérer en temps réel les informations des applications et lancer des alertes. Ces différentes technologies ont nécessité un apprentissage renforcé.

La fonction DevOps, comme son nom l’indique, intervient aussi côté développement. Les descriptions Docker (DockerFile) sont directement écrites par le DevOps suite à des échanges avec les développeurs. Une autre des problématiques rencontrées fut de faciliter le développement en local. L’outil Docker Compose est utilisé pour garantir des environnements identiques sur toutes les machines et un rapide déploiement en local. 

FLORENT PRADIER, DevOps, Le Puy-en-Velay

Séparer le front-end et le back-end : une organisation complexe mais nécessaire

Contrairement aux plateformes actuelles, cette refonte s’est construite avec une séparation du front-end et du back-end. Le front-end est développé en ReactJS. ReactJS est couplé avec plusieurs autres technologies, pour garantir leur bonne intégration et la qualité du code. Pour le front-office, les équipes ont opté pour une architecture JAMstack pour ses bénéfices en termes de sécurité, performance, faible consommation énergétique, moindre coût d’hébergement et scalabilité. La JAMstack a été mise en œuvre à l’aide de NextJS pour la génération statique des sites. Le CMS Strapi permet aussi au client d’actualiser lui-même le contenu de son site.

Aucun des acteurs d’un projet important ne peut maîtriser tous les aspects de celui-ci. Pour des raisons organisationnelles, il a donc été choisi de diviser le back-office en plusieurs projets indépendants. De la même manière que pour les microservices, le back-office a été découpé en plusieurs applications indépendantes. Ce concept est appelé micro-frontend, il constitue un challenge pour garantir un rendu visuel unique sur l’ensemble du site. Ce challenge a été relevé à l’aide d’un Design System commun pour que l’ensemble des applications dispose des mêmes composants UI. Le Design System a été intégré à l’aide de l’outil Storybook. Ces outils ont également facilité la montée en compétence des équipes en découpant et isolant le travail par composant. 

ANTOINE ROYER, Lead Dev Front, Toulouse

Faciliter les échanges au sein de l’équipe OpenStudio et l’intégration du client dans le projet

Au vu de cette organisation très découpée, et de l’arrivée régulière de nouveaux collaborateurs dans l’équipe, un fort accent a été mis sur la qualité du code. Pour cela, les principes d’intégration continue (CI) ont été déployés dans GitLab, il était donc impossible de partager son code sans la validation préalable des différents tests : analyse de code statique (PHPstan, PSALM), test intégration, test unitaire, test fonctionnel. Malgré un temps d’implémentation plus long, les développeurs se sont rapidement adaptés à cette pratique qui offre de réels bénéfices sur le long terme.

La méthode Agile et les cérémonies Scrum sont utilisées pour organiser la vie de l’équipe et pour fortement intégrer le client dans le projet. Sa mise en place s’est faite sans difficulté organisationnelle car l’équipe était nouvelle, la découverte a donc été collective. Les équipes historiques ayant travaillé sur les plateformes CEE ont été tenues informées des avancées sur ce projet.

PAULINE LAFONT, Cheffe de Projet & Product Owner, Toulouse

La force de l’Agile est de savoir La force de l’Agile est de savoir s’adapter et les ajustements se sont réalisés simplement, grâce à une bonne cohésion d’équipe et une relation de confiance avec le client.

Le back-end est développé en PHP 8 avec le framework Symfony 5. L’équipe backend étant majoritairement nouvelle chez OS, sa principale difficulté fut d’intégrer le fonctionnel. Les réunions avec les personnes métiers, la méthode Agile et une forte entraide leur ont permis d’avancer sereinement.

YOAN LERAT, Lead Dev Back Clermont-Ferrand

Des échanges très réguliers avec le client et entre les membres de l’équipe OpenStudio ont aussi été nécessaires sur le design des applications, au fur et à mesure du projet. Pour la première fois chez OpenStudio, une personne a entièrement été dédiée à l’UX. À son arrivée, notre UI/UX designer a commencé par une phase d’audit et de sensibilisation. Elle a interpellé les intervenants de chaque projet afin de lisser visuellement les applications.

L’audit UX est passé par des entretiens utilisateurs chez le client afin d’analyser les méthodes et les journées de travail des gestionnaires. Il en a résulté des comptes rendus d’entretiens et des Expérience Map servant de base à l’amélioration de l’expérience utilisateur. Cette expérience est également améliorée grâce à notre équipe de graphistes produisant de belles interfaces d’une grande lisibilité.

CLAIRE-ANDRÉA CARO, UI/UX Designer, Toulouse

Ce projet de refonte est un projet aux multiples facettes qui demande des connaissances techniques complexes. Notre équipe a donc fait des recherches approfondies et tous ses membres ont dû monter en compétence rapidement sur de nombreux paramètres. Cet apprentissage s’est déroulé dans de bonnes conditions car les équipes ont eu les moyens de leurs ambitions. En effet, une pluralité d’outils ont été déployés pour acquérir des bases solides sur lesquelles avancer.
Toute la chaîne de valeur logicielle est couverte : l’UX, l’UI, le DevOps, l’architecture technique, le backend et le front-end. Pour chacun de ces domaines, il y a eu le parti-pris d’un fort découplage : Design System, micro-frontend, microservice, etc. Ces découpages offrent de nombreux avantages en termes de maintenabilité, scalabilité, résilience, facilité organisationnelle et une meilleure définition des responsabilités qu’un système monolithique.