- À cause d’un bug de mise à jour automatique dans Screen Studio, une app d’enregistrement d’écran pour macOS, un fichier de 250 Mo était retéléchargé toutes les 5 minutes
- Résultat : en un mois, 2 Po (2 000 000 Go) de trafic ont été générés sur Google Cloud, entraînant une facture d’environ 8 000 $
- La cause était un simple oubli dans le code : la logique qui devait arrêter les requêtes répétées après le téléchargement de la mise à jour avait été omise
- Pour certains utilisateurs, cela a même provoqué des dommages concrets, comme la résiliation de leur service Internet, et l’équipe de développement a pleinement reconnu sa responsabilité
- L’incident met en avant plusieurs leçons : configurer des alertes de coûts cloud, relire le code susceptible d’engendrer des dépenses, et prévoir des mécanismes de contrôle côté serveur pour les mises à jour
Aperçu de l’incident
- Screen Studio est une application d’enregistrement d’écran de bureau pour macOS, avec une fonction de mise à jour automatique
- Le fichier de mise à jour pèse environ 250 Mo, et l’app vérifie le serveur toutes les 5 minutes
- À cause du bug, même après détection de la mise à jour, les requêtes toutes les 5 minutes ne s’arrêtaient pas et relançaient sans cesse le téléchargement
Le début du refactor fatal
- Auparavant, la fenêtre pop-up de mise à jour gênait l’enregistrement et posait un problème d’UX
- Lors d’un refactor destiné à améliorer ce point, la logique qui arrêtait le timer après la mise à jour a été supprimée
- Résultat : la logique de téléchargement répétitif du fichier de mise à jour s’est retrouvée intégrée dans l’application
Le contexte inquiétant : exécution en arrière-plan
- Un grand nombre d’utilisateurs laissaient l’app tourner en arrière-plan pendant plusieurs semaines
- Dans cet état, des milliers d’instances téléchargeaient automatiquement 250 Mo toutes les 5 minutes
La catastrophe en chiffres
- Un téléchargement toutes les 5 minutes = 288 fois par jour
- Trafic téléchargé quotidien par utilisateur = 72 Go
- Sur environ 30 jours, en supposant 1 000 utilisateurs :
- 250 Mo × 288 × 30 × 1 000 = environ 2 Po de trafic
- Coût estimé sur Google Cloud : environ 8 000 $
La chaîne d’erreurs
- Aucune alerte de coût Google Cloud n’était configurée
- L’équipe se reposait sur un coût mensuel historique d’environ 300 $
- Le problème n’a finalement été repéré qu’après le blocage des transactions à cause du dépassement de la limite de carte bancaire
Les dommages côté utilisateur
- Pour un utilisateur, ce trafic a conduit son FAI (fournisseur d’accès à Internet) à notifier une résiliation du contrat de service
- Aucun fournisseur alternatif dans sa zone → fortes perturbations au quotidien
- L’équipe a reconnu sa responsabilité et proposé une compensation des coûts ; heureusement, la situation s’est réglée à l’amiable
- Mais avoir causé du tort à un utilisateur a laissé aux développeurs un profond sentiment de remise en question
Résumé des leçons
- Les alertes de coûts cloud sont indispensables
- La logique de mise à jour automatique doit être écrite avec une extrême prudence
- Tout code susceptible de générer des coûts doit faire l’objet d’une revue particulière
- Prévoir des signaux de contrôle côté serveur (par ex. un flag de mise à jour forcée) dans la conception
- Vérifier régulièrement l’état d’utilisation du cloud
1 commentaires
Avis Hacker News
Pour ceux qui trouveront ce fil via une recherche web à l’avenir : screen.studio est un logiciel d’enregistrement d’écran pour macOS qui vérifie les mises à jour toutes les 5 minutes. Mais le bug décrit dans ce post consiste à télécharger un fichier de mise à jour de 250 Mo toutes les 5 minutes
Screen Studio est un enregistreur d’écran pour macOS. C’est une application de bureau. Ils affirment qu’une mise à jour automatique est nécessaire pour installer facilement la dernière version
Il est absurde qu’un développeur d’une application non essentielle comme un enregistreur d’écran pense devoir vérifier les mises à jour toutes les 5 minutes
Je doute vraiment qu’il soit nécessaire de vérifier les mises à jour toutes les 5 minutes. Une fois au démarrage suffit, et même si l’utilisateur laisse l’application ouverte plusieurs jours, on pourrait vérifier une fois par jour, voire moins souvent
Je suis toujours strict sur les revues de code. Une fois, quand un manager m’a dit d’en laisser davantage à la QA, j’ai répondu : « Nous pourrions tous perdre notre emploi. Nous pouvons toujours perdre notre emploi à cause d’une seule mauvaise ligne de code »
Le problème de la bande passante gaspillée inutilement sur les forfaits de données de milliers d’utilisateurs
Quand j’ai distribué une application de bureau Mac :
Je suis surpris que « de meilleurs tests » ne soient pas mentionnés dans le résumé
Je suis prudent quant à l’adoption de bibliothèques tierces (car chacune peut devenir une source de problèmes à long terme), mais les mises à jour d’application en valent la peine
J’exploite un service de proxy anti-censure qui utilise des fichiers Proxy Auto-Configuration (PAC)