Aller au contenu
hexora

Synchronisations fiables : idempotence, reprise sur erreur, supervision

Doublons, messages perdus, erreurs silencieuses : les quatre mécanismes qui rendent une synchronisation entre outils fiable, expliqués sans jargon.

Par la rédaction Hexora7 min de lecture
Salle de contrôle avec un long pupitre de voyants lumineux, un téléphone et un casque posés sur le bureau
Photo : Igor Saikin / Unsplash

L’essentiel en 30 secondes

  • Une synchronisation fiable repose sur quatre mécanismes : l’idempotence, la reprise automatique des erreurs temporaires, la mise à l’écart des erreurs définitives et la supervision.
  • Une opération est idempotente quand l’exécuter plusieurs fois produit le même résultat qu’une seule fois ; c’est ce qui empêche une commande ou une facture d’être créée en double.
  • Les erreurs temporaires se rejouent automatiquement avec des délais croissants et un peu d’aléa ; les erreurs définitives vont dans une file à traiter par une personne, avec le message d’origine.
  • Un webhook peut arriver deux fois, en retard ou dans le désordre : le récepteur doit accuser réception immédiatement, vérifier la signature, puis traiter le message en file d’attente.
  • La supervision doit être métier autant que technique : une alerte « 12 commandes non transmises à l’ERP depuis une heure » est plus utile qu’un journal d’erreurs que personne ne lit.

Une synchronisation entre deux outils est fiable quand elle repose sur quatre mécanismes : l’idempotence, pour qu’un message reçu deux fois ne crée pas deux commandes ; la reprise automatique des erreurs temporaires, avec des délais croissants ; la mise à l’écart des erreurs définitives dans une file que quelqu’un traite ; et la supervision, avec des alertes compréhensibles par les métiers. Sans ces mécanismes, une intégration fonctionne en démonstration puis produit, en production, des doublons, des trous et des erreurs silencieuses.

Cet article explique chacun de ces mécanismes sans jargon, pour qu’un dirigeant ou un responsable métier sache quoi exiger d’une intégration, qu’elle soit développée sur mesure ou construite avec une plateforme du marché.

Pourquoi les synchronisations échouent-elles ?

Une synchronisation relie deux systèmes par un réseau, et chacun peut défaillir à tout moment. Les pannes ne sont pas des exceptions : ce sont des conditions normales de fonctionnement, que la documentation de Microsoft qualifie de « transitoires » quand elles se corrigent d’elles-mêmes, comme une coupure réseau momentanée ou un service saturé.

Situation Ce qui se passe Conséquence sans protection Parade
Coupure réseau, service indisponible L’envoi échoue Donnée jamais transmise Nouvelles tentatives automatiques
Réponse perdue après un traitement réussi L’émetteur croit à un échec et renvoie Doublon (commande, facture) Idempotence
Messages livrés dans le désordre La modification arrive avant la création Erreur ou donnée écrasée par une version ancienne Numéro de version, état complet dans le message
Donnée refusée (format, règle métier) L’outil cible rejette Message bloqué ou rejoué à l’infini File d’erreurs à traiter
Webhook jamais reçu L’émetteur abandonne après ses tentatives Trou silencieux Réconciliation périodique
Changement de version d’une API Un champ disparaît ou change Erreurs en série, souvent un lundi matin Tests, alertes, contrats d’interface

Nous présentons les différentes façons de connecter des outils dans notre article sur les API, webhooks et iPaaS. Ici, la question est différente : une fois la connexion choisie, comment la rendre robuste ?

L’idempotence : le mécanisme qui évite les doublons

Une opération est idempotente quand l’exécuter plusieurs fois produit le même résultat que l’exécuter une seule fois. « Mettre le statut de la commande 4521 à expédiée » est idempotent : le répéter ne change rien. « Ajouter 10 unités au stock » ne l’est pas : chaque répétition ajoute 10 unités.

Pourquoi est-ce essentiel ? Parce que la plupart des systèmes de messages garantissent une livraison « au moins une fois », jamais « exactement une fois ». Le modèle du consommateur idempotent décrit par Microsoft le dit clairement : il est impraticable de garantir une livraison unique dans un système distribué ; la solution durable consiste à rendre le récepteur capable d’ignorer les doublons.

Concrètement, trois techniques se combinent :

  1. Un identifiant unique par opération, transmis avec chaque message et conservé par le récepteur. Si l’identifiant a déjà été traité, le message est ignoré.
  2. Des écritures par clé métier (« crée ou mets à jour le client dont le SIREN est X ») plutôt que des créations aveugles.
  3. Des messages qui portent un état complet (« le stock est de 140 ») plutôt qu’une variation (« +10 »), quand c’est possible.

