Die MMO-Terminologie für "in einer einzigen Spielwelt bleiben" lautet " Single Shard" . EVE online ist das einzige große MMO, das versucht, jeden Spieler in eine einzelne Scherbe zu stopfen.
Zum Glück haben sie einen sehr informativen Artikel darüber veröffentlicht, wie sie es machen.
(Quelle: gamasutra.com )
Die schlechten Nachrichten. Sie können die Techniken von EVE online nicht generell anwenden. Ihre Lösungen sind absolut auf das jeweilige Genre und die jeweilige Implementierung zugeschnitten.
HINWEIS : Für alle Super-Fancy-Single-Shard-Netzwerke von EVE Online wird eine Datenbank verwendet. Sie waren nicht in der Lage, eine skalierbare, konsistente und mäßig Echtzeitlösung für verteilte Datenbanken zu entwerfen.
In jedem Fall sollte das Lesen, wie sie es gemacht haben, Ihnen helfen, Ihre eigene Lösung zu entwerfen. Beachten Sie jedoch, dass Sie versuchen, ein sehr schwieriges Problem zu lösen .
Anstatt Ihren Spieleserver zu verteilen, würde ich vorschlagen, zuerst Ihre anderen Wege zu erkunden.
- Profiliere deinen Spieleserver.
- Optimieren Sie Ihren Servercode, um die CPU-Belastung zu verringern, wenn dies ein Problem darstellt.
- Optimieren Sie das Kommunikationsprotokoll zwischen den Clients und dem Server, um das Netzwerk-Chatter zu reduzieren.
- Optimieren Sie den Spielerserver für die Datenbankkommunikation.
- Führen Sie ein Abfrageoptimierungsprogramm aus und nehmen Sie die entsprechenden Änderungen vor.
- Reduzieren Sie die DB-Interaktion auf ein Minimum
- Verschieben Sie die Datenbank auf einen separaten Computer.
Das hilft oft einer Tonne. Halten Sie die Datenbank nach Möglichkeit im selben lokalen Netzwerk, aber das sollte Ihrem Spieleserver helfen, viel schwungvoller zu sein, wenn es das einzige ist, was auf der Serverhardware ausgeführt wird.
Ihr erster Schritt sollte darin bestehen, den direkten Datenbankzugriff vom Spielserver zu entkoppeln und eine nutzungsspezifische Middleware zu verwenden, um Daten für Ihren Server vorzubereiten (z. B. XML, JSON). Diese können eine beliebige Anzahl von Datenbanken verarbeiten und, was noch wichtiger ist, anwendungsspezifische Caching-Optionen bereitstellen. Zwischenspeichern Sie alles, was Sie können, und nörgeln Sie die Datenbank nur, wenn Sie müssen. Machen Sie große Abrufe und selten statt vieler kleiner Abfragen, um die bestmögliche Leistung in Ihrem Szenario zu erzielen.
Mit der Datenbank Ihrer Wahl können Sie möglicherweise auch Cluster betreiben, mit denen Sie die verfügbaren Datenbankressourcen problemlos erweitern und Ihre Ergebnisse schneller bereitstellen können. Dies ist jedoch ein Thema, für dessen Einrichtung und Wartung viel Erfahrung und ein dedizierter Datenbankadministrator erforderlich sind Nicht ganz für das Indie-Budget.
quelle
In Bezug auf den Spieleserver: Eine übliche Strategie besteht darin, mehrere Server zu verwenden, auf denen jeder Server einen Teil der Spielwelt verwaltet. Jeder Benutzer muss normalerweise nur wissen, was um ihn herum passiert. Daher ist es sinnvoll, die Welt nach Orten zu unterteilen. Dies wird leider viel komplizierter, wenn Sie eine offene Welt ohne Grenzen haben, anstatt einer Welt, die aus geschlossenen Zonen besteht und zwischen denen sich Spieler teleportieren. Wenn Sie eine offene Welt haben, benötigen Sie eine Möglichkeit, Spieler nahtlos zwischen Zonen zu übertragen und die Bereiche in der Nähe der Grenzen zwischen den Servern zu synchronisieren. Das ist ein heikles Problem.
In Bezug auf die Datenbank: SQL-Datenbanken skalieren normalerweise schlecht. Sie sind nicht für die Verteilung vorgesehen. Derzeit gibt es jedoch einen ziemlich neuen Trend bei NoSQL-Datenbanken wie MongoDB oder Cassandra, die für die Verteilung auf mehrere Server konzipiert wurden. Sie erleichtern das Hinzufügen von Kapazität erheblich, indem nur weitere Server hinzugefügt werden. Warum wechseln nicht alle großen Spiele zu ihnen? Weil:
Wenn Ihr Projekt bereits sehr weit fortgeschritten ist, kann der Wechsel zu einer anderen Datenbanklösung ein großes Risiko und einen sehr großen Zeit- und Energieaufwand darstellen.
quelle
Nein, dies ist ein unglaublich schwieriger Bereich, der noch nicht gelöst wurde.
quelle
Ich weiß, das ist alt, aber ...
Es gibt tatsächlich zwei Bereiche, auf die man sich konzentrieren muss.
Sie müssen Ihre Anwendung auf mehrere Server verteilen. Sie müssen Ihre Datenbank auf mehrere Server verteilen.
Und Sie müssen Redundanz für beide haben.
Hierfür gibt es einige Open Source-Lösungen. Farmville ist ein gutes Beispiel für die Verwendung von MemSQL / Couchbase.
quelle