Hallo allerseits! Ich weiß, dass die Gildenschiffe in letzter Zeit für viele Gilden verschwunden sind, und es scheint, als gäbe es sie schon immer. Die gute Nachricht ist, dass es nach der Veröffentlichung von 6.1.4 viel besser werden sollte. Da dies schon eine Weile her ist, wollte ich mir ein bisschen Zeit nehmen, um euch allen einen Blick hinter die Kulissen zu werfen und zu erklären, warum es so schwer war, sie aufzuspüren. Ich möchte auch, dass ihr versteht, wie sehr wir Ihre Forenbeiträge und Fehlerberichte schätzen. Selbst wenn wir nicht antworten, schaue ich als Entwickler bei der Untersuchung eines Backend-Problems immer zuerst nach Protokollen. Je detaillierter die Berichte sind, desto leichter fällt es mir, etwas zu finden.
Ein bisschen Hintergrundwissen im Backend Wie bei vielen Spielen speichern wir unsere persistenten Charakterdaten in einer Datenbank. Um Updates schneller zu machen, haben wir eine Cache-Schicht zwischen dem Spiel und der Datenbank, die Updates stapelt. Dann schreiben wir den Stapel in die Datenbank. Der Vorteil ist, dass wir eine bessere Leistung erzielen. Der Nachteil ist jedoch, dass wir den gesamten Stapel abbrechen, wenn der Stapel ein schlechtes Update enthält. In den meisten Fällen führt der Abbruch dazu, dass Charaktere zur Charakterauswahl gekickt werden. Dies ist nicht besonders gut, aber besser als die beschädigten Daten. Das Gute ist, diese Fehler sind ziemlich selten und haben für uns immer die höchste Priorität.
Warum kann ein Update fehlschlagen? Nun, eines der raffiniertesten Dinge, die man mit einer Datenbank tun kann, ist das Definieren einer Einschränkung für die Daten. Das ist eine Regel, die niemals gebrochen werden kann. Jetzt ist die Datenbank die letzte Verteidigungslinie gegen Fehler und Beschädigungen der Daten. Für diese Geschichte liegt die wichtige Einschränkung bei eindeutigen Charakternamen. Wenn wir versuchen, einen Stapel von Updates zu schreiben, und eines der Charaktere in diesem Update denselben Namen wie jemand anderes in der Datenbank hat, wird der Stapel abgebrochen.
Ein Opfer unseres eigenen Erfolgs Nun, Sie alle erinnern sich vielleicht an einige Beschwerden in den Foren in letzter Zeit über nicht funktionierende Charakterumbenennungen. Hinter den Kulissen haben wir eine große Liste aller Namen auf jedem Server. Wenn also jemand versucht, einen Namen zu verwenden, der verwendet wird, wird die Umbenennung abgelehnt, bevor sie sich der Datenbank nähert. Nun ... wie wird diese Liste von Namen erstellt, könnte man fragen. Bevor wir Sie nach einem Neustart auf die Server lassen, fragen die Server die Datenbank nach dieser Liste von Namen, damit sie später schnelle Entscheidungen treffen können.
Hier ist der Teil, in dem wir Opfer unseres eigenen Erfolgs geworden sind. Es stellt sich heraus, dass der Programmierer, der diese Datenbankabfrage im Jahr 2009 geschrieben hat, einen Parameter hinzugefügt hat, der angibt, wie weit in der Vergangenheit nach genommenen Namen gesucht wurde. Er hat zufällig 3000 für die Standardanzahl von Tagen gesetzt. Ja, das sind etwas mehr als 8 Jahre, und wir haben vor etwas weniger als 9 Jahren gestartet. Es ist ein bisschen anders wegen einiger Datenbankwartungen, die wir im ersten Jahr durchgeführt haben, aber ihr versteht es. Jeder, der versucht hat, einen Charakter mit einem der Namen umzubenennen, der zuletzt vor mehr als 8 Jahren gespielt wurde, würde die Umbenennung so aussehen lassen, als wäre sie erfolgreich, aber dann sagt die Datenbank nein.
Zum Glück war das eine ziemlich einfache Lösung, erhöht einfach die Anzahl. (Wenn wir ab 2093 Probleme mit der Umbenennung haben, könnt ihr mich gerne anschreien!)
OK .. aber warum sollte das etwas mit Gildenschiffen zu tun haben? Nun, es stellt sich heraus, dass manchmal die Daten, die Informationen über Ihre Gildenschiffe speichern, Teil des Stapels waren, der wegen einer schlechten Umbenennung rausgeschmissen wurde. Ja, ich weiß, dass die Probleme mit Gildenschiffen seit Jahren auftreten, aber das liegt daran, dass die Gildenschiffe manchmal ins Kreuzfeuer gerieten, wenn wir Datenbankfehler hatten. Wie ich oben erwähnt habe, haben wir die Datenbankfehler immer sehr schnell behoben, sodass sich die Leute über Gildenschiffe beschwerten, aber dann konnten wir sie nicht reproduzieren und sie sind abgestorben, weil wir den Datenbankfehler bereits behoben hatten.
Hier sind die guten Nachrichten, diesmal ist es wirklich behoben. Wir haben beide den Umbenennungsfehler behoben und dank der Gilden, die sehr aktuelle Informationen gegeben haben, konnten wir die Gildenschiffe erkennen, die ins Kreuzfeuer geraten. Jetzt, da wir wissen, was los ist, konnten wir es so machen, dass das Gildenschiff automatisch neu geladen wird, wenn es mit einer schlechten Charge gestapelt wird. Also keine verschwindenden Flaggschiffe mehr, selbst wenn wir in Zukunft Datenbankfehler haben. Diesmal wirklich. * (Wir hoffen!)