Informationen zur nahtlosen MMO-Serverarchitektur

9

Ich suche nach Material auf nahtlosen MMO-Servern! Ich habe einige Artikel in den Büchern "Massively Multiplayer Game Development" und "Game Programming Gems 5". Hat jemand Erfahrung mit diesem Thema oder kennt Artikel darüber?

Ich interessiere mich sowohl für "High-Level-Ansichten" als auch für Implementierungen. Dies könnte das Thema meiner Masterarbeit werden und ich möchte herausfinden, wie schwierig es ist, ein solches System zu schreiben, bevor ich mit der Diplomarbeit beginne. Im Moment habe ich mich noch nicht für eine Sprache entschieden. Ich denke an Java oder Scala. Erlang könnte eine Wahl sein, aber damit habe ich nie gearbeitet.

Hinweis: Grundvoraussetzung wäre Bewegung. Alle anderen Spielsysteme sind optional und geben "Bonusguthaben".

Nun zu dem, was ich mit "nahtlosem Server" meine: Ich möchte so einen Servercluster einrichten, in dem jeder Knoten einen Teil der Spielwelt mit statischen Grenzen kontrolliert. Spieler können sich jetzt von einem Ende der Welt zum anderen bewegen, ohne eine Instanz zu wechseln oder einen "Teleporter" zu treffen. Ich denke, WoW macht das. In meinem Backend wechselt der Player jedoch von einem Server zum nächsten.

Lurca
quelle
Vor einiger Zeit habe ich gelesen, dass jeder WoW-Server mehr als 5 Blades enthält - 1 für jeden Kontinent und die Datenbank. Früher waren es auch die Dungeons und Schlachtfelder, obwohl ich davon ausgehe, dass sich diese jetzt in ihren eigenen Clustern befinden, um bereichsübergreifende Verbindungen zu ermöglichen. Kurz gesagt, Kontinente werden auf einem Server gehalten - es gibt keinen Punkt, an dem Sie auf einen anderen Server umgestellt werden, es sei denn, Sie wechseln die Kontinente.
Kronzeugenregelung
Interessant, erinnerst du dich, wo du das gelesen hast? Wie gesagt, ich spiele nie WoW und weiß nicht, wie groß die Kontinente sind, aber ich kann mir nicht vorstellen, dass jeder Kontinent auf einem separaten Server gehostet wird.
Lurca
3
WoW-Server-Statistiken: 13.250 Server-Blades insgesamt, 75.000 CPU-Kerne insgesamt, 112,5 Terabyte RAM (ab GDC Austin 09). Siehe hier ; nicht unbedingt alle WoW gewidmet, aber einigermaßen nah genug.
@ Josh Petrie: Danke, habe diesen Artikel früher an diesem Tag gefunden. Aber ich bin immer noch auf der Suche nach Informationen zur nahtlosen oder kontinuierlichen Serverarchitektur.
Lurca
1
Verwandte Wie wird der Lastausgleich in MMOs erreicht?
Hendrik Brummermann

Antworten:

5

Die Hauptkomplexität bei der Verwaltung eines solchen Systems besteht darin, wie nahtlos es sein muss. Wie Josh gesagt hat, ist die Lösung des Problems, eine Entität von einem Server auf einen anderen zu übertragen, ein wesentlicher Bestandteil des Pakets.

Dies ist jedoch nicht das einzige Problem. Wenn Entitäten auf mehreren Servern als Teil eines Vorgangs interagieren müssen, tritt jetzt ein Synchronisierungsproblem auf, bei dem jedes System Daten von der anderen Seite benötigt, um fortzufahren. Bis zum Eintreffen der Daten kann dies jedoch der Fall sein schon ungültig sein. Sie können versuchen, dieses Problem zu lösen, indem Sie den Vorgang in mehrere Nachrichten mit Rollback-Funktion aufteilen, wenn sich eine Seite zurückzieht. Wie Sie jedoch aus Kapitel 3.1 in "Massively Multiplayer Game Development" gesehen haben, verkompliziert dies jede Spiellogik, die Sie benötigen, erheblich mach das mit. Scala und Erlang helfen Ihnen dabei, das Messaging-System richtig zu machen - sie helfen Ihnen nicht bei der Zerlegung einer früheren 10-Zeilen-Funktion in die vielen verschiedenen Nachrichten und Zustände, die Sie jetzt verfolgen müssen.

