
In unserem Blog haben wir bereits , wie man seinen eigenen Minecraft-Server erstellt, jedoch sind seitdem 5 Jahre vergangen und es hat sich viel verändert. Wir teilen mit Ihnen aktuelle Methoden zur Erstellung und Optimierung des Serverteils dieses beliebten Spiels.
In seiner 9-jährigen Geschichte (wenn man vom Veröffentlichungsdatum ausgeht) hat Minecraft eine beeindruckende Anzahl von Fans und Gegnern gewonnen, sowohl unter normalen Spielern als auch unter Nerds. Das einfache Konzept einer Welt aus Würfeln hat sich von einer gewöhnlichen Freizeitbeschäftigung zu einer universellen Umgebung für Kommunikation und zur Schaffung verschiedener Objekte aus der realen Welt entwickelt.
Neben dem Bau gibt es im Spiel die Möglichkeit, , die es ermöglichen, vollständige Algorithmen innerhalb von Minecraft umzusetzen. Auf YouTube gibt es zahlreiche beeindruckende Videos, in denen Menschen, die enorme Anstrengungen unternommen und viel Zeit investiert haben, Kopien von elektronischen Geräten erstellt oder detaillierte Nachbildungen und architektonischer Strukturen gebaut haben. Alles ist nur durch die Fantasie des Spielers und die Möglichkeiten des Spieluniversums begrenzt.

