MMORPG Server Wartung

14

Es scheint, dass die meisten MMORPG-Spiele eine regelmäßige Serverwartung haben, einige jeden Tag, einige einmal pro Woche. Was müssen sie eigentlich tun und warum ist das notwendig?

Wenn Sie mit einem solchen Projekt beginnen, was können Sie tun, um dies zu vermeiden?

Zitrax
quelle

Antworten:

17

Ich vermute, dass sie die neueste Version ihres Codes bereitstellen, was erfordert, dass sie die Anwendung neu starten (und hoffentlich einige Tests ausführen, bevor sie den Zugriff wieder aktivieren). Aus dieser Sicht handelt es sich eher um ein StackOverflow-Problem als um ein ServerFault-Problem.

Ich denke, es ist möglich, ein Hot-Patching-System zu erstellen, aber es wäre notwendigerweise unglaublich kompliziert. Soweit ich weiß, besteht eine MMO-Server- "Anwendung" aus mehreren verschiedenen Komponenten:

  • Anmeldeserver - Ermöglicht die Authentifizierung und fungiert als "Hub" zwischen den Gameplay-Servern. Sobald ein Client im Spiel ist, interagiert er nicht mehr mit dem Anmeldeserver. In einem solchen System können Sie Patches anwenden und den Anmeldeserver neu starten, ohne das Gameplay zu beeinträchtigen (obwohl Sie einen Zeitraum haben, in dem sich Benutzer nicht anmelden können).

  • Gameplay-Server - Cluster von Maschinen, die zu logischen unabhängigen Einheiten ("Welten" usw.) zusammengefasst sind. Es wird davon ausgegangen, dass jedes Gameplay-Cluster eine Art internes Kommunikationsprotokoll verwendet, um dem jeweiligen Status zu entsprechen. Sie müssen wahrscheinlich jeden Cluster auf einmal patchen. Eine Möglichkeit, dies zu tun, besteht darin, ein Warm-Failover zu patchen. Dann müssten Sie beides können

    1. Signalisieren Sie dem Client, eine Verbindung zum Warmfailover herzustellen, und trennen Sie die Verbindung zum alten Cluster.
    2. Lassen Sie den Status zwischen dem Failover- und dem veralteten Anwendungsserver synchron, während alle Clients übertragen.
  • Datenbankserver - Eine Art persistenter Datenspeicher, z. B. ein RDBMS. Hoffentlich nehmen Sie nicht so oft Änderungen am Datenspeicher vor. Vermutlich hat jeder Gameplay-Server / Cluster einen unabhängigen Datenspeicher. Möglicherweise können Sie denselben Trick bei einem warmen Failover anwenden (und den Gameplay-Servern anweisen, die Verbindung zu trennen, auf die Synchronisierung der alten und der Failover-Datenbank zu warten und dann die Verbindung zum Failover wiederherzustellen), aber das scheint mir ziemlich riskant zu sein.

Alle oben genannten Fälle erhöhen die Komplexität eines bereits komplexen Systems und führen eine Reihe von Stellen ein, an denen ein Codefehler zu Datenverlust oder Beschädigung führen kann.

Eine andere Lösung ist die Verwendung einer Sprache, die für eine 100% ige Verfügbarkeit ausgelegt ist und über integrierte Funktionen zum Hotpatching von laufendem Code verfügt. Erlang ist eine gute Wahl ( Hotpatching-Beispiel ), und Java verfügt über ähnliche Funktionen .

horchen
quelle
12

Hat sonst noch niemand Erfahrung damit? Huh.

Es gibt mehrere Gründe, die sowohl Code als auch Systeme überbrücken. Denken Sie zunächst daran, dass die meisten der aktuellen 'großen' MMO-Engines vor einigen Jahren programmiert wurden und trotz Grafik- und Technologie-Upgrades noch immer davon abhängen, wie viele dieser Systeme im Jahr 2000 oder so geschrieben wurden. Eve-Online zum Beispiel läuft immer noch auf einer großen Microsoft SQL Server-Instanz, weshalb sie immer versuchen, mehr herauszuholen, indem sie die Hardware aktualisieren.

