Ganz ehrlich: Das hätte nicht passieren dürfen. Am Samstag, dem 10. Oktober, ist der Reverse-Proxy auf einer unserer Edges abgestürzt. Ursache war ein Fehler in Caddy selbst, den die Entwickler kurz darauf behoben haben. Das eigentliche Problem war nicht der Absturz. Diese eine Edge trug den gesamten Traffic, der Proxy startete sich nicht selbst neu, und nichts lenkte den Verkehr woandershin. Bis wir eingegriffen haben, kamen keine Messungen an.
Für ein Monitoring-Tool sind Ausfälle besonders unangenehm.
Seit Sonntag haben wir uns deshalb für jede Station, die eine Messung auf dem Weg von deinem Shop in unsere Datenbank durchläuft, eine Frage gestellt: Was passiert, wenn genau das jetzt ausfällt?
So läuft eine Messung heute
Der Browser deines Besuchers sendet eine Messung
weiter zur Plattform
weiter zur Verarbeitung
weiter zur Speicherung
Die Edge: eine Adresse, die umzieht
Die naheliegende Lösung wäre gewesen, im DNS auf eine andere Edge umzuschalten. Das hilft aber nicht jedem: Manche Shops leiten unser Tracking über ihren eigenen Reverse-Proxy, und der fragt die Adresse oft nur einmal beim Start ab und merkt sich das Ergebnis. Eine DNS-Änderung erreicht ihn nie.
Deshalb zeigt fastmon.site jetzt auf eine sogenannte Floating IP. Das ist eine Adresse, die wir per API von einer Edge auf eine andere legen können, ohne dass sich im DNS etwas ändert. Unser Backend prüft jede Edge alle zehn Sekunden per Health-Check. Antwortet die aktive dreimal hintereinander nicht, während eine andere durchgehend gesund ist, zieht die Adresse um.
Dazu kommen drei kleinere Dinge, die zusammen viel ausmachen: Ein abgestürzter Proxy startet nach fünf Sekunden von selbst neu. Alle Edges teilen sich die TLS-Zertifikate, sodass der Ersatz sofort gültig antworten kann. Und bei einem geplanten Update meldet sich eine Edge vorher ab, die Adresse zieht um, bevor der Neustart beginnt.
Redundante Wege in die Infrastruktur
Hinter der Edge ging bisher jede Messung über genau einen Ingress in unsere Infrastruktur. Jetzt sind die Wege redundant: Bevorzugt geht es über den ScaleCommerce Ingress, als Ausweichweg steht der Ingress über smoxy bereit.
Die Edge prüft den direkten Weg jede Sekunde. Fällt er aus, schickt sie die Messungen nach etwa zwei Sekunden über den Ausweichweg. Eine Messung, die schon unterwegs war und keine Antwort bekommen hat, sendet sie dort noch einmal. Kommt sie dadurch doppelt an, fassen wir sie im Backend wieder zusammen. Eine doppelte Messung kostet uns nichts. Eine verlorene kostet dich ein Stück deiner Daten.
Damit ein einzelner langsamer Request nicht gleich einen Weg sperrt, braucht es mehrere Fehler in kurzer Folge. Und selbst wenn für einen Moment kein Weg frei ist, wartet die Edge kurz und versucht es erneut, statt aufzugeben.
Wenn eine Datenbank wackelt
Die Datenbank mit Konten und Einstellungen ist am 13. Oktober auf ihr Replica umgeschwenkt. Dabei bekamen für einen Moment einige Dutzend Messungen einen Fehler zurück, weil der Collector eine abgelaufene Einstellung nicht nachladen konnte.
Jetzt arbeitet er in diesem Fall mit dem zuletzt bekannten Stand weiter, statt abzulehnen. Er lässt die Datenbank dann zehn Sekunden in Ruhe und fragt erst danach wieder an, damit sich bei tausenden Messungen pro Sekunde nichts aufstaut. Auch das Tracking-Skript, das dein Shop lädt, hält er als Kopie im Speicher bereit.
Die Messdaten selbst liegen in ClickHouse, repliziert über mehrere Server. Bisher hat jeder Prozess aber nur mit einem davon gesprochen. Jetzt wechselt jeder Prozess selbst auf ein gesundes Replica, sobald sein bevorzugtes nicht antwortet, und kehrt erst zurück, wenn es alle verpassten Daten nachgeholt hat. Einen zusätzlichen Vermittler dazwischen gibt es nicht, der selbst wieder ausfallen könnte. Getestet haben wir das mit echten Replicas, die wir gezielt einzeln und gemeinsam abgeschaltet haben.
Was das für dich bedeutet
Fällt bei uns eine einzelne Komponente aus, merkst du davon im besten Fall nichts. Deine Messungen kommen weiter an, und dein Dashboard zeigt weiter, was in deinem Shop passiert.