- Published on
GreenFrame - Mesurer et réduire les émissions CO2 de vos applications web
En 2021, j'ai été développeur chez Marmelab, un studio spécialisé dans l'innovation digitale.

J'ai été en charge du développement de GreenFrame, une application SaaS qui permet de mesurer et réduire l'empreinte carbone de tout type d'applications web.
GreenFrame: Mesurer et réduire les émissions CO2 de vos applications web
GreenFrame est une application SaaS qui propose une solution permettant de monitorer et de calculer les émissions d'une application au sein d'un environnement d'intégration continue, dans le but de pouvoir ensuite réduire leurs impacts écologiques.

La part de l'empreinte carbone dans le Numérique est de 4% des émissions totales de gaz à effet de serre, et sa consommation d'énergie augmente de 9% par an. (source: The Shift Project)
Les développeurs doivent changer leurs habitudes et construire des applications plus durables. Le "Green IT" a également besoin de mesures précises des émissions CO2. C'est sur ce constat que GreenFrame est né.
Comment ça marche ?
Les utilisateurs vont exécuter dans leur intégration continue un scénario ressemblant à un test E2E grâce au CLI GreenFrame. Ce scénario est basé sur Playwright et va réaliser de vraies actions utilisateurs au sein d'un navigateur.

Durant l'exécution de ce scénario, nous enregistrons toutes les métriques (CPU, Réseau, RAM, Écriture/Lecture disques) et nous les convertissons en mWh ou en grammes de CO2 grâce à un modèle étudié en interne basé sur des publications scientifiques.

Pour enregistrer ces métriques, nous exécutons le scénario dans un conteneur Docker, qui sert de boîte noire pour isoler les processus du navigateur du reste de la machine. L'API Docker Engine nous permet de récolter les métriques de ce conteneur. Une fois le scénario terminé, ces données sont envoyées à une API qui se charge de les convertir et de créer une page de résultat.
De plus, il est également possible de monitorer d'autres conteneurs que celui du navigateur, comme une API, une base de données, un Redis, en les écoutant pendant que le navigateur interagit avec l'application web.

GreenFrame est un très jeune projet pour Marmelab. Nous n'avons pas de designer ou de devops pour nous aider à construire cette application. Durant son développement, nous étions donc en charge du design de l'application développée en NextJS pour le front et en NodeJS pour le CLI et l'API. Le projet est hébergé sur AWS et l'infrastructure est pilotée par le code avec Terraform.
Évidemment, nous avons appliqué des bonnes pratiques d'éco-conception et de sobriété numérique dans le but d'avoir une application légère et peu gourmande en ressources. D'ailleurs, GreenFrame est monitoré avec GreenFrame dans sa CI !
J'ai énormément appris durant ce projet et c'était un vrai challenge. Spécialement en cherchant toujours à réaliser une fonctionnalité en prenant le moins de temps possible sans compromettre la stabilité ou la qualité de l'application.