Ein Beispiel für eine Verbesserung seit dem Start von WoW und EVE ist die Arbeit in verteilten Schlüssel- / Wertedatenbanken wie Google MapReduce (und seiner Open-Source-Implementierung Hadoop), extrem schnellen Warteschlangendiensten für die positive Antwortverarbeitung (Amazon SQS) und anderen. " Cloud "-orientierte Technologien.

Ich habe die meiste Erfahrung mit EVE (ich bin eher ein Laser- als ein Kampfaxt-Typ), daher sind einige dieser Beispiele eher EVE-orientiert.

Was die Gründe von Systems angeht:

  • Physische Knoten fallen konsistent aus. Wenn ein Knoten ausfällt, wird seine Aktivität normalerweise mit einer beliebigen Anzahl von Mitteln an einen anderen Ort migriert. Der Knoten muss jedoch so schnell wie möglich wieder in Betrieb genommen werden. In EVEs Fall verwenden sie sowohl eine stapellose Verarbeitungssprache als auch virtuelle Server. Ich bin mir nicht sicher, wie Blizzards Architektur ist.
  • Die Datenbankkonsistenz muss überprüft werden, Protokolle müssen gelöscht werden und Indizes und Datencaches müssen neu erstellt werden. Dies ist besonders wichtig in einem System wie EVE mit nur einer "Live" -Datenbankinstanz.
  • Betriebssystem-Patches müssen zu einem Zeitpunkt angewendet werden, an dem sie Knoten neu starten können, ohne dass zu viel Aktivität an einem anderen Ort migriert werden muss. Die Migration beansprucht viele Netzwerkressourcen, die andernfalls für die Online-Verarbeitung verwendet werden könnten.
  • RDBMS-basierte MMOs haben große Probleme mit der Datensperrung und der referenziellen Integrität. Ausfallzeiten werden verwendet, um veraltete Sperren und Integritätsunterbrechungen aus Aktivitätsprotokollen zu entfernen.
  • Die meisten Spiele implementieren geografisch angeordnete Daten-Caches für statische oder semistatische Informationen (siehe Caching-Zusammenfassung unten) in Gebieten mit hoher Auslastung, z. B. an der Ostküste im Vergleich zur Westküste der USA. Diese Caches werden während der Ausfallzeit manuell aktualisiert.

Was die Gründe für die Software angeht:

  • Spiele verwenden im Betrieb viel OLTP - das ist On-Line Transaction Processing - Art von Lese- / Schreibzugriffen auf Datenbanken. Manchmal möchten Sie jedoch einen zusammenfassenden Bericht ... wie die Anzahl der Tiere, die Sie in den letzten 3 Jahren getötet haben. Dies erledigt am besten ein OLAP-Bericht - On Line Analytical Processing -, der zusammenfassende Informationen enthält, die auf vielen Zeilen in einem riesigen Dataset basieren. In der Realität implementieren Spiele Systeme, die OLAP verwenden, um einen Cache zu erstellen, um die Anzahl der Abfragen zu begrenzen, die gelesen werden müssen. Das heißt, sie erstellen ab einem bestimmten Datum eine Gesamtsumme. Wenn Sie dann die Frage stellen, lesen sie nur die Zeilen aus dem OLTP-Speicher, der den Zeitraum seit dem bestimmten Datum zusammenfasst. Verbinden Sie die beiden, und Sie können tatsächlich quantifizieren, wie wertlos Ihr Leben geworden ist.
  • Das oben erwähnte Hot-Patching, das ich als Softwareproblem sehe, aber Softwareentwickler als Systemproblem. ;)
  • Nachschub an Gegenständen - in Eve werden die Asteroidengürtel jede Nacht aufgefrischt und bestimmte Komplexe werden ebenfalls recycelt. Dies kann bis zu einem gewissen Grad online erfolgen, einige der Algorithmen sind jedoch zu komplex und müssen im Offline-Modus ausgeführt werden, da sie die Datenbank kurzzeitig in die Knie zwingen, während sie die wirtschaftliche Aktivität des Vortages zusammenfassen.

