Am 3.–4. Februar 2018 erreichte Fortnite Battle Royale einen Höchststand von 3,4 Millionen gleichzeitigen Spielern — nach einem vorherigen Höchststand von nur 60.000 wenigen Monaten zuvor — und das Wochenende wurde zu einer fortlaufenden Ausfallserie. Epics eigener Postmortem-Bericht, veröffentlicht am 8. Februar 2018, zählt sechs separate Vorfälle mit einer Mischung aus teilweisen und vollständigen Dienstunterbrechungen.

Die tiefsten Einschnitte lagen beim MCP-Profil-Dienst, gestützt auf neun MongoDB-Shards, die 318.000 Lese- und 132.000 Schreibvorgänge pro Sekunde bewältigten. Der Matchmaking-Shard begann, Schreibvorgänge in die Warteschlange zu stellen, einzelne Operationen auf über 40.000 Millisekunden hochschnellen zu lassen und jeden MCP-Thread zu blockieren; er erholte sich nie von selbst, sodass Betreiber mehrere Male pro Stunde manuelle Primary-Failover durchführten. Eine zweite Wunde: Eine Änderung der Paketierung hatte die Thread-Anzahl des Dienstes stillschweigend unter den vorgesehenen sicheren Wert gedeckelt, und die jüngste „Korrektur“ — deren Rücknahme — hungerte Datenbank-Verbindungspools nur bei Produktionsspitzenlast aus, was einen Rollback erzwang.

Am Sonntag fiel der Account Service von 18:30 bis 20:20 UTC aus: Memcached-Instabilität ließ Nginx bei 100-ms-Timeouts blockieren, bis seine Worker-Threads erschöpft waren, Health-Checks ertranken, und der Load Balancer zog jeden Knoten ab — die Anmeldung war weltweit blockiert. In derselben Nacht versagte die XMPP-Sozialschicht während eines Notfall-Blue/Green-Failovers: Der Ansturm der Wiederverbindungen überrollte den Load Balancer des Friends Service, der keine Ersatzknoten bereitstellen konnte, weil sein Subnetz keine freien IPs mehr hatte. Spieler waren verbunden, sahen aber jeden Freund als offline — ein „dunkler Raum“.

Cloud-Obergrenzen verschlimmerten es: Tausende c4.8xlarge-Instanzen näherten sich dem Instanzlimit der Region, und /24-Subnetze mit 251 nutzbaren IPs waren erschöpft, was die Wiederherstellung der Load Balancer in die Länge zog. Epic flog MongoDB-Experten ein, versprach eine Neuarchitektur des Messaging-Stacks und von MCP und beendete den Postmortem-Bericht mit einem Recruiting-Aufruf — ein kleines Team erfahrener Online-Entwickler hatte das größte PC-/Konsolenspiel der Welt online gehalten, bis die Zahlen ihm entliefen.

Sechs teilweise und vollständige Unterbrechungen am 3.–4. Februar 2018: Anmeldungen blockiert, Matchmaking eingefroren, Freunde als offline angezeigt; manuelle Failover liefen stündlich.

Der Matchmaking-Zustand lag auf einem einzigen gemeinsam genutzten Shard; als dessen Writer in die Warteschlange geriet, blockierte jede MCP-Operation, und die einzige Wiederherstellung war ein manuelles Primary-Failover.

Eine Änderung der Paketierung hatte die MCP-Dienst-Threads unter den sicheren Standardwert gedeckelt; die Korrektur selbst hungerte Datenbank-Verbindungspools bei reiner Produktionsspitzenlast aus und musste zurückgerollt werden.

Der gesamte Verkehr des Account Service lief über einen Nginx-Proxy, dessen Worker bei 100-ms-Memcached-Timeouts blockierten; gesättigte Worker scheiterten an Health-Checks, und der Load Balancer entfernte jeden Knoten.

Der Failover-Pfad für den Friends Service benötigte freie IPs in einem /24-Subnetz — 251 Adressen — und der Ansturm der Wiederverbindungen erschöpfte sie mitten im Vorfall.

XMPP lief als Full-Mesh-Cluster (101 Knoten, je ~1.000 Sockets allein für Cluster-Links) mit einer harten Knoten-Obergrenze, sodass Kapazität der Sozialschicht nicht einfach hinzugefügt werden konnte.

Wachstum überholt die Architektur schneller, als Einstellungen es beheben können: Bei 50-facher Skalierung werden eine ungetestete Thread-Einstellung, ein 251-IP-Subnetz und ein einzelner heißer Shard jeweils zu Ausfällen.

Die Fixliste des Postmortem-Berichts liest sich wie ein Neuarchitekturprogramm: die Ursache der MongoDB-Schreibwarteschlange mit Experten vor Ort ergründen, Matchmaking-Sitzungen in In-Memory-Speicher verlagern, Nicht-Verifizierungs-Verkehr am Nginx/Memcached-Paar vorbeileiten, die Subnetz-Kapazität beheben und den Blast Radius verringern, indem Kern-Dienste über Regionen und Clouds verteilt werden. Epic veröffentlichte weiterhin Fortnite-Dienst-Updates, während das Spiel weiter wuchs, und der Postmortem-Bericht wurde zu einer Standardreferenz dafür, wie virales Wachstum jede latente Fehlkonfiguration in einen Ausfall verwandelt.

DEN BELEGEN FOLGEN

Die Quellen

  1. Postmortem of Service Outage at 3.4M CCU Epic Games (Fortnite news) · epicgames.com ·
  2. Postmortem of Service Outage at 3.4M CCU (archived copy) Internet Archive Wayback Machine · web.archive.org ·
  3. Postmortem of Service Outage at 3.4M Concurrent Users (discussion) Hacker News · news.ycombinator.com