Sollte ich den Anmeldeserver von dem Spieleserver trennen?


15

Ich denke darüber nach, einen MMO-Server zu bauen, und ich habe untersucht, wie andere Spiele ihr Netzwerk strukturieren. Eines der Dinge, die mir aufgefallen sind, ist, dass es immer einen Anmeldeserver und dann den / die Spieleserver gibt.

Ich entscheide immer noch, ob ich das tun soll, aber ich würde gerne zuerst einige Meinungen hören. Was sind die Vorteile davon und wie kommuniziert der Anmeldeserver mit dem Spieleserver, um Anmeldungen abzuwickeln?


1
Die Frage "Wie wird Load Balancing in MMOs erreicht?" Vielleicht interessant: gamedev.stackexchange.com/q/5956/450
Hendrik Brummermann

Antworten:


15

Ich glaube, dass dies hauptsächlich auf die Tatsache zurückzuführen ist, dass Login und Game-Handling logischerweise mehr oder weniger unabhängig voneinander sind. Daher werden sie in der Regel zur besseren Entkopplung, einfacheren Wartung und Skalierbarkeit getrennt gehalten. Sie müssen sich nicht unbedingt auf verschiedenen physischen Servern befinden, sondern können auch unabhängige Dienste auf demselben Computer ausführen. Wenn der Datenverkehr zu groß wird, kann der Anmeldeserver problemlos auf einen anderen Computer verschoben werden.

Außerdem sind Anmeldeserver ein wahrscheinlicher Angriffsvektor, daher ist es gut, sie vom Standpunkt der Sicherheit getrennt zu haben.

Intern können verschiedene serverseitige Dienste über reguläre Sockets miteinander kommunizieren, sei es auf demselben Computer oder auf einem anderen Computer im Cluster. Alternativ könnte ein Datenbankserver verwendet werden, um für jeden Benutzer ein "angemeldet" -Flag zu verwalten.


Meistens sehe ich ein solches Flag im Gameserver und im Loginserver, damit der Login-Server gegeneinander prüfen kann und wenn logindb! = Gamerserverdb, wird der Benutzer abgemeldet.
daemonfire300

10

Ein sehr wichtiger Aspekt bei der Entwicklung von MMOs ist das Erreichen von Skalierbarkeit und das Ermöglichen eines Lastausgleichs.

Die Authentifizierung von Benutzern durch Überprüfen von Anmeldeinformationen, Sperrstatus, Zählen kürzlich fehlgeschlagener Anmeldungen usw. ist eine Aufgabe, die ausgeführt werden kann, ohne die Spielelogik oder die Spieldaten zu kennen. Es ist also sehr einfach, das in einen eigenen Server-Cluster zu verschieben.

Darüber hinaus sind die Login-Server ein bekannter "Zugang" für den Kunden. Nach erfolgreicher Authentifizierung können sie den Client an den entsprechenden Server im Spielserver-Cluster senden. Diese Weiterleitung kann erfolgen, indem die Netzwerkverbindung an den richtigen Spieleserver weitergeleitet oder der Client angewiesen wird, eine neue Verbindung zu einem richtigen Spieleserver herzustellen.

Sie sollten frühzeitig über Kürzungen Ihres Systems für die Verteilung nachdenken. Es ist sehr einfach, mehrere Teile auf einem Server auszuführen. Es ist jedoch ziemlich schwierig, Dinge, die als eine Einheit entwickelt wurden, aufzuteilen.


2

Als ehemaliger WoW-Spieler hatte ich die Erfahrung gemacht, dass der Login-Server immer das schwächste Glied in der Kette war.

Die Weltserver waren in der Regel beeindruckend stabil und bewältigten auch außergewöhnliche Belastungen (z. B. neue Erweiterungspakete) recht gut.

Aber die Anmeldeserver schienen noch nie so gut zurechtzukommen und fielen häufig aus, während die Weltserver in Ordnung waren. (Das heißt, wenn Sie in einem Schlachtzug / Dungeon die Verbindung verlieren, können Sie nicht wieder hineinkommen, aber die anderen Spieler warten auf Sie!)

Und jetzt, da das WoW-Anmeldesystem in Battle.Net integriert ist, ist Starcraft 2 möglicherweise nicht mehr verfügbar, wenn WoW stark ausgelastet ist (wie es einige Stunden nach dem Start von Cataclysm der Fall war).

Wenn Sie also ein Spiel mit sehr vielen Benutzern erstellen, ist die Skalierbarkeit und Leistung des Anmeldesystems ebenfalls sehr wichtig.


1
Ich schätze, die Login-Server sind das primäre Ziel für Brute-Force-Angriffe auf Passwörter, daher müssen sie in der Lage sein, einiges an Last zu bewältigen. Vor allem, wenn das Spiel so beliebt ist, dass Angreifer zusätzlich zum normalen zufälligen Erraten von Benutzernamen Botnets einsetzen (um Ratenbeschränkungen pro IP-Adresse zu vermeiden).
Hendrik Brummermann

Es kann mehrere Gründe geben, sich nicht anzumelden und einen Spieler in die Welt zu setzen. Dies kann die Anmeldeserver- / Kontodatenbank sein. Dies kann jedoch durch einen Fehler beim Laden der Player-Informationen aus der Datenbank verursacht werden. Oder durch einen Ausfall des Systems, das die Spieler zu Welt-Servern, Chat-Servern usw. weiterleitet. Eine interne Firewall ist möglicherweise weiterhin in der Lage, bekannte Verbindungen zu verarbeiten, kann jedoch möglicherweise den Regelsatz nicht anwenden, um über neue Verbindungen zu entscheiden. Das Spielen eines Spielers in der Welt ist viel komplexer als die Interaktion, wenn man erst einmal drinnen ist.
Hendrik Brummermann
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.