Eine Wirtschaft mit geschlossenen und offenen Kreisläufen zu betreiben, ist ein Problem für MMO-Betreiber - wenn Sie mir nicht glauben, lesen Sie einige der wissenschaftlichen Artikel, die über Spielewirtschaft geschrieben wurden, und einige der Studien älterer Spiele wie Ultima Online hatte relativ primitive Volkswirtschaften. Die Analyse, die durchgeführt werden muss, um die offenen Schleifen aufzufüllen und um Betrug und andere negative wirtschaftliche Aktivitäten zu identifizieren, muss offline mit einer Momentaufnahme der Daten erfolgen, die manchmal nur durchgeführt werden kann, während die Datenbank vollständig gesperrt ist.

Wenn Sie bemerken, findet die Wartung von Eve in England zu Mittag statt, wo sich das primäre Rechenzentrum befindet.

Karl Katzke
quelle
3

Ich vermute, dass die Gesamtzeit, die Blizzard (ich schätze, dass es ein Dienstagmorgen ist, an dem Sie Ihre Frage stellen) für die Wartung des gesamten Clusters gilt. Nicht jeder Server benötigt so viel Zeit, um Arbeiten auszuführen.

Es könnte zwar möglich sein, einzelne Server schneller wieder hochzufahren, dies würde jedoch Schreie der Bevorzugung von Spielern verbieten, deren Bereiche früher in den Zeitplan fielen. Als solche halten sie alles nieder, bis die ganze Arbeit erledigt ist; Mit Hunderten von Realms, an denen gearbeitet werden muss, erledigen sie wahrscheinlich einen Großteil der Arbeit parallel, serialisieren jedoch immer noch eine letzte Überprüfung, bevor sie die Dinge wieder online stellen. Wenn Sie ein Hardware-Upgrade durchführen, wird dieses wahrscheinlich in so vielen Rechenzentren wie möglich serialisiert.

In Bezug auf die Gründe für die Durchführung der Wartung kann es sich zum Teil nur um einen Neustart der Leistung handeln. Es wäre zwar großartig, wenn solche Neustarts nicht erforderlich wären, aber die Kosten dafür im Vergleich zu den Auswirkungen, die sich daraus ergeben, können hier die Entscheidung treffen.

Wenn Sie sich ansehen, warum sie die Prozesse nicht in Clustern zusammenfassen und fortlaufende Wartungen durchführen können, deuten die wenig bekannten Kenntnisse der WoW-Infrastruktur darauf hin, dass für jeden Bereich mehrere Computer Dienste bereitstellen (einer für die Welt, einer für Instanzen und Schlachtzüge, einer für Schlachtfelder) , usw.) Sie verwenden keine vom Status gemeinsam genutzte Aktiv-Aktiv-Prozesskonfiguration. Es gibt keine Weitergabe des Live-Status, nur persistenter Daten über eine Datenbank.

Letztendlich stellen die Mechanismen der Bereitstellung eines statusbehafteten Onlinedienstes für eine so große Abonnentenbasis einige der Best Practices in Frage, die wir möglicherweise vertreten, wenn es um eine Website oder einen anderen herkömmlichen internetbasierten Dienst geht.

James F
quelle
Tatsächlich drehen sich die meisten Herausforderungen um diesen zentralen zustandserhaltenden Knoten, die Datenbank. Das ist die maßgebliche Aufzeichnung. Alle anderen Dinge, die den Status zu verwalten scheinen (der Server, der Client und alle dazwischen liegenden Caching-Mechanismen), sind wirklich nur Verhandlungsführer in Bezug darauf, welche Daten in die Datenbank gelangen. Verzögerung ist die Zeit, die die Datenbank benötigt, um zu bestätigen, was in der Kette aufgezeichnet wurde.
Karl Katzke
1

