Optimierung des Minecraft-Servers

Optimierung des Minecraft-Servers
Auf unserem Blog haben wir bereits erzählt, wie man seinen eigenen Minecraft-Server erstellt, aber seitdem sind 5 Jahre vergangen und es hat sich viel geändert. Wir zeigen Ihnen aktuelle Möglichkeiten zur Erstellung und Optimierung des Serverteils eines so beliebten Spiels.

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 Logik, mit denen Sie vollwertige Algorithmen in Minecraft implementieren können. YouTube ist voll von sehr beeindruckenden Videos, in denen Menschen mit großem Aufwand und viel Zeit eine Kopie dieses oder jenes elektronischen Geräts erstellt oder eine detaillierte Kopie erstellt haben vorhanden и fiktiv architektonische Strukturen. Alles wird nur durch die Vorstellungskraft des Spielers und die Möglichkeiten des Gaming-Universums begrenzt.


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 auf der offiziellen Website. Auf diese Weise können Sie Ihre eigenen erstellen Dedizierter Server und persönliche Welt und macht sie für die Verbindung von überall auf der Welt zugänglich. Für diejenigen, die dies zum ersten Mal tun, gibt es eine tolle Sache Lernprogramm, verfügbar im entsprechenden Gaming-Wiki.

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 bukkit Die Fähigkeiten des Spiels wurden durch die Unterstützung von Plugins und Mods (Modifikationen) erheblich erweitert. Es ermöglichte nicht nur das Hinzufügen neuer Blöcke zum Gameplay, sondern auch die Durchführung verschiedener Manipulationen, die für Vanilla-Software nicht zugänglich waren. Interessanterweise benötigte diese Anwendung deutlich weniger Speicher.

Die Installation von Bukkit ist nicht schwierig, die entsprechenden Anweisungen finden Sie auf der Ressource GamePedia. Dies macht jedoch keinen Sinn, da sich das Bukkit-Team seit 2014 aufgelöst hat und die Projektentwickler Mitarbeiter der Mojang Studios geworden sind Repository verlassen. Somit ist Bukkit faktisch tot und es macht Sinn, den nächsten beiden Projekten Aufmerksamkeit zu schenken.

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. ZapfenDabei wurde der Bukkit-Kern übernommen und überarbeitet, um eine bessere Zuverlässigkeit und Leistung zu erzielen. Dennoch, Git-Repository Das Projekt wurde aufgrund des Digital Millennium Copyright Act blockiert (DMCA), und es ist unmöglich, den Quellcode von dort herunterzuladen.

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 Seite des Projekts Der entscheidende Vorteil ist, dass „es schnell dumm ist“. Entwickelt Gemeinschaft ermöglicht es Ihnen, auftretende Probleme schnell zu lösen, und die erweiterte API ermöglicht Ihnen die Erstellung interessanter Plugins. Sie können PaperMC mit einem einfachen Befehl starten, der in eingegeben wird Dokumentation.

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 Optimierung der JVM – G1GC Garbage Collector Flags für Minecraft. Diese „schwarze Magie“ ermöglicht es dem Server, den „Garbage Collector“ richtig zu konfigurieren und die RAM-Nutzung zu optimieren. Sie sollten nicht mehr Speicher zuweisen, als der Server während des Spitzenzustroms an Spielern tatsächlich verbraucht.

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 2b2t (2builders2tools) Die Größe der Karte hat bereits 8 TB überschritten und die Weltgrenze liegt bei etwa 30 Millionen Blöcken. Mit diesem Server sind tausende Geschichten verbunden und er verdient einen eigenen Artikel in der Serie.

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 Weltgrenze.

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 im Plugin-Forum.

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

Optimierung des Minecraft-Servers
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 Weltgarde. Bitte beachten Sie, dass dieses Plugin allein nicht ohne ein anderes Plugin funktioniert Worldedit. Installieren Sie also zuerst WorldEdit und dann WorldGuard.

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

Kommentar hinzufügen