Destiny 2 – Entwickler-Kommentar zum gestrigen Rollback!

Nachdem gestern erneut die Server offline genommen werden mussten und ein erneuter Rollback stattfinden musste, äußerte Bungie sich nun in einem bemerkenswert transparenten Statement zu den Problemen.

Die offizielle deutsche Version lässt aufgrund der Zeitverschiebung auf sich warten (danke für die Info, Maurice!), daher haben wir das Statement bereits selbst für euch übersetzt. 

Destiny 2 Downtime und Rollback

Gestern (Dienstag, 11. Februar), nach dem Release von Hotfix 2.7.1.1, wurden wir auf das erneute Auftreten eines Problems aufmerksam gemacht, das bei einem kleinen Prozentsatz der Spieler zu Währungs- und Materialverlusten führte. Dies geschah bereits nach dem ersten Auftreten dieses Problems, das am 28. Januar mit der Einführung von Hotfix 2.7.1.1 bei allen Spieler dafür sorgte, Glimmer und Material zu verlieren, und das zu einem Rollback der Spielerkonten führte. Mit dem heutigen Vorfall haben wir ähnliche Schritte unternommen und die Konten auf den Stand zurückgesetzt, auf dem sie sich um 17:30 Uhr deutscher Zeit (vor der Einführung von 2.7.1.1) befanden.

Da diese beiden Vorfälle in Ursache und Wirkung auf unsere Spieler identisch sind und da beide Vorfälle in einem engen Zeitfenster stattfanden, wollten wir euch ein Bild davon vermitteln, was schief gelaufen ist, wie wir es behoben haben und wie wir sicherstellen wollen, dass sich dies in Zukunft nicht mehr wiederholt. Schauen wir uns zunächst einmal an, was dieses Problem überhaupt verursacht hat: ein Spielfehler, der die Bestandsverwaltung betraf, und eine Reihe von Serverkonfigurationen, die den Fehler nach seiner Behebung wieder einführten.

Inventar Management

In Destiny 2 werden Quests ähnlich wie andere Inventarobjekte, wie z.B. Währung und Materialien, behandelt. Alle Gegenstände haben einen Zeitstempel, der darauf basiert, wann sie zum ersten Mal dem Inventar eines Spielers hinzugefügt wurden. Dieser Zeitstempel wird verwendet, um Quests in der Reihenfolge zu sortieren, in der sie erworben wurden. Das Spiel bereinigt das Inventar eines Spielers bei jedem Einloggen, um sicherzustellen, dass es mit allen inhaltlichen Änderungen konsistent ist, z.B. mit der maximalen Anzahl von Gegenständen eines bestimmten Typs, die der Spieler mit sich führen kann.
Vor einigen Monaten berichteten Spieler, dass die Sortierung der Quests nicht richtig funktionierte und wir wollten das beheben. Das Team untersuchte dies und stellte fest, dass der Aufräumprozess den Zeitstempel einiger Quests zurücksetzte, was die chronologische Sortierung durcheinander brachte. Wir beschlossen, dies zu beheben, indem wir das Zurücksetzen des Zeitstempels bei den Quests deaktivierten. Diese Korrektur war eigentlich sinnvoll, aber durch subtile Nebenwirkungen wurde der Bereinigungsprozess schließlich zu stark beeinflusst. Das Ergebnis war, dass das Spiel für gestapelte Gegenstände (wie Währungen und Materialien) die falsche Menge des Limitcaps berechnete, wodurch Gegenstände über der Höhe des Caps verloren gingen. Wir wussten, dass dieser Code kritisch war und gemäß unserem typischen Verfahren ließen wir zwei Domänenexperten den Code für die Änderung überprüfen – aber leider haben wir den Fehler nicht entdeckt.

Einige Tage später haben unsere internen Testteams dieses Problem erkannt. Wir kamen jedoch fälschlicherweise zu dem Schluss, dass es durch einen Fehler in den Tools der Debug-Workflows, die wir zum Testen verwenden und nicht durch einen tatsächlichen Fehler im Spiel verursacht wurde. Nachdem es sich uns all unserer Sorgfalt entzogen hatte, wurde das Problem in 4.7.1. live geschaltet. Nachdem der Fehler im Live-Spiel identifiziert wurde, bestand der nächste Schritt darin, herauszufinden, wie er behoben werden kann, was uns zur nächsten Diskussion führt: Spielserver und ihre Konfigurationen.