Offensichtlich ist dieses Problem nicht ganz neu, und relationale Datenbanken unterstützen diese Art von Problem, indem sie alle Daten zentral speichern und es mehreren Clients ermöglichen, sie nach Bedarf abzufragen und zu ändern und Transaktionen bei Bedarf zurückzusetzen. Dies gibt Ihnen die meisten Ihrer Korrektheitsanforderungen, führt jedoch leider zu unpraktischen Leistungsproblemen und macht die Implementierung der Spielelogik umständlich (da ein Großteil Ihrer Logik jetzt in gespeicherten Datenbankprozeduren geschrieben ist). Eine andere Art von Datenbank könnte hier eine gute Lösung sein, insbesondere wenn Sie bereit sind, die Zuverlässigkeitsanforderungen, die die meisten RDBMS bieten, wegzutauschen.

Die meisten professionellen Spiele umgehen dieses Problem, indem sie es nicht einmal versuchen, indem sie die Shard-Größe klein genug halten, um alle Spieler auf einen Server zu bringen, indem sie die Welt in Teile aufteilen, die nicht wirklich interagieren (siehe das WoW-Beispiel in den Kommentaren oben). oder indem Sie das Spiel auf der Grundlage der Funktion und nicht der Geografie auf die Server verteilen (z. B. findet jeder Kampf auf einem Server statt, alle chatten auf einem anderen), sodass keine „Nähte“ zu bewältigen sind.

Kylotan
quelle
3

Ich interessiere mich sowohl für "High-Level-Ansichten" als auch für Implementierungen.

Implementierungen sind im Allgemeinen ziemlich involviert und Sie werden hier wahrscheinlich nicht viel darüber reden. Die StackExchange-Software eignet sich nicht für diese Art von Diskussion, ganz zu schweigen davon, dass dies einen erheblichen Zeitaufwand bedeuten würde.

Ich möchte herausfinden, wie schwierig es ist, ein solches System zu schreiben

Nicht mehr oder weniger schwer als jedes andere System: Es hängt von Ihren Anforderungen und den Funktionen ab, die Sie fahren möchten. Sie können triviale Implementierungen trivial schreiben, aber nicht triviale Dinge werden natürlich viel schwieriger. Eines der größeren Probleme ist, dass Sie wahrscheinlich nicht genug echte Clients haben, um festzustellen, ob Ihr System tatsächlich auf das "massive" Niveau skaliert, auf dem WoW und andere Spiele arbeiten.

MMOs sind nicht magisch. Der größte Teil ihrer Technologie ist für sich genommen nichts Besonderes. Es ist einfach so, dass einige kleinere, einfachere Teile der Technologie sehr intelligent kombiniert werden, um größere, verbundene parallele Simulationen eines gemeinsamen Weltzustands zu ermöglichen.

Ich möchte also einen Servercluster einrichten, in dem jeder Knoten einen Teil der Spielwelt mit statischen Grenzen steuert. Spieler können sich jetzt von einem Ende der Welt zum anderen bewegen, ohne eine Instanz zu wechseln oder einen "Teleporter" zu treffen.

Im Wesentlichen handelt es sich um die Übergabe der Simulation. Dies kann ganz einfach erfolgen und ist nicht unbedingt eine MMO-spezifische Technologie (Peer-to-Peer-Spiele unterstützen in der Regel dieselben zugrunde liegenden Mechanismen zur Implementierung der Hostmigration). Die Grundvoraussetzung besteht darin, dass jeder Server die Topologie der Server "um ihn herum" versteht (insbesondere muss ein Server für den Weltknoten A über die Server für die Simulation benachbarter Weltknoten Bescheid wissen) und einen Puffer definieren, um den Sie sich kümmern Eine bestimmte simulierte Entität "nahe" an einem benachbarten Server.

Wenn eine Entität in den Puffer "Schließen" eintritt, melden Sie ihn auch dem benachbarten Server. Sobald die Entität den tatsächlichen Schwellenwert überschreitet, senden Sie eine Nachricht mit dem vollständigen Status der Entität und einer Nachricht an den benachbarten Server, dass der benachbarte Server die Entität übernehmen soll. Natürlich möchten Sie, dass dies so zuverlässig wie möglich ist.


quelle