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

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

Theodo France

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 données, etc.

Avec Spring Boot il suffit d’annoter une opération avec @Scheduled pour déclencher des traitements à heure fixe ou à intervalles réguliers.

Cependant l'adoption croissante des architectures distribuées et le déploiement d'applications multi-instances pour la haute disponibilité fait émerger un nouveau défi : comment éviter l'exécution simultanée d'une même tâche planifiée sur toutes les instances ?

Le problème des applications multi-instances

Risques et impacts

Imaginons un scénario où votre application, déployée sur trois instances, doit générer un rapport quotidien. Sans mécanisme de synchronisation, chaque instance va tenter d'exécuter la tâche, conduisant à :

  • Une consommation inutile de ressources

  • Des conflits potentiels sur les données

  • Des incohérences dans les résultats

  • Une multiplication des traitements

ShedLock comme solution

Présentation et principe de fonctionnement

ShedLock, développé par Lukáš Křečan, apporte une solution à ce problème. Son principe est simple mais efficace : utiliser un verrou centralisé pour s'assurer qu'une seule instance exécute la tâche planifiée à un moment donné.

Architecture

L'architecture de ShedLock s'articule autour de quelques composants clés :

  • MethodProxyScheduledLockAdvisor : le proxy qui bloque l’exécution de la méthode annotée si le verrou est mis

  • Le LockProvider : composant qui fourni la base de données de verrous. Il doit être configuré par le développeur. Le point d’attention principal : la base doit être partagée par toutes les instances de l’application.

Implémentation

Configuration détaillée

Voici un exemple complet de configuration de ShedLock. Ici on choisit de stocker les verrous dans la base de donnée car elle est partagée entre toutes les instances de l’application. On choisit donc l’implémentation JdbcTemplateLockProvider de LockProvider

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

💡 Astuce : vous pouvez mettre l’annotation @SchedulerLock sur n’importe quelle méthode, même si elle n’est pas annotée @Scheduled . Ainsi vous pouvez par exemple bloquer seulement une partie d’un traitement planifié.Est-ce une bonne idée ? C’est une autre histoire.

Points clés de la configuration

  1. @EnableSchedulerLock : Active le mécanisme de verrou avec une durée maximale par défaut

  2. JdbcTemplateLockProvider : L’implémentation de LockProvider.Cette implémentation stocke les verrous dans la base de donnée partagée entre les instances de l’application. Le développeur doit fournir :

    1. La source de données

    2. Le fuseau horaire (ici on choisit le même fuseau que la base, typiquement UTC)

  3. @SchedulerLock : Configure chaque tâche avec :

    1. Le nom du verrou

    2. Des tâches qui ne sont pas  en conflit peuvent toujours s’exécuter en parallèle si leurs verrous ont des noms différents.

    3. Une durée minimale de verrou

    4. La durée minimale permet de se prémunir des instances dont les horloges seraient légèrement désynchronisées

    5. Une durée maximale de verrou

    6. La durée maximale permet qu’une tâche plantée n’entrave pas les créneaux d’exécution suivants.

Tests et validation

Tests d'intégration avec TestContainers

Pour les tests d'intégration, l'utilisation de TestContainers permet de reproduire un environnement proche de la production :

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

Le piège du cache Registry

Comme nous l'avons découvert lors de nos tests, le Registry de ShedLock peut créer des situations inattendues. Voici les points importants à retenir :

  1. Le Registry est un cache en mémoire qui persiste durant toute la durée de vie de l'application

  2. Il faut penser à le nettoyer entre les tests avec lockProvider.clearCache()

  3. En production, ce cache aide à optimiser les performances en évitant des requêtes inutiles

Supervision et maintenance

Monitoring des verrous

Pour une supervision efficace, surveillez :

  • La table shedlock pour détecter les verrous orphelins

  • Les logs d'application pour les échecs d'acquisition de verrous

  • Les durées d'exécution des tâches par rapport aux timeouts configurés

Bonnes pratiques

  1. Toujours configurer des timeouts adaptés à vos traitements

  2. Nettoyer régulièrement les verrous obsolètes

  3. Implémenter une gestion d'erreurs robuste

  4. Monitorer les exécutions et les verrous

  5. Utiliser un identifiant de verrou explicite pour chaque traitement

Conclusion

ShedLock résout élégamment le problème des tâches planifiées en environnement distribué. Sa mise en place est simple, mais requiert une attention particulière aux détails de configuration et aux pièges potentiels, notamment au niveau du cache Registry.

Son intégration avec Spring Boot et sa flexibilité en termes de stockage (base de données, Redis, MongoDB, etc.) en font un choix pertinent pour sécuriser vos traitements planifiés en architecture multi-instances.

N'oubliez pas de consulter la documentation officielle de ShedLock pour les dernières mises à jour et options de configuration.

Article rédigé par Loïc Broquet