Theodo France

Theodo France

IT / Digital, Logiciels

Paris, Casablanca, London, Lyon, Nantes

Explorez leurs posts

Parcourez les posts publiés par l’entreprise pour une immersion dans leur culture et leurs domaines d’expertise.

Theodo Named 2025 Google Cloud Services Partner of the Year

Las Vegas, April 8, 2025 Theodo today announced that it has received the 2025 Google Cloud Services Partner of the Year. Theodo is being recognized for its achievements in the Goog…

04/07/2025

REX après la migration d’une feature Android/iOS vers KMP

Dans un premier article, nous avons exploré comment migrer progressivement une application native Android/iOS vers Kotlin Multiplatform (KMP). Si vous avez suivi ce guide, vous ave…

04/07/2025

ShedLock : Gérer efficacement les tâches planifiées dans une architecture multi-instances

Introduction Pour les applications d'entreprise, en 2025 l’exécution de tâches planifiées est un besoin courant : génération de rapports, traitements par lots, synchronisation de d…

04/07/2025

Comment diviser par 2 votre temps de CI grâce à ces simples astuces

Chez Theodo HealthTech, notre politique est de créer un code de qualité tout en respectant nos délais de livraison. Cependant, pendant trois sprints consécutifs, nous avons livré d…

08/04/2025

How QRQC helps me better manage bugs on my project?

As a software developer, you spend most of your time delivering code and then fixing bugs you introduced in your code. The Pareto principle is a great way to represent our day-to-d…

04/07/2025

How we migrated from AWS Glue to Snowflake and dbt

Today, I’ll tell you about our ETL migration from AWS Glue to the Snowflake and dbt modern data stack. My team’s mission is to centralize and ensure data reliability from multiple…

04/07/2025

Sécuriser les partages Notion : guide pour tous

Chez Theodo Fintech, nous avons fait de Notion notre QG digital. Documentation produit, projets tech, comptes rendus, référentiels clients ou financiers… tout y passe. Et c’est bie…

04/07/2025

Construire un produit Gen AI : le guide de survie pour les PMs

Bienvenue dans l'ère de l'IA générative, où les machines créent du contenu de manière autonome. Pour les product managers (PMs), cela représente une révolution autant qu'un défi. L…

08/04/2025

Qu’est-ce que le scaling ?

Une bonne application est une application qui tient sa charge d’utilisateurs, notamment grâce à un scaling controlé. Dans cet article nous aborderons ce sujet, et plus particulière…

04/07/2025

How LLM Monitoring builds the future of GenAI ?

Discover how Langfuse offers secure, open-source monitoring for LLM and GenAI solutions. Large Language Models (LLMs) are popping up everywhere and are more accessible than ever. W…

04/07/2025

Les annotations java custom pour respecter l’architecture hexagonale

Le problème que l’on veut résoudre Lorsque l’on développe une API avec Spring Boot, il est fréquent d’utiliser les annotations fournies par le framework, telles que @Service, @Comp…

04/07/2025

Le kit de survie du Product Manager responsable en 4 étapes

Alors que j’étais tranquillement en train de me laisser charmer par la dégustation gratuite de tofu fumé de mon Biocoop l’année dernière, une soudaine prise de conscience a heurté…

08/04/2025

Faites des Plugins pas la Guerre: REX sur ma bataille pour écrire un plugin

Imaginez commencer chaque projet avec tous les outils configurés et prêts à l’emploi. Le rêve, non ? En tant que développeur Android, j’ai toujours eu à portée de main les outils n…

04/07/2025

Don’t use Langchain anymore : Atomic Agents is the new paradigm !

Introduction Since the rise of LLMs, numerous libraries have emerged to simplify their integration into applications. Among them, LangChain quickly established itself as the go-to…

04/07/2025

Optimize Your Google Cloud Platform Costs with Physical Bytes Storage Billing

In today's data-driven world, cloud providers are essential for efficiently managing, processing, and analyzing vast amounts of data. When choosing one such provider, Google Cloud…

08/04/2025

Tech Radar Cloud

Ce Tech radar regroupe une cinquantaine de technologies Cloud et DevOps éprouvées par les experts de Theodo Cloud durant plus de 4 ans de projets. Téléchargez le 2ème volume de not…

08/04/2025

Qu’est-ce que le scaling ?

Theodo France

Qu’est-ce que le scaling ?

Une bonne application est une application qui tient sa charge d’utilisateurs, notamment grâce à un scaling controlé. Dans cet article nous aborderons ce sujet, et plus particulièrement que faire quand les métriques classiques (ressources CPU et mémoire) ne permettent pas d’avoir un scaling efficace. 

Le scaling est une part primordiale de la gestion d’infrastructure. En effet, toute application reçoit un trafic d'intensité variée pendant la journée, il est donc utile d’avoir du scaling en place pour supporter les pics de charge et limiter les coûts pendant les périodes plus calmes.

La version habituelle : CPU & RAM

Les Horizontal Pod Autoscalers

