- Durch einen Bug in der automatischen Update-Funktion der macOS-Bildschirmaufnahme-App Screen Studio wurde eine 250-MB-Datei alle 5 Minuten wiederholt heruntergeladen
- Das führte dazu, dass über einen Monat hinweg 2 PB (2.000.000 GB) an Traffic bei Google Cloud anfielen und in einer Rechnungsexplosion von rund 8.000 $ endeten
- Die Ursache war ein simples fehlendes Stück Code: Die Logik, die wiederholte Anfragen nach dem Herunterladen des Updates stoppt, fehlte
- Bei einigen Nutzern entstand sogar konkreter Schaden, etwa die Kündigung ihres Internetdienstes, und das Entwicklerteam erkennt seine Verantwortung voll an
- Betont werden die Lehren, darunter Cloud-Kostenwarnungen einrichten, kostenverursachenden Code prüfen und Kontrollmechanismen für Update-Server vorsehen
Überblick über den Vorfall
- Screen Studio ist eine Desktop-Bildschirmaufnahme-App für macOS und verfügt über eine automatische Update-Funktion
- Die Updatedatei ist etwa 250 MB groß, und die App prüft alle 5 Minuten den Server
- Wegen des Bugs wurde nach Erkennung eines Updates die Anfrage im 5-Minuten-Takt nicht gestoppt und das Update immer weiter heruntergeladen
Der Beginn des tragischen Refactorings
- Zuvor gab es ein UX-Problem, weil das Update-Popup während einer Aufnahme störte
- Bei einem Refactor zur Verbesserung dieses Verhaltens wurde die Logik entfernt, die den Timer nach dem Update stoppt
- Dadurch war in der App letztlich eine Logik eingebaut, die die Updatedatei wiederholt herunterlädt
Der beunruhigende Kontext: Ausführung im Hintergrund
- Ein erheblicher Teil der Nutzer ließ die App wochenlang im Hintergrund laufen
- In diesem Zustand luden Tausende Instanzen alle 5 Minuten automatisch 250 MB herunter
Die Katastrophe in Zahlen
- Download alle 5 Minuten = 288-mal pro Tag
- Täglicher Download-Traffic pro Nutzer = 72 GB
- Bei einer Dauer von rund 30 Tagen und angenommen 1.000 Nutzern:
- 250 MB × 288 × 30 × 1.000 = rund 2 PB Traffic
- Erwartete Kosten bei Google Cloud: rund 8.000 $
Verkettung von Fehlern
- Für Google Cloud waren keine Kostenwarnungen eingerichtet
- Wegen der bisherigen Monatskosten von rund 300 $ fühlte man sich in falscher Sicherheit
- Letztlich wurde das Problem erst bemerkt, als Transaktionen wegen Überschreitung des Kreditkartenlimits blockiert wurden
Schäden bei Nutzern
- Ein Nutzer erhielt wegen dieses Traffics von seinem ISP (Internetanbieter) die Mitteilung, dass sein Vertrag gekündigt werde
- In der Region gab es keinen alternativen Anbieter → erhebliche Einschränkungen im Alltag
- Das Team übernahm die Verantwortung und bot Kostenerstattung an, glücklicherweise wurde die Situation einvernehmlich gelöst
- Die Erfahrung, Nutzern Schaden zugefügt zu haben, hinterließ bei den Entwicklern jedoch tiefe Selbstreflexion
Zusammenfassung der Lehren
- Cloud-Kostenwarnungen sind Pflicht
- Logik für automatische Updates sollte mit äußerster Sorgfalt geschrieben werden
- Jeder Code mit potenziellem Kostenrisiko sollte besonders geprüft werden
- Serverseitige Kontrollsignale (z. B. ein Flag für erzwungene Updates) sollten Teil des Designs sein
- Der Zustand der Cloud-Nutzung sollte regelmäßig überprüft werden
1 Kommentare
Hacker-News-Kommentare
Für alle, die diesen Thread in Zukunft über die Websuche finden: screen.studio ist eine Bildschirmaufnahmesoftware für macOS und prüft alle 5 Minuten auf Updates. Der in diesem Beitrag beschriebene Bug bestand jedoch darin, dass alle 5 Minuten eine 250-MB-Update-Datei heruntergeladen wurde.
Screen Studio ist ein Bildschirmrekorder für macOS. Es ist eine Desktop-App. Es wird behauptet, automatische Updates seien nötig, damit sich die neueste Version leicht installieren lässt.
Es ist absurd, dass ein Entwickler einer nicht kritischen App wie eines Bildschirmrekorders meint, alle 5 Minuten auf Updates prüfen zu müssen.
Ich bezweifle, dass wirklich alle 5 Minuten auf Updates geprüft werden muss. Einmal beim Start reicht aus, und selbst wenn Nutzer die App tagelang geöffnet lassen, könnte man nur einmal pro Tag oder noch seltener prüfen.
Ich bin bei Code-Reviews immer streng. Einmal sagte mir ein Manager, ich solle mehr an QA delegieren, und ich antwortete: „Wir könnten alle unseren Job verlieren. Wegen einer einzigen schlechten Codezeile können wir immer unseren Job verlieren.“
Das Problem betrifft die Bandbreite, die Tausende von Nutzern unnötig aus ihrem Datentarif verbraucht haben.
Als ich eine Mac-Desktop-Anwendung verteilt habe:
Es überrascht mich, dass „bessere Tests“ in der Zusammenfassung nicht erwähnt werden.
Ich bin bei der Einführung von Third-Party-Bibliotheken konservativ (weil jede Bibliothek langfristig Probleme verursachen kann), aber App-Updates sind es wert.
Ich betreibe einen zensurumgehenden Proxy-Dienst, der Proxy Auto-Configuration (PAC)-Dateien verwendet.