Un détail fait souvent la différence : l’enregistrement de l’identifiant et la modification des données doivent se faire dans la même transaction. Sinon, une panne entre les deux étapes recrée le doublon que l’on voulait éviter.

Fibres optiques orange branchées sur un équipement réseau, voyants allumés en arrière-plan
Chaque message peut arriver deux fois : le récepteur doit le savoir. Photo : Patrick Turner / Unsplash

Reprise sur erreur : réessayer, mais pas n’importe comment

Toutes les erreurs ne se valent pas. La première décision consiste à les classer :

  • Erreur temporaire : délai dépassé, service indisponible, limite de débit atteinte. Réessayer a de bonnes chances de réussir.
  • Erreur définitive : donnée invalide, client inconnu, droits insuffisants. Réessayer ne servira à rien tant qu’une personne n’a pas corrigé la cause.

Des délais croissants, avec un peu d’aléa

Pour les erreurs temporaires, la bonne pratique est d’augmenter le délai entre chaque tentative (quelques secondes, puis quelques dizaines, puis quelques minutes), jusqu’à un nombre maximal. Les ingénieurs d’Amazon recommandent dans leur Builders’ Library d’ajouter une part d’aléa à ces délais, pour que des centaines de messages en échec ne reviennent pas tous à la même seconde et ne saturent pas à nouveau le service. Ils rappellent aussi que des nouvelles tentatives empilées à plusieurs niveaux peuvent multiplier la charge jusqu’à 243 fois dans leur exemple, et aggraver la panne au lieu de la résorber.

Le disjoncteur

Quand un service est durablement indisponible, continuer à l’appeler gaspille des ressources. Le modèle du « disjoncteur » suspend les appels pendant un temps, puis teste prudemment si le service est revenu. Les messages s’accumulent pendant ce temps dans une file d’attente, et partent quand le service répond à nouveau.

La file des messages en erreur

Les erreurs définitives, et les erreurs temporaires qui ont épuisé leurs tentatives, vont dans une file dédiée, souvent appelée « file de lettres mortes ». Chaque message y est conservé avec sa cause d’échec. Une personne habilitée peut corriger la donnée dans l’outil source, puis rejouer le message d’un clic. C’est ce qui transforme une erreur silencieuse en tâche visible et traitable.

Webhooks : les règles du récepteur

Les webhooks ont un fonctionnement particulier : c’est l’émetteur qui décide quand envoyer et combien de fois réessayer. La documentation de Stripe, une référence en la matière, résume bien les règles valables pour la plupart des plateformes :

  • Accuser réception immédiatement, avant tout traitement long, puis traiter le message en arrière-plan dans une file. Sinon l’émetteur considère l’envoi comme échoué et le renvoie.
  • Vérifier la signature de chaque message, pour s’assurer qu’il vient bien de l’émetteur attendu et n’a pas été modifié, et rejeter les messages trop anciens pour se protéger du rejeu.
  • Gérer les doublons en conservant les identifiants des événements déjà traités.
  • Ne pas dépendre de l’ordre d’arrivée : Stripe précise ne pas garantir que les événements arrivent dans l’ordre où ils ont été produits.
  • Prévoir l’absence de message : en production, Stripe réessaie pendant trois jours au maximum. Au-delà, l’événement n’arrivera plus.

L’initiative Standard Webhooks, portée par plusieurs éditeurs, propose des conventions communes pour l’envoi et la signature des webhooks. Si vous exposez vous-même des webhooks à vos clients ou partenaires, par exemple depuis un SaaS, s’en inspirer évite de réinventer ces règles.

La réconciliation : le filet de sécurité

Même avec tous ces mécanismes, une donnée peut manquer : un webhook abandonné, une modification faite pendant une maintenance, un import manuel. La réconciliation est un traitement périodique qui compare les deux outils sur un périmètre donné (les commandes du jour, les clients modifiés de la semaine) et corrige ou signale les écarts.

C’est le mécanisme le plus souvent oublié, et celui qui donne confiance aux équipes métier. Une synchronisation en temps réel par webhooks, doublée d’une réconciliation nocturne, est une combinaison robuste et courante, par exemple entre une boutique Shopify et un ERP, ou entre HubSpot et un outil de facturation.

Superviser : des alertes que les métiers comprennent

Un journal technique que personne ne lit ne protège de rien. Une supervision utile se construit à deux niveaux :

