Blog

Ausfallanalyse – 30. Mai 2013

von Ryan Duffield 7. Juni 2013 | 3 Minuten Lesezeit

Als Mitglied des Echtzeit-Entwicklungsteams von PagerDuty liegt mir die Entwicklung und Implementierung unserer Systeme mit hoher Verfügbarkeit und Zuverlässigkeit besonders am Herzen. Am 30. Mai 2013 kam es zu einem kurzen Ausfall, der die Zuverlässigkeit unserer Alarmierung beeinträchtigte. Dieser Beitrag fasst die Ereignisse zusammen und beschreibt unsere Maßnahmen, um ein erneutes Auftreten zu verhindern.

Auswirkungen

Am 30. Mai 2013 um 22:50 UTC wurden unsere Bereitschaftstechniker aufgrund eines Problems im Linode-Rechenzentrum in Fremont alarmiert. In diesem Rechenzentrum traten Netzwerkverzögerungen auf, was Linode etwa sechs Minuten später auf seiner Statusseite bestätigte.

Infolge dieses Problems starteten einige unserer Backup-Worker-Prozesse automatisch. Diese Backup-Worker-Prozesse sind für den Versand von Benachrichtigungen aus unseren verschiedenen Benachrichtigungswarteschlangen zuständig, insbesondere um die Ausfälle offline befindlicher Worker aufzufangen.

Leider wiesen diese Prozesse Mängel in der Fehlerbehandlung auf. Aufgrund des Ausfalls des Rechenzentrums waren die Fehlerraten erwartungsgemäß höher als üblich. Dies führte zu Verzögerungen bei der Verarbeitung einiger Benachrichtigungen. Im Zeitraum des Ausfalls verzögerten sich 7 % aller ausgehenden Warnmeldungen um eine inakzeptable Zeit. Letztendlich wurden jedoch alle Benachrichtigungen zugestellt, und es gingen keine verloren.

Zeitleiste

  • Um 22:50 UTC werden unsere Bereitschaftsingenieure über Netzwerkverbindungsprobleme im Linode-Rechenzentrum in Fremont informiert.
  • Um 22:56 UTC bestätigt Linode Netzwerkverbindungsprobleme in ihrem Rechenzentrum in Fremont.
  • Um 23:07 UTC stellen unsere Techniker fest, dass die Verarbeitung eines Backup-Workers in einer unserer Benachrichtigungswarteschlangen ins Stocken geraten ist, daher wird dieser Prozess manuell neu gestartet.
  • Um 23:14 UTC ist die Verarbeitung von Benachrichtigungen wieder normal.
  • Um 23:30 UTC bestätigt Linode, dass die Netzwerkverbindungsprobleme behoben sind.

Wie wir das Problem lösen

Der Fehler, der während dieses Ausfalls aufgetreten ist, wurde behoben. Obwohl wir unseren gesamten Code umfassend testen, ist uns dieser spezielle Fehler entgangen. Da dieser Codeabschnitt erst bei einem Ausfall des Rechenzentrums kritisch wird, konnten wir das Problem erst erkennen, als es in unserer Produktionsumgebung auftrat.

Wir werden die Tests von Code, der in Ausnahmesituationen ausgeführt wird, verbessern. Systeme so zu entwickeln, dass sie Ausfälle von Rechenzentren bewältigen, reicht allein nicht aus: Wir müssen kontinuierlich testen, ob sie wie vorgesehen funktionieren.

Wir führen zwar kontrollierte Ausfalltests in der Produktion durch, tun dies aber derzeit weder häufig genug noch testen wir genügend Ausfallfälle. Wir werden in Kürze einen regelmäßigen „Ausfall-Freitag“ einführen, an dem wir aktiv versuchen, eine Vielzahl kontrollierter Ausfälle herbeizuführen. Langfristig möchten wir auf unsere eigene Testumgebung umsteigen. Chaosaffe Dadurch werden diese Bedingungen kontinuierlich und zufällig erzeugt.