Aber anstatt weiter zu besprechen, was die Spieler erschaffen, wollen wir uns den Serverteilen der Anwendung zuwenden und die Probleme (manchmal sehr komplizierte), die im Betrieb unter Last auftreten können, beleuchten. Wir möchten gleich zu Beginn erwähnen, dass es hierbei nur um die Java Edition gehen wird.
Serverarten
Die einfachste Variante ist der Server, der im Client des Spiels integriert ist. Eine Welt erstellt, auf einen Knopf gedrückt, und schon ist der Server im lokalen Netzwerk verfügbar. Diese Variante kann keinerlei ernsthafte Last bewältigen, daher wollen wir sie nicht weiter betrachten.
Vanilla
Das Unternehmen Mojang Studios stellt den Serverteil des Spiels kostenlos als Java-Anwendung zur Verfügung . Dies ermöglicht es, seine eigene und persönliche Welt zu erstellen und sie von überall auf der Welt zugänglich zu machen. Für diejenigen, die dies zum ersten Mal tun, gibt es ein ausgezeichnetes , das in der entsprechenden Spiel-Wiki verfügbar ist.
Dieser Ansatz hat einen ernsthaften Nachteil: Es gibt keine „Out-of-the-Box“-Möglichkeiten, Plugins anzuschließen, die die Funktionalität des Servers erweitern und es ermöglichen, nicht nur viele Prozesse zu automatisieren, sondern auch die Leistung zu optimieren. Darüber hinaus hat der offizielle Server einen recht hohen Verbrauch an Arbeitsspeicher pro verbundenem Spieler.
Bukkit
Die von Enthusiasten auf Basis der Vanilla-Version entwickelte Serveranwendung erweiterte die Spielmöglichkeiten erheblich durch die Unterstützung von Plugins und Mods (Modifikationen). Sie ermöglichte nicht nur das Hinzufügen neuer Blöcke ins Spiel, sondern auch verschiedene Manipulationen, die mit der Vanilla-Software nicht möglich sind. Interessanterweise benötigte diese Anwendung deutlich weniger Speicher.
Die Installation von Bukkit ist nicht besonders schwierig; eine entsprechende Anleitung ist auf der Seite verfügbar. Aber das macht keinen Sinn, da das Bukkit-Team seit 2014 aufgelöst ist und die Entwickler des Projekts Mitarbeiter von Mojang Studios wurden, und es aufgegeben wurde. Damit ist Bukkit faktisch tot, und es macht Sinn, sich auf die folgenden beiden Projekte zu konzentrieren.
SpigotMC
Um das Leben der Plugin-Entwickler zu erleichtern, bestand die Notwendigkeit nach einer API für die Interaktion mit der Spielwelt. Diese Aufgabe wurde von den Schöpfern von gelöst, die den Bukkit-Kernel als Grundlage genommen und ihn zur Verbesserung von Zuverlässigkeit und Leistung überarbeitet haben. Dennoch, des Projekts wurde aufgrund des Gesetzes über das Urheberrecht im digitalen Zeitalter () gesperrt, und es ist unmöglich, den Quellcode von dort herunterzuladen.
Momentan entwickelt sich SpigotMC aktiv weiter und wird genutzt. Es unterstützt alle Plugins, die für Bukkit erstellt wurden, ist aber nicht rückwärtskompatibel. Um das DMCA-Takedown-Verbot zu umgehen, wurde eine elegante Lösung namens BuildTools entwickelt. Dieses Tool befreit von der Notwendigkeit, die kompilierte Anwendung zu verteilen, und ermöglicht es den Nutzern, Spigot, CraftBukkit und Bukkit aus dem Quellcode zu kompilieren. All dies macht das DMCA-Verbot nutzlos.
PaperMC
Es schien alles großartig, und Spigot wurde eine hervorragende Wahl. Doch einige Enthusiasten fanden das nicht genug und entwickelten ihren eigenen „steroidgeschwängerten“ Fork von Spigot. Auf der wird als Hauptvorteil angegeben, dass „es verdammt schnell ist“. Die entwickelte erlaubt es, возникающие Fragen schnell zu lösen, und die erweiterte API ermöglicht es, interessante Plugins zu erstellen. PaperMC kann mit einem einfachen Befehl gestartet werden, der in .
Die Kompatibilität von PaperMC ist hervorragend, sodass die für SpigotMC geschriebenen Plugins auch auf PaperMC problemlos funktionieren, jedoch ohne offizielle Unterstützung. Auch die Abwärtskompatibilität zu SpigotMC ist gegeben. Jetzt, da wir verschiedene Möglichkeiten zur Erstellung eines Servers aufgelistet haben, kommen wir zu den Leistungsproblemen, die auftreten können.
Probleme und Lösungen
Das Wichtigste, was man verstehen muss, ist, dass alles, was die Verarbeitung der Spielwelt betrifft, nur auf einem Rechenkern des physischen Servers verarbeitet wird. Selbst wenn Sie einen großartigen Server mit zehn Rechenkernen haben, wird nur einer ausgelastet sein. Alle anderen werden praktisch untätig sein. So ist die Architektur der Anwendung, und daran können Sie nichts ändern. Daher sollten Sie bei der Auswahl eines Servers nicht auf die Anzahl der Kerne, sondern auf die Taktfrequenz achten. Je höher diese ist, desto besser wird die Leistung sein.
Was die Frage des RAM-Volumens angeht, sollten Sie von folgenden Indikatoren ausgehen:
- die geplante Anzahl der Spieler;
- die geplante Anzahl der Welten auf dem Server;
- die Größe jeder Welt.
Es ist zu beachten, dass Java-Anwendungen immer einen Puffer im RAM benötigen. Wenn Sie mit einem Speicherverbrauch von 8 Gigabyte rechnen, sollten Sie tatsächlich 12 haben. Die Zahlen sind ungefähre Werte, aber die Essenz bleibt unverändert.
Zum Starten des Serverteils empfehlen wir, die in dem Artikel angegebenen Flags zu verwenden . Diese „schwarze Magie“ ermöglicht es dem Server, den „Garbage Collector“ richtig zu konfigurieren und die Nutzung des Arbeitsspeichers zu optimieren. Es ist nicht ratsam, mehr Speicher bereitzustellen, als der Server bei maximaler Spieleranzahl tatsächlich benötigt.
Generierung der Blockkarte
„Glauben Sie wirklich, dass der Mond existiert, nur wenn Sie ihn ansehen?“ (Albert Einstein)
Ein absolut neuer Server. Sobald der Spieler sich zum ersten Mal erfolgreich verbindet, erscheint die Spielfigur an einem gemeinsamen Sammelpunkt (Spawn). Dies ist der einzige Ort, an dem die Spielwelt vom Server vorab generiert wird. In diesem Moment schaut der Client in die Einstellungen, wobei die entscheidende Parameter die Sichtweite ist. Diese wird in Chunks gemessen (ein Kartenbereich von 16×16 und einer Höhe von 256 Blöcken). Die angegebene Anzahl an Chunks wird vom Server angefordert.
Auf dem Server wird eine globale Weltkarte gespeichert, und wenn an dem Spawnpunkt der Spielfigur noch keine generierten Blöcke vorhanden sind, generiert der Server diese dynamisch und speichert sie. Neben dem hohen Rechenaufwand erhöht sich auch ständig die Größe der Weltkarte. Auf einem der ältesten anarchischen Server (2builders2tools) hat die Kartengröße bereits 8 Tb überschritten, und die Weltgrenze liegt bei 30 Millionen Blöcken. Mit diesem Server sind Tausende von Geschichten verbunden, und er verdient einen eigenen Artikel oder eine Artikelreihe.
Die Welt um einen Spieler herum zu generieren, ist kein Problem. Das Generieren der Welt um hunderte Spieler wird vorübergehend kleinere Serververzögerungen verursachen, danach wird die Last jedoch sinken. Die Generierung der Welt in der Sichtweite des Clients um tausend Spieler kann den Server „zum Absturz bringen“ und alle Clients aufgrund eines Timeouts abwerfen.
In der Server-Software gibt es einen Wert namens TPS (Ticks per Server — Ticks pro Sekunde). Standardmäßig entspricht 1 Tick 50 ms. (1 Sekunde in 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 geworfen.
Eine Lösung besteht darin, die Welt auf bestimmte Koordinaten zu beschränken und eine Vorab-Generierung der Blöcke durchzuführen. Dadurch wird die Notwendigkeit der dynamischen Generierung während des Spiels beseitigt, und der Server muss nur die bereits vorhandene Karte lesen. Beide Probleme werden mit einem einzigen Plugin gelöst. .
Am einfachsten ist es, die Weltgrenze in Form eines Kreises um den Spawnpunkt zu definieren (obwohl sie jede beliebige Form haben kann) mit einem einzigen Befehl:
/wb set <радиус в блоках> spawnWenn der Spielcharakter versucht, die Grenze zu überschreiten, wird er um mehrere Blöcke zurückgeworfen. Wenn dies mehrmals in kurzer Zeit geschieht, wird der Übeltäter gezwungen, an den Spawn-Punkt teleportiert zu werden. Die vorläufige Weltgenerierung erfolgt noch einfacher mit dem Befehl:
/wb fillDa diese Aktion potenziell die Spieler auf dem Server betreffen kann, vergessen Sie nicht, die Durchführung zu bestätigen:
/wb confirmInsgesamt dauerte es etwa 2 Stunden auf einem Intel® Xeon® Gold 6240-Prozessor, um eine Welt mit einem Radius von 5000 Blöcken (~40 Mrd. Blöcken) zu generieren. Daher sollten Sie, wenn Sie eine größere Karte vorab generieren möchten, berücksichtigen, dass dieser Prozess eine beträchtliche Menge an Zeit in Anspruch nehmen wird und die TPS des Servers erheblich gesenkt werden. Außerdem denken Sie daran, dass selbst ein Radius von 5000 Blöcken etwa 2 GB Speicherplatz auf dem Datenträger benötigt.
Obwohl die neueste Version des Plugins für die Minecraft-Version 1.14 entwickelt wurde, wurde empirisch festgestellt, dass es auch mit späteren Versionen hervorragend funktioniert. Eine vollständige Liste der Befehle mit Erklärungen ist verfügbar .
Problematische Blöcke
Es gibt eine enorme Vielzahl von Blöcken in Minecraft. Wir möchten jedoch die Aufmerksamkeit der Leser auf einen Block lenken, der als TNTbezeichnet wird. Wie der Name schon sagt, handelt es sich bei diesem Block um Sprengstoff (Anmerkung der Redaktion – dies ist ein Spielgegenstand der virtuellen Welt und hat nichts mit echten Explosivstoffen zu tun). Seine Besonderheit besteht darin, dass bei der Aktivierung die Schwerkraft auf ihn wirkt. Dies zwingt den Server, alle Koordinaten zu berechnen, wenn der Block zu fallen beginnt.
Wenn mehrere TNT-Blöcke vorhanden sind, führt die Detonation eines Blocks zur Detonation und Aktivierung der Schwerkraft bei den benachbarten Blöcken, was sie in alle Richtungen verstreut. Diese beeindruckende Mechanik sieht auf der Serverseite aus wie viele Operationen zur Berechnung der Trajektorie jedes Blocks sowie zur Interaktion mit benachbarten Blöcken. Die Aufgabe ist äußerst ressourcenintensiv, was jeder leicht überprüfen kann. Generieren Sie und sprengen Sie einen Würfel aus TNT-Blöcken mit einer Größe von mindestens 30x30x30. Und wenn Sie dachten, dass Sie einen guten, leistungsstarken Gaming-Computer haben, täuschten Sie sich gewaltig 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Ein ähnliches „Experiment“ auf einem Server mit Intel® Xeon® Gold 6240 führte zu einem erheblichen Rückgang der TPS und einer CPU-Auslastung von 80 % während der gesamten Zeit der Detonation der Blöcke. Wenn also jemand von den Spielern dies nachstellen kann, wird das Leistungsproblem alle Spieler auf dem Server betreffen.
Eine noch drastischere Variante — Kantenkristalle. Wenn TNT dennoch nacheinander explodiert, detonieren die Kantenkristalle alle gleichzeitig, was theoretisch die Funktionsfähigkeit der Serveranwendung ganz stoppen kann.
Um dieses Szenario zu vermeiden, kann man nur die Verwendung dieser Blöcke in der Spielwelt vollständig verbieten. Zum Beispiel mit Hilfe des Plugins . Bitte beachten Sie, dass dieses Plugin für sich genommen nicht funktioniert, ohne dass ein anderes Plugin installiert ist, . Sie sollten zuerst WorldEdit und dann WorldGuard installieren.
Fazit
Eine kompetente Verwaltung des Spielservers ist keine einfache Aufgabe. Schwierigkeiten und eine geringere Leistung werden einen in jedem Schritt begleiten, besonders wenn man die Mechanik des Spiels selbst nicht in Betracht zieht. Es ist unmöglich, alles vorherzusehen, da Spieler manchmal sehr einfallsreich darin sind, den Server dazu zu bringen, Dinge auszuführen, für die er nicht vorgesehen ist. Nur ein vernünftiger Ausgleich zwischen Risiken und auferlegten Einschränkungen wird es dem Server erlauben, im kontinuierlichen Modus zu arbeiten und seine Leistung nicht auf kritische Werte zu verringern.
Im Homeoffice haben sich einige unserer Mitarbeiter nach ihren geliebten Büros gesehnt und beschlossen, diese innerhalb von Minecraft nachzubauen. Sie haben auch die Möglichkeit, uns zu besuchen, ohne Ihre Gesundheit zu riskieren und ohne Zeit auf dem Weg zu verlieren.
Dazu laden wir alle Interessierten auf unseren Server ein, minecraft.selectel.ru (Client-Version 1.15.2), wo die Rechenzentren Blumen-1 und Blumen-2 nachgebaut wurden. Vergessen Sie nicht, dem Download zusätzlicher Ressourcen zuzustimmen, da diese für die korrekte Anzeige einiger Standorte erforderlich sind.
Sie erwarten Quests, Promo-Codes, „Easter Eggs“ und angenehme Gespräche.
Quelle: habr.com
