MMORPGs, einige MOBAs wie League of Legends oder sogar StarCraft 2 zwingen Sie normalerweise, einen Server auszuwählen. Normalerweise sind es USA, EU und SEA, in MMORPGs viele pro Ort. Ich kann sehen, dass dies vor ein paar Jahren notwendig war, aber jetzt, mit dem Aufkommen von AWS und ähnlichen Angeboten, mit denen Sie Ihre "Serverleistung" nahtlos skalieren können, warum gibt es noch separate Server?
Mein Gedankengang ist wie folgt (am Beispiel von Star Wars: The Old Republic): - Sie befinden sich immer auf einem Planeten, einer isolierten "Instanz" von anderen Planeten. - Wenn sich zu viele Menschen auf einem Planeten befinden, erstellt SW: TOR eine neue Instanz der Welt und versetzt die Spieler in diese Instanz. - Wenn Sie die Welt verlassen / Instanzen wechseln, haben Sie einen Ladebildschirm
Warum kann das Spiel keine Instanz für diesen Planeten erstellen? Diese Instanz (und nur diese) hat Ihre aktuellen Daten in ihrer Datenbank und verwaltet x Spieler. Sobald sich x-50-Spieler auf dieser Instanz befinden, wird ein neuer Server gestartet und neue Leute werden auf dieser Instanz erscheinen. Die 50 Plätze sind für den Wechsel zu Ihrer Gruppe usw. reserviert.
Es könnte eine Instanz für alle drei Hauptregionen geben, um die Latenz gering zu halten, aber es würde Ihnen erlauben, immer noch mit anderen Spielern von zB SEA zu spielen, wenn Sie mit einer Verzögerung von 140 ms leben können (was immer noch nichts imho ist).
Wann immer Sie eine Instanz wechseln oder in eine andere Welt reisen, gibt Ihr aktueller Server alle Ihre Daten an den nächsten Server weiter und stellt sicher, dass Sie keine große zentrale Datenbank benötigen. Sie könnten immer noch eine haben, die regelmäßig zu Analysezwecken aktualisiert wird.
Wenn Sie sich abmelden oder der Server die Verbindung verliert, können die Daten in eine umfangreiche Datenbank übertragen werden, die für die Speicherung der Daten optimiert ist. Die Instanzserver können dann für einen hohen Durchsatz optimiert werden.
Gibt es einen bestimmten Grund, warum dies nicht funktioniert? Gibt es noch andere Probleme, die ich vermisse?
quelle
Antworten:
AWS ist keine so offensichtliche Lösung, wie es scheint. Es kann teuer sein, in einigen Fällen sogar teurer als die Verwendung von internen Rechenzentren (für einen Verlag können sich die Kosten beispielsweise über mehrere Produkte hinweg amortisieren). Darüber hinaus kann es Bedenken geben, vertrauliche Binärdateien und Protokolle auf Hardware zu speichern, die außerhalb der eigenen Kontrolle liegt. Schließlich ist die tatsächliche Rechenleistung nicht immer der Grund für die Trennung der "Server" -Population in MMOs.
Guild Wars 2 macht in der Tat etwas sehr Ähnliches. Karten werden von einzelnen Serverprozessen simuliert, und Überlaufinstanzen werden nach Bedarf basierend auf der Kartenpopulationsobergrenze und einigen Heuristiken für die Leistung der Karte erstellt.
In Guild Wars 2 gibt es zwei große Rechenzentren, eines in den USA und eines in Europa. Diese Rechenzentren (hauptsächlich für Handelsposten- und Handelssysteme) sind untereinander ausgetauscht, aber im Allgemeinen sind sie in dieser Konfiguration vorhanden Deutschland, Frankreich und so weiter müssen die höheren Latenzen für die US-Spieleserver nicht leiden. Innerhalb des Rechenzentrums werden die Spieler in "Heimatwelten" (oder "Scherben" im Volksmund) unterteilt. Einer der Gründe dafür ist jedoch, die Anzahl der Spieler zu minimieren, die ein Kunde sehen kann und die ihm gemeldet werden muss. Der clientseitige Aspekt dieses Problems wird nicht durch eine Skalierung auf mehr Serverhardware gelöst. Die serverseitige kombinatorische Explosion zusätzlicher Berichtspfade könnte
Sie vermissen eine ganze Reihe von Dingen, aber meistens handelt es sich um Details (und ich werde nicht erklären, wie wir damit umgehen, da sie als Geschäftsgeheimnisse betrachtet werden), die für eine so hochrangige Frage vom Typ Übersicht nicht relevant sind. Ich denke, der größte Fehler in Ihrem Vorschlag besteht darin, Spielerdaten an den neuen Server weiterzugeben, wenn ein Spieler wechselt. Dies ist ein komplexes Problem, das sich nicht gut skalieren lässt. In der Praxis ist es wahrscheinlich besser, die Spielerdaten auf einem zentralen Serversystem zu haben. Es ist durchaus machbar, wenn Sie diese Datenbanken und den primären Laufzeitdatensatzspeicher nicht für die Daten verwenden.
quelle
Meist geht es um Latenz.
Erstens verringert sich die Latenz, wenn Sie einen Server in Ihrer Nähe haben. Befindet sich der Server auf der anderen Seite der Welt, ist die Latenz höher als in wenigen Schritten Entfernung.
Zweitens sind Dienste wie AWS nicht für Echtzeitarbeit ausgelegt. Sie sind für einen hohen Durchsatz auf Kosten einer gewissen Latenz ausgelegt. Wenn das Laden Ihrer Webseite einmal 250 ms länger als gewöhnlich dauert, ist das für niemanden wichtig. Wenn Ihr Spiel jedoch 250 ms länger als gewöhnlich dauert, um eine Nachricht zu verarbeiten, kann das Gameplay ernsthaft beeinträchtigt werden. Aus diesem Grund werden MMOs fast immer auf dedizierter Hardware gehostet.
Es geht aber auch um Spieledesign. Wenn Sie den Eindruck erwecken, dass sich alle auf der gleichen Welt befinden und eine Zone aufteilen müssen, wenn sie zu voll ist, sind die Leute frustriert, dass sie ihre Freunde nicht an den festgelegten Treffpunkten finden können. Diese Art von Problem würde sich auf Gilden, Massen-PvP-Kämpfe usw. erstrecken. Spieler sind heutzutage an Instanzen gewöhnt, aber es gibt bestimmte Bereiche, die voraussichtlich geteilt werden. Wenn Sie völlig getrennte Server haben, gibt es hier zumindest keine Überraschungen.
Schließlich sind noch andere technologische Aspekte zu berücksichtigen. Selbst wenn jede Instanz ziemlich isoliert von den anderen ist, müssen in der Regel immer noch verschiedene Dienste miteinander kommunizieren. Serverübergreifende Kommunikation ist in Echtzeitsoftware nur schwer zu realisieren und hat in der Vergangenheit zu verschiedenen Exploits und Fehlern bei MMOs geführt. Insbesondere die Weitergabe maßgeblicher Spielerdaten von einem zum anderen ist riskant. Daher sind Entwickler häufig vorsichtig und haben klar umrissene Grenzen zwischen Servern, was den Datenverkehr verringert, der zu deren Überquerung erforderlich ist.
quelle
Eigentlich glaube ich, dass die Antwort nicht auf das Netzwerk oder die Architektur bezogen ist, sondern auf das Spiel. In der Regel gibt es bei dieser Art von Spielen Ereignisse, und diese Ereignisse werden nach den angenehmsten Zeitrahmen für die Leute, die auf dem Server spielen, terminiert, und das ist normalerweise so Bezogen auf die Zeitzone, in der Menschen leben, daher EU und USA usw.
Ein weiterer Grund ist, eine Trennung zwischen den Welten zu schaffen, damit eine zu starke Gruppe das Spiel nicht für alle Beteiligten durcheinander bringt und Sie sich immer in eine Welt begeben können, die weniger "herausfordernd" ist.
Auf der Seite der Server-CPU-Fähigkeit gibt es, obwohl die heutigen Maschinen ziemlich stark sind, immer eine Grenze für den Umgang mit einer Maschine. Daher ist es notwendig, eine Trennung zwischen den Welten zu schaffen, um das Spiel vor Überlastung zu schützen und den Leuten die Wahl zu lassen, welche Welt sie wollen Spiele mit, damit sie mit ihren Freunden spielen können. Horizontales Skalieren ist nicht nur eine Frage der Maschinen, Sie müssen Ihre Anwendung auch in einer horizontal skalierten Architektur einsetzen können, und das ist nicht so einfach, wenn Tausende von "Aktionen" gleichzeitig ausgeführt werden und sich möglicherweise gegenseitig beeinflussen müssen alles synchronisieren. Ich denke, es wäre sehr schwierig, das über mehrere Maschinen hinweg zu tun.
quelle
Was ist falsch an der automatischen Instanzerstellung? Wenn ein Ort zu voll ist, platzieren Sie die 1000 Spieler einfach in 10 verschiedene Instanzen.
Das Problem dabei ist, dass sich Online-Spiele ausschließlich um die Community drehen. Stellen Sie sich vor, Sie haben ein Treffen mit Leuten vereinbart, die Sie zuvor getroffen haben, und wenn Sie alle zu einem bestimmten Zeitpunkt da sind, sehen Sie sich nicht, weil Sie alle in unterschiedlichen Situationen sind? Das nervt und bricht das Eintauchen.
Wie kann dies verhindert werden? Dies könnte geschehen, indem jeder Spieler zu jeder Zeit in dieselbe Instanz versetzt wird, sodass Sie sicher sein können, diesen Spieler wieder zu treffen, wenn Sie sich beide am selben Ort befinden, wenn Sie sich einmal mit einem anderen Spieler treffen. Sie werden niemals Spieler treffen, die anderen Instanzen zugewiesen sind.
Aber was ist, wenn Sie jemanden von außerhalb des Spiels treffen möchten? Wie ein echter Freund hast du eingeladen, das Spiel mit dir zu spielen? Um dies zu ermöglichen, müsstest du die Möglichkeit haben, die Instanz beim Erstellen deines Charakters auszuwählen. Wie aus einer Liste von Instanzen mit leicht zu merkenden Namen. Leider erscheint der Name "Instanz" dem durchschnittlichen Benutzer verwirrend. Sie sind an dieses Wort nicht gewöhnt. Wäre es nicht besser, einen Begriff zu verwenden, an den sie gewöhnt sind? Ein Begriff wie ... Server ?
quelle