Habituellement, ce scaling se fait via des métriques système, comme l’utilisation CPU ou mémoire. C’est en effet les métriques par défaut des horizontal pods autoscalers de Kubernetes, la ressource de base de l’autoscaling pour cette technologie :

Capture d’écran 2025-07-04 à 10.53.22.png

Exemple de HPA et explications utilisant les métriques de CPU et de mémoire pour faire son scaling

Voici donc un exemple de Horizontal Pod Autoscaler utilisant les métriques de mémoire et de CPU pour faire un son autoscaling. On voit donc une variation du nombre de replicas entre 5 et 20, avec pour objectif d’avoir une utilisation CPU proche des 50%. Il est aussi possible de faire ce scaling via la mémoire, mais c’est une solution plus dangereuse car certaines applications ne consomment pas plus de mémoire en fonction de leur utilisation.

Les autoscaling groups

Il est aussi possible de faire de l’autoscaling en dehors de Kubernetes, comme par exemple pour des tasks ECS dans AWS, en utilisant les autoscalings groups.

Capture d’écran 2025-07-04 à 10.53.45.png

Voici un example d’autoscaling d’une task ECS. Cette task va avoir 5 nouvelles replicas quand son utilisation CPU moyenne dépasse les 70% et va perdre 3 replicas quand son utilisation CPU moyenne descend en dessous des 60%.

Une technologie similaire existe chez GCP : les Managed Instances et autoscaling groups. Il est donc possible de faire cet autoscaling directement via les outils des cloud providers, même sur les machines virtuelles directement, comme avec les autoscalings groups d’AWS

Cependant, cette méthode ne permet pas de résoudre tous les problèmes de scaling.

Une alternative centrée sur l'expérience utilisateur

Cependant, il arrive que ces métriques ne suffisent pas. Prenons par exemple une application qui fonctionne de la manière suivante :

  • on a un nombre fixe de workers (prenons 8 par exemple) dans notre application qui traitent les requêtes reçues

  • Supposons qu’il y ai 2 types de requêtes possibles sur cette application :

    • des requêtes courtes, auquel l’application répond instantanément et qui représentent la majorité du traffic de cette application (environ 90% de requêtes rapides et 10% de requêtes lentes)

    • des requêtes longues nécessitant des updates en base de données représentant une part infime du traffic

Que se passerait-il si 8 requêtes longues arrivent en même temps sur cette application ?

Les 8 workers de l’application seraient occupés à traiter les requêtes en base de données, et l’application refuserait les requêtes courtes car aucun workers n'est disponible. Cependant, il n’y aurait aucune charge sur le CPU ou sur la mémoire, car les workers seraient uniquement en attente de réponse de la base de données. L’application ne scalerait donc pas si il y l'autoscaling en place se basait seulement sur les métriques CPU ou mémoire.

Dans notre cas, il est donc utile de mettre en place un autoscaling utilisant d’autre métriques que les ressources des machines. On peut ainsi à avoir un autoscaling en place utilisant des métriques orientée vers l’expérience utilisateur et non les statistiques de la machine, comme le nombre de requêtes ou le temps de réponse de l’application, avec des outils externes qui mesurent ces données.

Dans notre cas, une solution envisagée serait de mettre en place un scaling sur le nombre de requêtes et le temps de réponse de l’application, données qui seraient récupérées au niveau du load balancer de l’application. En effet, dans notre cas, le temps de réponse de l’application augmenterait fortement lorsque les workers ne sont pas disponibles, l’application scalerait pour ajouter de nouveaux worker et absorber la charge. De plus, l’application scalerait en fonction du nombre de requêtes, ce qui permet aussi de traiter la variation de traffic pendant la journée.

Capture d’écran 2025-07-04 à 10.54.27.png

On vois ainsi la corrélation entre le nombre de requête et les nombre de conteneurs du service, montrant que l’autoscaling suit le nombre de requête que l’application reçois

Comment mettre en place ce scaling ?

Il existe plusieurs méthodes pour mettre en place ce type de scaling, voici donc une méthode utilisant les métriques cloudwatch et les autoscaling groups aws. Pour faire son scaling, le composant responsable de l’autoscaling dans AWS va récupérer les métriques du load balancer servant d'entrée dans les services, et plus particulièrement les métriques suivantes :

  • temps de réponse moyen

  • nombre de requêtes par seconde

L’objectif va donc être d’augmenter le nombre de replicas quand le temps de réponse dépasse un certain seuil, et quand le nombre de requêtes dépasse un certain seuil, pour éviter d’augmenter le nombre de réplicas en l’absence de traffic. Il sera aussi possible de réduire le nombre de replicas quand le temps de réponse sera revenu à des valeurs plus faibles.

Conclusion

En conclusion cet article vous a présenté une solution de scaling, utilisant des métriques métiers tels que le temps de réponse et le nombre de requêtes, cette solution étant une alternative au scaling utilisant les métriques CPU et mémoire. Il existe cependant d’autres méthodes pour faire ce type de scaling, notamment en utilisant Keda sur Kubernetes.

Article rédigé par Thomas Houdin