Bei einigen der kürzlichen längeren Ausfallzeiten in EvE Online ging es darum, neue Hardware wie ein schnelleres SAN zu installieren. Während ein Großteil der Daten technisch verschoben werden kann, indem eine neue Dateigruppe auf dem neuen Laufwerk erstellt und dann die Hauptdateigruppe geleert wird, hätte dies aufgrund konstanter E / A-Vorgänge zu einem längeren Zeitraum mit verringerter Leistung geführt. Deshalb haben sie sich dafür entschieden , die 1,1-TB-Datenbank zu trennen und sie auf einmal zu verschieben.

Die Antwort auf diese Frage hängt auch von der spezifischen Anwendung ab. Beispielsweise kann ein Server, der ein bestimmtes Sternensystem verwaltet, nicht im laufenden Betrieb ausgetauscht werden, ohne dass das Spiel unterbrochen wird. Daher wird die Ausfallzeit verwendet, um leistungsstärkere Server potenziellen Hotspots zuzuweisen. Zusätzlich werden die Eigentumsberechnungen (Souveränität) von Sternensystemen berechnet. Dies hängt von den zehn verschiedenen Variablen ab, die sich alle in Abhängigkeit von den Aktionen des Spielers ändern können. Es ist unnötig zu erwähnen, dass dies zu übermäßigem Sperren und / oder anderen Problemen im Zusammenhang mit der Parallelität führen kann. Um diese Probleme zu lösen, ist es am besten, den Stack-Overflow zu überlassen .

Hirvox
quelle
Bei der Virtualisierung sollte die Migration stark ausgelasteter Server auf Hardware mit mehr verfügbaren Ressourcen durchaus möglich sein, und zwar live und automatisch ... insbesondere in einem Spiel, bei dem der meiste Action-Lag in vielen Millisekunden (manchmal über hundert) gemessen wird. Aber es könnte komplex und teuer sein ^^
Oskar Duveborn
Oskar, denk daran, dass die Kerntechnologien für EVE und WoW im Jahr 2002 geschrieben wurden, bevor diese Technologien wirklich ausgereift waren.
Karl Katzke
0

Vermutlich etwas, mit dem Sie über Clustering / Load-Balancing nicht fertig werden konnten, z. B. wesentliche Änderungen des DB-Schemas.

Chopper3
quelle
0

In einem aktuellen Thema Wie oft sollte ich Linux-Server neu starten ? Ein weiterer wichtiger Punkt wurde angesprochen, um sicherzustellen, dass beim Neustart oder nach einer (größeren) Konfigurationsänderung alles ordnungsgemäß startet.

Kjetil Joergensen
quelle
0

Ein einfaches Upgrade von Hardware (oder Hardware-Ersatz) wird von MMORPG-Spielen auch als "Serverwartung" bezeichnet. So trivial, dass wir es oft vergessen.

Veynom
quelle
0

Ich habe eine MMO-Architektur in Erlang implementiert, die Hot-Code-Upgrades und -Verteilung unterstützt. Beispielsweise kann ein "GamePlay Server" auf einer beliebigen Anzahl von Computern ausgeführt werden. Wenn ein Hardware-Upgrade erforderlich ist, können seine Objekte (in Echtzeit) auf die anderen Computer übertragen werden. Dies ermöglicht Upgrades der Software-Hardware ohne Ausfallzeiten.

Sie können meine Website unter http://www.next-gen.cc überprüfen .


quelle
0

Ich bin der Überzeugung, dass das Wartungsfenster auch den routinemäßigen Austausch von Hardware ermöglicht, um sicherzustellen, dass Komponenten nicht ausfallen.

Martin
quelle
Normalerweise nicht. Sie führen einige Vorhersagemessungen für Hardware durch, ersetzen jedoch in der Regel nicht alle Lüfter oder sonstigen "verbrauchbaren" Bits in einem System, es sei denn, es gibt Anzeichen für einen Fehler, dh RPMs fallen oder SMART weist eine hohe Anzahl von Schreibfehler auf.
Karl Katzke