Auf unserem Blog haben wir bereits
Im Laufe seiner 9-jährigen Geschichte (gerechnet ab dem Veröffentlichungsdatum) hat Minecraft eine erstaunliche Anzahl von Fans und Hassern sowohl unter normalen Spielern als auch unter Geeks gewonnen. Das einfache Konzept einer Welt aus Blöcken hat sich von einer einfachen Form der Unterhaltung zu einem universellen Medium zur Kommunikation und Erstellung verschiedener Objekte aus der realen Welt entwickelt.
Zusätzlich zum Bauen verfügt das Spiel über die Fähigkeit zum Gestalten
Aber reden wir nicht weiter darüber, was genau die Spieler erstellen, sondern schauen wir uns den Serverteil der Anwendung an und beleuchten die (teils sehr komplexen) Probleme, die beim Betrieb unter Last auftreten können. Machen wir gleich einen Vorbehalt, dass wir nur über die Java Edition sprechen.
Arten von Servern
Die einfachste Option ist ein in den Spielclient integrierter Server. Wir haben eine Welt erstellt, einen Knopf gedrückt und der Server wurde über das lokale Netzwerk zugänglich. Diese Option hält keiner ernsthaften Belastung stand und wird daher von uns nicht einmal in Betracht gezogen.
Vanille
Mojang Studios vertreibt den Serverteil des Spiels kostenlos als Java-Anwendung
Dieser Ansatz hat einen gravierenden Nachteil, nämlich das Fehlen sofort einsatzbereiter Möglichkeiten zur Anbindung von Plugins, die die Funktionalität des Servers erweitern und nicht nur die Automatisierung vieler Prozesse, sondern auch die Optimierung der Leistung ermöglichen. Darüber hinaus hat der offizielle Server einen ziemlich hohen RAM-Verbrauch für jeden angeschlossenen Spieler.
bukkit
Eine von Enthusiasten erstellte Serveranwendung basierend auf der Vanilla-Version
Die Installation von Bukkit ist nicht schwierig, die entsprechenden Anweisungen finden Sie auf der Ressource
SpigotMC
Um Plugin-Entwicklern das Leben zu erleichtern, bestand Bedarf an einer API für die Interaktion mit der Spielwelt. Genau dieses Problem haben die Macher gelöst.
Derzeit wird SpigotMC aktiv weiterentwickelt und genutzt. Es unterstützt alle für Bukkit erstellten Plugins, ist jedoch nicht abwärtskompatibel damit. Um den DMCA-Takedown zu umgehen, wurde eine elegante Methode namens BuildTools erfunden. Dieses Tool macht die Verteilung einer kompilierten Anwendung überflüssig und ermöglicht Benutzern das Kompilieren von Spigot, CraftBukkit und Bukkit aus Quellcode. All dies macht das DMCA-Verbot nutzlos.
PaperMC
Alles schien cool und Spigot wurde zu einer großartigen Option. Doch das war einigen Enthusiasten nicht genug, und sie schufen ihre eigene Spigot-Abzweigung „auf Steroiden“. An
PaperMC verfügt über eine hervorragende Kompatibilität, sodass für SpigotMC geschriebene Plugins problemlos auf PaperMC funktionieren können, jedoch ohne offizielle Unterstützung. Auch eine Abwärtskompatibilität mit SpigotMC ist vorhanden. Nachdem wir nun die verschiedenen Optionen zum Erstellen eines Servers aufgelistet haben, kommen wir nun zu den Leistungsproblemen, die auftreten können.
Probleme und Lösungen
Das Wichtigste, was Sie verstehen müssen, ist, dass alles, was mit der Verarbeitung der Spielwelt zusammenhängt, nur auf einem Rechenkern des physischen Servers verarbeitet wird. Wenn Sie also plötzlich einen hervorragenden Server mit einem Dutzend Rechenkernen haben, wird nur einer belastet. Alle anderen werden praktisch untätig sein. Dies ist die Architektur der Anwendung, und Sie können nichts dagegen tun. Bei der Auswahl eines Servers sollte man also nicht auf die Anzahl der Kerne, sondern auf die Taktfrequenz achten. Je höher er ist, desto besser ist die Leistung.
Bezüglich der Frage der RAM-Kapazität sollten wir von folgenden Indikatoren ausgehen:
- geplante Spieleranzahl;
- geplante Anzahl der Welten auf dem Server;
- die Größe jeder Welt.
Es ist zu bedenken, dass eine Java-Anwendung immer eine RAM-Reserve benötigt. Wenn Sie mit einem Speicherverbrauch von 8 Gigabyte rechnen, dann müssten es tatsächlich 12 sein. Die Zahlen sind relativ, am Kern ändert sich aber nichts.
Um den Serverteil zu starten, empfehlen wir die Verwendung der im Artikel angegebenen Flags
Generieren einer Blockkarte
„Glauben Sie wirklich, dass der Mond nur existiert, wenn Sie ihn betrachten?“ (Albert Einstein)
Komplett neuer Server. Sobald sich der Spieler zum ersten Mal erfolgreich verbindet, erscheint der Spielcharakter am allgemeinen Sammelpunkt (Spawn). Dies ist der einzige Ort, an dem die Spielwelt vom Server vorgeneriert wird. Gleichzeitig schaut sich der Client-Teil die Einstellungen an, und der Schlüsselparameter ist der Zeichenabstand. Sie wird in Chunks gemessen (der Kartenbereich ist 16×16 und 256 Blöcke hoch). Wie viele Chunks angegeben sind, gibt genau an, wie viele vom Server angefordert werden.
Der Server speichert eine globale Weltkarte. Wenn darin zum Zeitpunkt des Erscheinens der Spielfigur noch keine generierten Blöcke vorhanden sind, generiert der Server diese dynamisch und speichert sie. Dies erfordert nicht nur große Rechenressourcen, sondern führt auch zu einer ständigen Vergrößerung der Weltkarte. Auf einem der ältesten anarchistischen Server
Es ist kein Problem, eine Welt um einen Spieler herum zu erschaffen. Das Erzeugen einer Welt mit Hunderten von Spielern führt für kurze Zeit zu geringfügigen Serververlangsamungen, danach nimmt die Auslastung ab. Das Erzeugen einer Welt mit einer Client-Rendering-Reichweite von etwa tausend Spielern kann bereits dazu führen, dass der Server „abstürzt“ und alle Clients aufgrund einer Zeitüberschreitung aus dem Server geworfen werden.
In der Serversoftware gibt es einen Wert wie TPS (Ticks pro Server – Ticks pro Sekunde). Normalerweise entspricht 1 Taktzyklus 50 ms. (1 Sekunde der realen Welt entspricht 20 Ticks der Spielwelt). Wenn die Verarbeitung eines Ticks auf 60 Sekunden ansteigt, wird die Serveranwendung geschlossen und alle Spieler werden ausgeschlossen.
Die Lösung besteht darin, die Welt auf bestimmte Koordinaten zu beschränken und eine vorläufige Blockgenerierung durchzuführen. Dadurch entfällt die Notwendigkeit einer dynamischen Generierung während des Spiels und der Server muss nur eine vorhandene Karte lesen. Beide Probleme können mit einem einzigen Plugin gelöst werden
Der einfachste Weg besteht darin, die Weltgrenze mit einem Befehl in Form eines Kreises relativ zum Spawnpunkt festzulegen (obwohl Sie eine beliebige Form haben können):
/wb set <радиус в блоках> spawn
Wenn der Spielercharakter versucht, die Grenze zu überschreiten, wird er mehrere Blocks zurückgedrängt. Geschieht dies mehrmals innerhalb einer begrenzten Zeit, wird der Täter zwangsweise zum Spawnpunkt teleportiert. Noch einfacher geht die Vorgenerierung der Welt mit dem Befehl:
/wb fill
Da sich diese Aktion möglicherweise auf Spieler auf dem Server auswirken könnte, stellen Sie sicher, dass Sie Folgendes bestätigen:
/wb confirm
Insgesamt dauerte die Generierung einer Welt mit einem Radius von 5000 Blöcken (~40 Milliarden Blöcken) auf einem Intel® Dieser Vorgang wird eine angemessene Zeit in Anspruch nehmen und die Server-TPS wird erheblich reduziert. Bedenken Sie außerdem, dass selbst ein Radius von 2 Blöcken etwa 6240 GB Speicherplatz erfordert.
Obwohl die neueste Version des Plugins für Minecraft Version 1.14 entwickelt wurde, wurde experimentell festgestellt, dass es in nachfolgenden Versionen hervorragend funktioniert. Eine vollständige Liste der Befehle mit Erläuterungen ist verfügbar
Problemblöcke
In Minecraft gibt es eine große Vielfalt an Blöcken. Wir möchten die Leser jedoch auf einen solchen Block aufmerksam machen TNT. Wie der Name schon sagt, handelt es sich bei diesem Block um einen Sprengstoff (Anmerkung des Herausgebers: Dies ist ein Spielgegenstand der virtuellen Welt und dieser Gegenstand hat nichts mit echtem Sprengstoff zu tun.). Seine Besonderheit besteht darin, dass im Moment der Aktivierung die Schwerkraft auf ihn einzuwirken beginnt. Dies zwingt den Server, alle Koordinaten zu berechnen, wenn der Block in diesem Moment zu fallen beginnt.
Wenn mehrere TNT-Blöcke vorhanden sind, führt die Detonation eines Blocks zu einer Detonation und Aktivierung der Schwerkraft in benachbarten Blöcken, wodurch diese in alle Richtungen zerstreut werden. All diese schönen Mechanismen auf der Serverseite scheinen eine Menge Operationen zur Berechnung der Flugbahn jedes Blocks sowie der Interaktion mit benachbarten Blöcken zu sein. Die Aufgabe ist äußerst ressourcenintensiv, was jeder leicht überprüfen kann. Erzeuge und sprenge einen Würfel aus TNT-Blöcken, der mindestens 30x30x30 groß ist. Und wenn Sie dachten, Sie hätten einen guten, leistungsstarken Gaming-Computer, dann haben Sie sich gewaltig getäuscht 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt
Ein ähnliches „Experiment“ auf einem Server mit Intel® Wenn also ein Spieler dazu in der Lage ist, betrifft das Leistungsproblem alle Spieler auf dem Server.
Eine noch schwierigere Option - Randkristalle. Wenn TNT dennoch nacheinander explodiert, explodieren die Randkristalle alle gleichzeitig, was theoretisch den Betrieb der Serveranwendung vollständig stoppen kann.
Dieses Szenario kann nur vermieden werden, indem die Verwendung dieser Blöcke in der Spielwelt vollständig verboten wird. Zum Beispiel mit dem Plugin
Abschluss
Die ordnungsgemäße Verwaltung eines Spieleservers ist keine leichte Aufgabe. Auf Schritt und Tritt erwarten Sie Schwierigkeiten und Leistungseinbußen, insbesondere wenn Sie die Spielmechanik selbst nicht berücksichtigen. Es ist unmöglich, alles vorherzusehen, da Spieler manchmal sehr kreativ sein können, wenn sie versuchen, den Server zu etwas zu zwingen, für das er nicht vorgesehen ist. Nur ein angemessenes Gleichgewicht zwischen Risiken und festgelegten Einschränkungen ermöglicht einen kontinuierlichen Betrieb des Servers und verringert seine Leistung nicht auf kritische Werte.
Während der Quarantäne vermissten einige unserer Mitarbeiter ihre Lieblingsbüros und beschlossen, sie in Minecraft nachzubauen. Sie haben auch die Möglichkeit, uns zu besuchen, ohne Ihre Gesundheit zu gefährden oder unterwegs Zeit zu verschwenden.
Dazu laden wir alle auf unseren Server ein minecraft.selectel.ru (Client-Version 1.15.2), wo die Rechenzentren Tsvetochnaya-1 und Tsvetochnaya-2 neu erstellt wurden. Vergessen Sie nicht, dem Download zusätzlicher Ressourcen zuzustimmen, diese sind für die korrekte Anzeige einiger Standorte erforderlich.
Es erwarten Sie Quests, Aktionscodes, Easter Eggs und angenehme Kommunikation.
Source: habr.com