J’ai récapitulé un incident de doublons d’envoi de notifications push rencontré en exploitant seul une application de prévisions de surf, ainsi que le processus de résolution.
Il s’agit d’une fonctionnalité courante qui envoie une alerte aux utilisateurs lorsque certaines conditions sont remplies, mais à chaque redéploiement du serveur,
le problème suivant se répétait : une notification « déjà envoyée » repartait de nouveau.
■ Problème
- La même notification était envoyée en double à chaque redéploiement/redémarrage
- Le bug se reproduisait mal en local et ne survenait qu’immédiatement après le déploiement, ce qui rendait la cause difficile à identifier
■ Cause
- L’état de prévention des doublons (dedup) était conservé uniquement en mémoire sur le serveur
- Lors d’un redéploiement, le processus repartait de zéro et cet état était entièrement réinitialisé → la notification était considérée comme « non envoyée » et repartait
■ Solution
- Changement vers une architecture où les clés de dedup sont rechargées depuis la base de données au démarrage (seed-on-boot) → l’état est conservé même après redéploiement
- Découverte d’un autre problème : l’approche « notifier uniquement au moment où la condition change » manquait les variations de pondération entre-temps
→ passage à un système d’escalade qui accumule les motifs et les fait monter progressivement - Mise au propre des tokens FCM selon le principe 1 appareil = 1 token (y compris renouvellement des tokens et gestion des doublons)
■ Enseignements
- Pour un état qui « ne doit se produire qu’une seule fois », comme le dedup des notifications, le garder uniquement en mémoire fait du déploiement lui-même un bug
- Il faut concevoir le cycle de vie de l’état en fonction d’un stockage persistant, et non du processus
- Pour les triggers, se baser sur « l’état actuel » plutôt que sur le « moment de transition » réduit les risques de rater des cas
Un cas pratique utile pour ceux qui travaillent sur les push/notifications côté serveur, les cron et batchs, ou la logique de prévention des doublons.
Aucun commentaire pour le moment.