Server Einstellungen

Vor jedem größeren Release (z.B. Shadowkeep) führen wir umfassende Stresstests durch, um das Benutzerverhalten und seine Auswirkungen auf unsere Server-Architektur zu modellieren. Da es keinen Ersatz für Millionen von realen Spielerverhalten gibt, ergänzen wir diese Tests durch eine genaue Überwachung der Servermetriken nach der Einführung.

Um die erhöhte CPU- und Spielerlast für die Einführung von Shadowkeep zu bewältigen, haben wir bereits im Oktober zusätzliche Server (in diesem Fall WorldServer genannt) in Betrieb genommen; mehr Server, als wir jemals zuvor für diese Aufgabe verwendet haben. Der Betrieb mit so vielen Servern hatte einige kleine Nebeneffekte, die wir verfolgten, die aber im Allgemeinen für die Spieler nicht sichtbar waren. Ein Problem war zum Beispiel, dass ein kleiner Prozentsatz (weniger als 1 Prozent) dieser Server beim Start abstürzte, weil das Volumen der Server eine der unterstützenden Datenbanken überwältigte. Unsere Abhilfe bestand darin, die abgestürzten Server jedes Mal, wenn wir dieses Problem feststellten, einfach manuell neu zu starten, und dies schien das Problem ohne erkennbare Nebenwirkungen für die Spieler zu lösen.

Spulen wir bis vor zwei Wochen vor. Das Update 2.7.1 brachte den oben erwähnten Fehler mit sich, der eine Beschädigung der Charakterdaten verursachte und zu unserem allerersten Rollback führte. Um dieses Problem schnell zu beheben, haben wir einen Patch auf die Server aufgespielt, anstatt zu versuchen, einen vollständigen Build des Spiel-Codes zu installieren. Dies beinhaltete eine Änderung der Servereinstellung, um den Spielcode, der zur Verarbeitung der Charakterdaten verwendet wurde, außer Kraft zu setzen und dann einen Neustart der WorldServer, um diese Änderung zu übernehmen.
Spulen wir noch einmal bis gestern, den 11. Februar, vor, als wir das Update 2.7.1.1 zeitgleich mit der Einführung der Crimson Days herausgebracht haben. Nach dem Start stürzten einige der WorldServer erneut beim ab, weil eine große Anzahl von Servern gleichzeitig startete. Wir haben diese Server erneut manuell neu gestartet und dachten, alles sei in Ordnung. Wir haben uns geirrt.

Wir wussten nicht, dass dieser Absturz dazu geführt hat, dass diese WorldServer die vorherige Korrektur für die Beschädigung der Charakterdaten nicht mehr angewendet haben. Dies bedeutete, dass ein kleiner Prozentsatz der WorldServer den alten Code und den Fehler, der die Charakterdaten korrumpierte, ausführte. Wir verfügen über Verifizierungssysteme, die diese Art von Versionsfehlkonfigurationen erkennen, aber der Absturz der WorldServer und die anschließenden manuellen Neustarts führten dazu, dass die Server den Verifizierungsprozess ebenfalls übersprangen. Bis gestern Abend haben wir geglaubt, dass das Überspringen dieser Überschreibungen und Verifizierungen unmöglich sei.

Als Teil unserer Standardverfahren zur Verifizierung eines neuen Builds, lassen wir unsere Testteams sich auch mit einer Reihe von Testkonten einloggen, um die Erfahrung der Spieler zu überprüfen. Da wir Hunderte von Servern in unserer Umgebung haben, war jeder manuelle Test, den wir durchgeführt haben, (un)glücklich genug, um die „guten“ Server zu treffen, und alle haben den kleinen Prozentsatz der Server, die in einem „schlechten Zustand“ waren, übersehen. Also gaben wir grünes Licht.

