Die Veröffentlichung von Dragonflight liegt nun seit Kurzem hinter uns, daher wollten wir uns die Zeit nehmen und euch Näheres dazu erzählen, was aus Engineering-Sicht in den letzten paar Tagen geschehen ist. Wir hoffen, dass wir euch damit einen besseren Einblick geben können, was alles für so eine weltweite Veröffentlichung nötig ist, was wir uns erhoffen, welche Schwierigkeiten sich auf dem Weg ergeben können und wie wir mit ihnen umgehen.Intern nennen wir Ereignisse wie den 29. November „Content Launch“ (Inhaltsveröffentlichung), weil die Veröffentlichung einer Erweiterung ein Prozess ist und kein Tag. World of Warcraft ist alles andere als ein statisches Spiel, das sich noch genau so verhält wie vor 18 Jahren (oder auch nur vor zwei Jahren). Es befindet sich in ständiger Veränderung und Wachstum und unsere Entwicklungsprozesse wandeln sich auch.Erweiterungen bestehen jetzt aus mehreren kleineren Veröffentlichungen: Der Code geht zuerst mit dem alten Inhalt live, dann werden Vorbereitungsereignisse und neue Systeme aktiviert und zuletzt – am Tag der Inhaltsveröffentlichung – neue Bereiche, Quests und Dungeons. Jede Phase ändert andere Parameter, damit wir Probleme ausfindig machen und beheben können. Aber in jedem großen, komplexen System kann das Unerwartete jederzeit passieren.Eine Änderung bei dieser Erweiterung war, dass die Inhaltsveröffentlichung mit einem zeitlich fixierten Ereignis ausgelöst wurde – mehrere Änderungen im Spiel können ausgelöst werden, um zu einem bestimmten Zeitpunkt umgesetzt zu werden. Diese Änderungen manuell vorzunehmen, birgt das Risiko von menschlichem Versagen oder Ausfällen von internen oder externen Tools. Mit einem zeitlich fixierten Ereignis können diese Risiken vermindert werden.Eine weitere Änderung in Dragonflight: die Unterstützung für verschlüsselte Spieldatenprotokolle wurde deutlich verbessert. Verschlüsselte Protokolle ermöglichen es uns, unseren Client mit den Daten zu versorgen, die das Spiel braucht, um Videosequenzen und Sprüche wiederzugeben oder Quests freizuschalten, aber sorgen dafür, dass diese Daten nicht abgerufen werden können, bevor Spieler sie im Spiel erleben. Wir wissen, dass die Community WoW liebt. Und wenn man Lust auf jeden kleinen Leckerbissen hat, ist es schwierig, sich nicht schon vor dem Hauptgang damit satt zu essen. Verschlüsselte Protokolle ermöglichen es uns, kritische Punkte der Geschichte bis zum richtigen Zeitpunkt vor Spielern zu verbergen.Wir wissen jetzt, dass die Verzögerungen und die Instabilität von letzter Woche dadurch verursacht wurden, wie diese zwei Systeme interagiert haben. Das Ergebnis: Der Simulationsserver (der eure Charaktere auf der Welt bewegen lässt und ihre Zauber und Fähigkeiten ausführt) wurde gezwungen, mehr als 100-mal pro Sekunde Simulation neu zu berechnen, welche Protokolle versteckt werden müssen. Da ein großer Teil der CPU-Leistung für diese Berechnungen erforderlich war, wurden die Simulationen verlangsamt und es bildete sich ein Stau von Anfragen von anderen Diensten für diese Simulationsserver. Für Spieler ist dies als Verzögerungen und Fehlermeldungen wie „Welt-Server nicht aktiv“ zu sehen.Wir haben herausgefunden, dass Protokolle, die bis zu einem zeitlich fixierten Ereignis verschlüsselt waren, einen kleinen Logikfehler im Code aufwiesen: Eine Codezeile an der falschen Stelle gab dem Server das Signal, dass er immer wieder neu berechnen musste, welche Protokolle verborgen werden mussten, obwohl sich nichts geändert hatte.Hier haben wir nähere Details dazu, wie diese Nachforschungen ausgesehen haben. Die Uhr schlägt 15:00 Uhr in unserer Zeitzone. Aus den Tests wissen wir, dass zuerst das Hordeschiff und dann das der Allianz erscheinen soll. Viele von uns sind im Spiel eingeloggt, im einen Computerfenster warten unsere Charaktere an den Docks an beiden Orten, in anderen Fenstern behalten wir Protokolle oder Graphen oder Dashboards im Blick. Außerdem sind wir mit unseren Kollegen aus Supportteams aller Ecken von Blizzard in einer Videokonferenz.Vor der Veröffentlichung haben wir Notfallpläne für Situationen erstellt, die uns nach der Testphase Sorgen bereitet haben. Beispielsweise haben unsere Designer für diese Veröffentlichung Portale erstellt, die Spieler zu den Dracheninseln bringen konnten, falls die Schiffe nicht funktionierten.Um 15:02 Uhr erscheint das Hordeschiff nach Plan. Hurra! Die Spieler steigen ein, darunter auch Blizzard-Mitarbeiter. Andere Mitarbeiter warten (sie wollen die Portale testen, falls diese notwendig werden). Die Spieler im Schiff legen ab, und während einige die Dracheninseln auch wirklich erreichen, verlieren viel mehr ihre Verbindung oder bleiben stecken.Sofort sehen wir uns die Protokolle und Dashboards an. Einige Spieler befinden sich auf der Karte der Dracheninseln, aber nicht viele. Kollegen, die dieselben Probleme haben, melden ihre Charakternamen und Realms als spezifische Beispiele. Andere melden Spitzen bei der CPU-Auslastung und auf unserem NFS (Network File Storage), das unsere Server nutzen. Wieder andere sehen sich die Sache im Spiel an und melden, was sie sehen.Die Hordeschiffe haben wir gesehen, jetzt halten wir langsam Ausschau nach den Allianzschiffen. Die meisten von ihnen tauchen nicht auf und die meisten Hordeschiffe kehren nicht zurück.Ein Bild formt sich: Die Schiffe hängen fest und die Server der Dracheninseln brauchen viel mehr Zeit als erwartet. Jetzt ist die Zeit, in der wir uns wirklich an die Arbeit machen und das Problem angehen. Es ist nicht das erste Mal, dass wir Probleme mit Schiffen haben, also aktivieren wir die Portale, während wir unsere Nachforschungen fortsetzen. Unser NFS ist eindeutig überlastet. Auf dem Server gibt es eine riesige Netzwerkwarteschlange, die für die Koordination der Simulationsserver verantwortlich ist und sie glauben lässt, dass die Simulationen nicht starten. Dadurch werden immer mehr gestartet und diese überlasten unsere Hardware. Bald müssen wir feststellen, dass die Portale diese Überlastung nur verschlimmert haben, weil Spieler die Portale beliebig oft anklicken können. Wir deaktivieren die Portale also wieder.Während das Problem weiterbesteht, arbeiten wir an der erhöhten Last, damit so viele Spieler wie möglich spielen können, aber der Dienst verhält sich anders als in den Tests vor der Veröffentlichung. Wir suchen weiter nach einer Lösung und ignorieren Dinge, die nicht für das Problem verantwortlich sein können, wie wir von unseren Tests wissen.Es ist schon spät, aber viele arbeiten weiter. Andere gehen nach Hause, um zu schlafen, damit sie am nächsten Tag früh zur Arbeit kommen und jene ablösen können, die die Nacht durcharbeiten werden.Am Dienstagmorgen haben wir einen besseren Überblick über die Lage. Wir wissen, dass wir den Clients mehr Nachrichten zu Quests als sonst schicken, obwohl spätere Entdeckungen zeigen werden, dass das das Problem nicht verursacht. Eine neue Dateispeicher-API lässt unseren Dateispeicher härter als sonst arbeiten. Neue Codes für Questgeber, die Spieler anlocken sollen, scheinen langsamer als erwartet. Der Dienst braucht sehr lange, um den Clients alle Datenänderungen der Hotfixes zu senden. Berichte kommen herein, dass Spieler, die die Dracheninseln erreicht haben, extreme Verzögerungen feststellen.Am Dienstagvormittag bringt uns ein Zufall auf eine neue Spur: Wir sehen uns diesen neuen Code genauer an und finden Verbindungen zum neuen Verschlüsselungssystem. Wir gehen die Frage jetzt von der anderen Seite an: Könnte das langsame Verschlüsselungssystem dieses und andere Probleme erklären? Und es stellt sich heraus: Ja, kann es. Das langsame Verschlüsselungssystem ist die Erklärung für das Problem mit den Hotfixes, mit dem Dateispeicher und mit der Verzögerung, die Spieler sehen. Die Ursache ist erkannt und damit kann der Autor des entsprechenden Teils im System den Fehler finden und die benötigte Korrektur vornehmen.Eine Änderung im Code vorzunehmen, der von so vielen Diensten verwendet wird, ist nicht so einfach, wie einen Schalter umzulegen. Neue Binärdateien müssen veröffentlicht und aktiviert werden. Wir müssen Spieler langsam von den alten Simulationen zu den neuen bringen, damit die Änderungen wahrnehmbar werden. Einmal sind wir zu schnell damit, Spieler zu verschieben, wodurch ein anderer Teil des Systems in Mitleidenschaft gezogen wird. Einige der betroffenen Binärdateien können nicht ohne einen Neustart des Dienstes korrigiert werden, den wir aufschieben, bis möglichst wenige Spieler online sind, um diese nicht zu stören. Bis Mittwoch war die Lösung implementiert und die Dienststabilität deutlich verbessert.Auch wenn einiges notwendig war, um das Problem zu finden und zu beheben, war unser Team unglaublich aufmerksam bei den Nachforschungen und konnte schnellstmöglich eine Lösung finden. Gutes Softwareengineering bedeutet nicht, niemals Fehler zu machen. Es bedeutet, die Wahrscheinlichkeiten für Fehler zu verringern, wenn sie doch auftreten, diese schnell zu finden, die Werkzeuge parat zu haben, um die Lösungen sofort zu implementieren …… und ein großartiges Team aufzubauen, das all das erst möglich macht.– Das Engineering-Team von World of Warcraft