Niveau Ce qu’on mesure Exemple d’alerte
Technique Taux d’erreur, temps de réponse, taille de la file d’attente « Le service de l’ERP ne répond plus depuis 10 minutes »
Métier Volumes attendus, retards, écarts de réconciliation « Aucune commande transmise à l’entrepôt depuis 14 h »
Qualité Messages en erreur définitive, par cause « 8 clients refusés : SIREN manquant »

Chaque échange devrait aussi laisser une trace consultable : quel message, quand, quel résultat, combien de tentatives. Cette traçabilité sert au diagnostic comme aux audits ; nous y consacrons un article sur la journalisation et la traçabilité.

La checklist à exiger de toute intégration

Avant de mettre en production une synchronisation, développée en interne, par un prestataire ou sur une plateforme d’intégration, vérifiez ces points :

  1. Chaque message porte-t-il un identifiant unique, et le récepteur ignore-t-il les doublons ?
  2. Les erreurs temporaires sont-elles réessayées automatiquement, avec des délais croissants et une limite ?
  3. Les erreurs définitives sont-elles isolées dans une file consultable, avec leur cause, et peut-on les rejouer ?
  4. Les webhooks reçus sont-ils authentifiés par signature, et traités en arrière-plan ?
  5. Une réconciliation périodique compare-t-elle les deux outils ?
  6. Des alertes métier préviennent-elles la bonne personne, avec un message compréhensible ?
  7. Chaque échange est-il journalisé et consultable pendant une durée définie ?
  8. Que se passe-t-il quand l’API d’un éditeur change de version ? Qui est prévenu, et comment teste-t-on ?

Ces exigences s’appliquent à tous les flux, d’une synchronisation CRM et ERP à un échange EDI avec la grande distribution. Ce sont elles que nous intégrons par défaut dans nos projets d’intégration et d’API.

Vos synchronisations produisent des doublons, des trous ou des erreurs que personne ne voit avant le client ? Décrivez vos flux dans notre diagnostic de projet : nous identifions avec vous les mécanismes qui manquent et l’ordre dans lequel les mettre en place.

Intégrations & API

Vos outils se parlent enfin.

Connecter vos outils existants et automatiser les échanges de données.

Sources et références

  1. Recevoir des événements Stripe sur votre endpoint de webhook · Stripe
  2. Modèle Nouvelle tentative (Retry pattern) · Microsoft Learn, Azure Architecture Center
  3. Modèle Consommateur idempotent · Microsoft Learn, Azure Architecture Center
  4. Timeouts, retries and backoff with jitter · Amazon Builders’ Library
  5. Standard Webhooks · Standard Webhooks
  • synchronisation
  • webhooks
  • idempotence
  • intégration API
  • supervision
  • fiabilité
FAQ

Vos questions, nos réponses

Qu’est-ce qu’un webhook ?

Un webhook est un message qu’une application envoie automatiquement à une adresse web d’une autre application quand un événement se produit : une commande passée, un paiement reçu, un contact modifié. Il évite d’interroger l’application en boucle pour savoir si quelque chose a changé. En contrepartie, il faut prévoir qu’un message puisse arriver en double, en retard ou pas du tout.

Pourquoi des commandes apparaissent-elles en double dans mon ERP ?

Le plus souvent parce que l’envoi a été rejoué après une erreur ou une absence de réponse, alors que la première tentative avait en réalité abouti. Sans contrôle d’idempotence, l’ERP crée une seconde commande. La parade consiste à transmettre un identifiant unique par opération et à refuser de traiter deux fois le même.

Combien de fois faut-il réessayer après une erreur ?

Cela dépend de l’erreur et de l’urgence. Une coupure réseau ou une indisponibilité passagère justifie plusieurs nouvelles tentatives espacées de plus en plus. Une donnée refusée parce qu’elle est invalide ne passera jamais : la réessayer ne fait qu’encombrer. Il faut donc distinguer les deux et fixer un nombre maximal de tentatives.

Un iPaaS gère-t-il tout cela automatiquement ?

En partie. La plupart des plateformes d’intégration proposent des nouvelles tentatives et un journal des exécutions. L’idempotence côté application cible, la réconciliation périodique et les alertes métier restent généralement à concevoir. Vérifiez ces points avant de choisir, quel que soit l’outil retenu.

Que faire quand une synchronisation a été interrompue plusieurs heures ?

Si les mécanismes sont en place, rien de manuel : les messages en attente sont rejoués dans l’ordre, les doublons éventuels sont ignorés grâce à l’idempotence, et une réconciliation compare ensuite les deux outils pour rattraper ce qui aurait été perdu. Sans ces mécanismes, il faut comparer des exports à la main, ce qui prend souvent plus de temps que la panne elle-même.

À lire ensuite

Tous les articles →

Un projet ? Parlons-en.

Démarrer un projet