Heute, als das Spiel nach dem Einsatz von 2.7.1.1 wieder aufgenommen wurde, haben wir Berichte der Spieler über verlorene Währungen gesehen. Das Team begann sofort mit den Ermittlungen und nahm das Spiel um 17.30 Uhr (deutscher Zeit) offline. In dieser Zeit hatten sich Hunderttausende von Spielern in das Spiel eingeloggt oder über einen Drittanbieter (z.B. die App Ishtar Commander) auf ihre Charaktere zugegriffen. Unsere Untersuchung deckte eine unserer Meinung nach unmögliche Situation auf: eine kleine Anzahl unserer WorldServer wurde ohne die korrekte Konfiguration geladen, die die Korruptionsprobleme von 2.7.1. behoben hatte. Leider stieß jeder, dessen Charaktere über einen dieser veralteten Server aufgerufen wurden, auf das Problem der Charakterbeschädigung.

Nachdem wir festgestellt haben, dass es sich um dasselbe Problem handelt, das auch am 28. Januar auftrat und wir verstanden haben, wie das passiert ist, beschloss das Team, dass es das Beste ist – anstatt zu versuchen, jeden betroffenen Account zu identifizieren und dabei zu riskieren, etwas zu übersehen – alle Charakterdaten aus dem Backup wiederherzustellen, das kurz vor dem Rollout des Patches 2.7.1.1 durchgeführt wurde.

Vorbeugende Maßnahmen

Das Team hat eine Reihe von zusätzlichen Sicherheitsvorkehrungen entwickelt, die dieses Problem in Zukunft verhindern sollen.

  1. Wir haben weitere Sicherheitsvorkehrungen für das „Hot-Patching“ unserer Server getroffen, um sicherzustellen, dass sie nicht mit einer unerwarteten Version starten können. Diese Änderung ist bereits mit dem Neustart der Server in Kraft getreten.
  2. Wir haben das Problem behoben, das dazu führte, dass ein kleiner Teil der WorldServer beim Start abstürzte. Dieser Fix wird mit Saison 10 eingeführt.
  3. Der permanente Fix der Charakterbeschädigung wird in die nächste Aktualisierung als ausführbare Änderung übernommen, so dass die Notwendigkeit der Konfigurationsüberschreibung entfällt. (Leider war der Hotfix 2.7.1.1 zu weit fortgeschritten, um davon zu profitieren).
  4. Mit Blick auf die Zukunft untersuchen wir Möglichkeiten, unsere Rollback- und Wiederherstellungsmechanismen zu beschleunigen.
  5. In einem zukünftigen Update werden wir uns mit dem Problem befassen, das dazu führen kann, dass Server das Laden von Konfigurationsdaten überspringen.
  6. Wir werden auch mehr Schutzmaßnahmen  in den Code der oben beschriebenen Account-Login Bereinigung aufnehmen, um zu verhindern, dass zukünftige Fehler in einen so kritischen Bereich fallen.
  7. Wir sind dabei, unsere Entwicklungsmethodik zu aktualisieren, um Probleme wie dieses früher in der Veröffentlichungspipeline abzufangen.

Mit dem gestrigen Rollback wurden alle Charakterkonten nun in den Zustand gesetzt, in dem sie sich gegen 17.30 Uhr (deutscher Zeit) befanden. Das Team arbeitet außerdem hart an der Vorbereitung von Hotfix 2.7.1.2, der am 13. Februar live gehen soll. Dieser Hotfix wird übrigens auch einen Fix für das „unendlich Dawnblade“-Problem enthalten.

Wir wissen, dass der heutige Ausfall und Rollback der Charaktere frustrierend für euch war, insbesondere mit dem Start der Crimson Days, genauso wie es für uns frustrierend war, zu erkennen, dass dies ein Problem ist, das wir hätten vermeiden können. Wir entschuldigen uns für die Frustration und die Unannehmlichkeiten und wir werden weiterhin daran arbeiten, dass sich solche Dinge nicht wiederholen.
Wie immer, wenn ihr Probleme mit eurem Destiny Erlebnis habt, könnt ihr uns auf unserer Bungie-Hilfe-Seite und auf Twitter @BungieHelp erreichen.

Vielen Dank für eure Geduld!

Quelle