Behebung des Problems mit der Service-Instabilität von Kagi.com
- Untersuchung läuft – Nach einem Deployment trat ein Problem auf, und das Team arbeitet an der Behebung. (12. Januar, 16:45 UTC)
- Monitoring – Eine Konfigurationsänderung, die als Ursache des Problems vermutet wird, wurde zurückgenommen, und es wird fortlaufend überwacht, ob der Service in den Normalzustand zurückkehrt. (12. Januar, 18:30 UTC)
- Update – Um die Stabilität vollständig wiederherzustellen, wird der Traffic vorübergehend gestoppt und die Nutzer werden auf diese Seite umgeleitet. Weitere Details werden bereitgestellt, sobald sich die Lage entwickelt, während der Service kontrolliert wieder hochgefahren wird. (12. Januar, 20:26 UTC)
- Monitoring – Der Traffic wurde wiederhergestellt, und es wird weiterhin überwacht, ob der Service vollständig in den Normalzustand zurückkehrt. (12. Januar, 21:14 UTC)
- Behoben – Alle Services laufen wieder normal. Es wird den Nutzern dafür gedankt, dass sie auf die Behebung gewartet haben.
Postmortem
- Zac, der technische Leiter von Kagi, hat ein ausführliches Postmortem zum Ausfall der vergangenen Woche veröffentlicht.
- Als Reaktion auf den Vorfall arbeiteten Staff Engineer Seth und DevOps Engineer Luan gemeinsam an der Behebung.
- Es gab Akteure, die den Service missbrauchten und Engpässe in der Infrastruktur ausnutzten; es wurden sofortige Gegenmaßnahmen ergriffen, und in mehreren Bereichen von Code und Kommunikation laufen Verbesserungen.
Ablauf des Vorfalls
- Am 12. Januar gegen 17:30 Uhr wurde durch internes Monitoring und Problemmeldungen von Nutzern erkannt, dass ein Infrastrukturproblem aufgetreten war.
- Die Art des Problems führte bei Nutzern in verschiedenen Regionen zu langsamen Ladezeiten oder Timeouts von Seiten.
- Die Behebung nahm erhebliche Zeit in Anspruch; hier werden Hintergrund, Verlauf und die weiteren Pläne erläutert.
Technischer Ablauf der Fehlerbehebung
- Zunächst trat das Problem zufällig gleichzeitig mit einem Upgrade zusätzlicher RAM-Ressourcen für eine VM auf.
- Das Monitoring meldete hohe Latenzen sowie Probleme mit dem Database-Connection-Pool der Anwendung.
- Der Connection-Pool war ausgelastet, was bedeutete, dass die Gesamtzahl der Verbindungen das konfigurierte Maximum überschritt.
- Während der interne Zustand der Datenbank und die Query-Performance bewertet wurden, wurden einige Instanzen ersetzt, um zu testen, ob sich die Überlastung dadurch verringern lässt.
- Da es hilfreich zu sein schien, einige Instanzen auszutauschen, wurde der Nutzer-Traffic vorübergehend pausiert, um alle Connection-Pools auf einmal vollständig zurückzusetzen.
- Bei der Untersuchung des Datenbankzustands wurde klar, dass eine hohe Contention auf Zeilen in der Nutzertabelle die eigentliche Ursache war.
- Diese Contention erhöhte die Write-Latenz stark, erzeugte Backpressure auf den Connection-Pool der Anwendung und führte schließlich dazu, dass alle verfügbaren Verbindungen erschöpft waren.
- Kagi hatte bislang die günstigste Single-Core-Datenbank verwendet, die auf GCP verfügbar war, was das Risiko mit sich brachte, dass die Datenbank leicht lahmgelegt werden konnte.
- Es wurden böswillige Akteure identifiziert: darunter Konten, die innerhalb von 24 Stunden erstellt worden waren, sowie ein einzelnes Nutzerkonto, das in kurzer Zeit mehr als 60.000 Suchanfragen ausgeführt hatte.
- Für dieses Konto wurde die Suchfunktion entfernt, und es wurde ein Hotfix veröffentlicht, der den konkreten Schreibvorgang deaktivierte, der das Problem verursacht hatte.
- Bis Mitternacht war das Problem vollständig behoben, und es wird weiterhin genau überwacht, ob die Akteure zurückkehren.
Weitere Maßnahmen
- Aus diesem Vorfall wurde viel gelernt, und es laufen bereits unmittelbare Pläne, das System weiter zu härten und die Kommunikationsprozesse bei Störungen zu verbessern.
- Zunächst wird eingeräumt, dass die Updates auf der Statusseite nicht schnell genug waren.
- Es soll auf eine Statusseiten-Plattform gewechselt werden, über die sich automatisiertes internes Monitoring leichter für Nutzer sichtbar machen lässt, damit der Zustand der Plattform in Echtzeit nachvollziehbar ist.
- Die problemverursachenden Queries werden direkt entschärft, und es laufen Lasttests, um festzustellen, ob es weitere ähnliche Schwachstellen gibt.
- Zusätzliche Monitoring-Lösungen werden eingerichtet, damit in der Infrastruktur schneller an die richtige Stelle gezeigt wird und keine Zeit mehr damit verloren geht, wie in diesem Fall falschen Signalen nachzugehen.
- Die Systeme zur Erkennung solcher Formen des Missbrauchs werden verstärkt; da dies nicht nur Performance-Auswirkungen hat, sondern auch direkte Kosten verursacht, müssen automatisierte Limits eingerichtet und durchgesetzt werden.
- Neue Limits sind zum Zeitpunkt dieses Beitrags bereits in Kraft, und ihre Auswirkungen werden beobachtet und bei Bedarf weiter angepasst.
- Wer glaubt, dass der Zugriff auf Kagi fälschlich blockiert wurde, soll sich an support@kagi.com wenden.
Meinung von GN⁺
- Kagi hatte mit Write-Latenzproblemen durch Zeilen-Contention in der Nutzertabelle zu kämpfen, was Backpressure auf den Connection-Pool der Anwendung auslöste und zum Ausfall des Services führte.
- Diese Probleme waren eine Folge des Risikos, das daraus entstand, dass Kagi die günstigste Single-Core-Datenbank auf GCP verwendete.
- Das Kagi-Team zeigt mit Maßnahmen wie der Härtung des Systems, verbesserter Kommunikation mit den Nutzern und der Einführung automatisierter Limits zur Verhinderung von Missbrauch den Willen, Stabilität und Transparenz des Services zu erhöhen. Diese Bemühungen spiegeln KAGIs Absicht wider, den Nutzern einen verlässlicheren Service zu bieten.
1 Kommentare
Hacker-News-Kommentare
Meinungen zu dem Vorfall, der zeitgleich mit einem Infrastruktur-Upgrade auftrat
Erfahrungen eines Nutzers mit der Kagi-Statusseite
Kommentar, der persönliche Erfahrungen teilt
Kommentar zu den Erfahrungen von Startups
Kommentar zur Observability interner Systeme
Meinung eines zahlenden Nutzers zur Zuverlässigkeit von Kagi
Kommentar zu dem Scraper, der den Dienstausfall verursacht hat
Kommentar zu Nutzungserfahrungen mit Kagi und zum Postmortem
Kommentar zur auf GCP verwendeten Single-Core-Datenbank
Kommentar zu automatisiertem Scraping