Serverschonend bauen
Für viele ist es schwierig einzuschätzen, was eigentlich ein Server macht und wie wir "Leistung" bemessen. Für einen selbst im Singleplayer scheint die große Redstone Anlage doch fein zu laufen, dann ist das doch auf einem Server kein Problem, oder? Meine überdimensionierte Kakteen Farm macht doch kein Problem, da kein Redstone verbaut ist, richtig?
Damit ein Server Aktionen berechnen kann, gibt es verschiedene Faktoren, ein paar dieser habe ich dir hier aufgelistet.
Ticks pro Sekunde (TPS)
"Ticks pro Sekunde" ist die am häufigsten verwendete Einheit zur Angabe der Serverperformance.
Minecraft arbeitet mit einem eigenen Zeitsystem, welches mit sogenannten "Ticks" arbeitet. Ein Minecraft-Tag entspricht einer Zeitspanne von 24.000 Ticks. Auch der Server nutzt diese Angabe, um Änderungen in der Spielwelt zu verarbeiten. Das Bewegen von Entitäten, die Zeit zum Abbauen eines Blocks, Schaden erleiden/heilen und alle anderen Vorgänge werden bei jedem Tick ein wenig weiter geschoben.
Minecraft geht hierbei von einer optimalen Tickrate von 20 Ticks pro Sekunde aus. (1 Tick = 50ms / 0,05 Sekunden). Dabei kann der Server, gemessen an seiner Rechengeschwindigkeit nur eine bestimmte Anzahl an "Rechenoperationen" vornehmen. Übersteigt die Anzahl an Verarbeitungen die Menge, so können diese nicht mehr in der vollen Geschwindigkeit ablaufen. Der Server "laggt" (engl. "lag behind" = hinterherhängen) und in einer Sekunde werden weniger Ticks abgearbeitet.
Die Performance des Servers fällt dann auf einen niedrigeren TPS-Wert. Es werden also weniger Ticks pro Sekunde ausgeführt. Aktionen, welche davon abhängig sind benötigen entweder mehr Zeit zum Ausführen oder werden "zurückgesetzt", wenn zwischen dem Server und dem Spielclient unterschiedliche Zeitberechnungen stattfanden. Das tritt besonders oft beim Abbauen von Blöcken oder beim Bewegen von Spielfigur oder Kreaturen auf. (sog. "Zurückbuggen").
Central Processor Unit (CPU)
Server arbeiten wie andere Informationssysteme mit einer CPU (Central Processing Unit), auch als Prozessor bezeichnet. Ein wesentliches Problem in der Performance ist, dass Minecraft als Anwendung lediglich einen Kern des Prozessors ansteuert und verwendet, was die maximale Rechenleistung der verwendeten Systeme stark einschränkt.
Selbst ein Multikernprozessor (DualCore, QuadCore oder EightCore) auf einem Server bringt also keinen Vorteil, da der MainThread von Minecraft immer nur einen Kern ansteuern würde und die Leistung verloren ginge. Viele Prozesse können zudem bei Minecraft nicht asynchron abgearbeitet werden, da sie mit anderen in der Spielwelt zusammenhängen. Somit fällt auch eine Virtualisierung von mehreren Prozessoren auf einen aus. Der "virtualisierte" Einzelkern würde die Aufgaben an mehrere physische Kerne verteilen, was die Abarbeitung nicht nur "verzögert", sondern möglicherweise auch asychronisiert und dadurch insgesamt zu mehr Problemen führt, als es löst.
Je mehr Aktionen also innerhalb der Spielwelt auftreten, desto stärker wird der Server hierdurch belastet. Je weiter die CPU-Auslastung ansteigt, desto mehr Aktionen muss der Server in kurzer Zeit "verarbeiten". Übersteigt die Menge der zu verarbeitenden Aktionen 5% der max. CPU-Last, so können 20 Ticks in einer Sekunde nicht mehr abgearbeitet werden. (20 Ticks * 5% = 100% Last pro Sekunde).
Hat ein Server also mehr CPU-Last, muss er die Menge an Ticks reduzieren, damit er nicht überlastet wird. Wird die Menge an Ticks reduziert, fällt dies als schlechte Performance durch entsprechendes Fehlverhalten zwischen Server und Spiel-Client auf.
Nun weißt du, wie die Berechnung von Leistung auf einem Server funktioniert. Natürlich führen da noch einige weitere Faktoren mit dazu, wie optimiert sind die Plugins, wieviele Welten werden geladen, welche Server Version und vieles mehr.
Zusammengefasst führen die oben genannten Punkte jedoch zu einem Problem: Wir können nicht "unendlich viel Leistung" hinzuführen. Im Umkehrschluss wäre also eine Limitierung notwendig.
Diese möchten wir aber so gut es geht vermeiden, daher setzen wir hier auf das vernünftige Verständnis unserer Spieler.
Um so ein Verständnis zu vermitteln, haben wir diese weiteren Punkte eingeführt, damit auch du unseren Server mit deinen Bauwerken schonen kannst:
Trichter
Das Thema Trichter ist ein besonders großes und wurde bereits mehrmals auf dem Server angesprochen. Trichter fragen immer ab, ob sie ein Item über sich einsammeln können. Gleichzeitig fragen diese ebenfalls ab, ob sie ein Item in eine der 5 weiteren Richtungen abgeben können. Dabei ist es irrelevant, ob tatsächlich Items zum Transport zur Verfügung stehen oder nicht. Auch das Abdecken eines Trichters mit z.B. Composter oder ähnlichem unterbindet diese Abfrage nicht.
Deshalb sollten immer so wenig Trichter wie möglich benutzt werden. Sie sind nicht verboten und können gerne genutzt werden. Doch jeder eingesparte Trichter hilft der Performance auf dem Server.
Wenn zu viele Trichter gleichzeitig aktiv sind, wird die gesamte Leistung der Trichter auf dem Server reduziert, da dies ansonsten zu Performanceeinbußen führt. (Maximal 8 Items pro Sekunde, Minimal 1 Item alle zwei Sekunden)
Lagersyteme
Natürlich wünscht auch du dir ein vollautomatisches Lager. Man schmeißt sein Item einfach in eine Kiste und es kommt wie von Zauberhand sortiert richtig an.
Wir möchten keine Lagersysteme verbieten oder unterbinden, versuche bitte jedoch selbstständig diese auf das nötigste zu beschränken und nicht einfach nur für den Flex 800 Doppelkisten für Hebel zu platzieren.
Farmen
Trichter werden häufig zum Einsammeln der Drops von halb- oder vollautomatischen Farmen genutzt. Um diese an Stellen einzusparen ist eine Wasserstraße zu empfehlen, die die Items zu einem Punkt spülen und dort von einem einzelnen Trichter eingesammelt werden. Ebenfalls ist die Verwendung von Spezial Trichtern förderlich, da diese größere Mengen an Items im gleichen Intervall transportieren können.
Die gleichzeitige Aktivierung von Anlagen gilt zu vermeiden, da diese zeitgleich in einem Bereich vom Server viele Updates erfordern. Dies benötigt auf einen Schlag viele Ressourcen, obwohl es eigentlich vermieden werden könnte.
Kolben
Ein platzierter Kolben selbst stellt kein Problem da, nur die mehrfache Aktivierung einzelner Kolben in einem kurzen Zeitraum. Bei einem Kolben wird nicht nur die Bewegung selbst berechnet, sondern ebenfalls eine Abfrage an den davor liegenden Block gesendet, ob dieser überhaupt verschoben/bewegt werden kann. Ebenfalls muss das Licht berechnet werden, welches durch den Kolben verändert wird, was jedes mal bis zu 15 Blöcke im Umkreis ausmachen kann.
Versuche daher Kolben sparsam und langsam einzusetzen. Blumenfarmen sind beispielsweise extrem serverbelastend, wenn diese zu schnell laufen.
Minecarts/Boote
Minecarts und Boote zählen als Entities. Seit der Minecraft Version 1.9 stoßen sich diese Entities gegenseitig ab, weshalb immer der neue Weg berechnet werden muss (das sogenannte Pathfinding). Deshalb sind Räume, in denen sich viele Entities dauerhaft berühren eine große Belastung für den Server. Deshalb sollten solche Situationen vermieden werden. (Dazu zählen ebenfalls ineinander gestackte Hopper Minecarts)
Ähnlich belastend sind aber auch Dorfbewohner, die sich in Booten und Minecarts befinden. Denn hier versucht der Villager sich permanent fortzubewegen, auch wenn das Boot beispielsweise von Blöcken umgeben ist. Entfern daher das Boot und Minecart unter deinen Villagern, wenn diese an ihrer Position angelangt sind.
Wasser/Lava
Flüssigkeiten werden immer bei einer Veränderung berechnet. Wird ein Gebiet mit Wasser/Lava neu überflutet, so finden viele Berechnungen statt, wo sich die jeweilige Flüssigkeit hin ausbreitet. Je größer die überspülte Fläche ist, desto aufwändiger ist es für den Server. Sobald diese Ausbreitung abgeschlossen ist, so werden auch keine neuen Berechnungen durchgeführt.
Besonders bei einigen Farmen (z. B. Lohenfarmen, diverse Essensfarmen) findet diese Mechanik häufiger statt. Sobald eine Essenfarm mittels Wasser geerntet, oder eine Lohenfarm aktiviert/deaktiviert wird, verändert sich zeitweise das Wasser. Um diese Veränderung möglichst gering zu halten, sollten Essensfarmen nicht übermäßig groß gebaut und Lohenfarmen sollten nicht häufig im Wechsel aktiviert und deaktiviert werden.
Mobs
Viele Monster in einem Bereich sind problematisch für die gesamte Belastung des Servers. Füchse, Hühner, etc. die auf einem Punkt konzentriert sind, benötigen mehr Leistung als eine hocheffiziente Mob Farm. Da diese Tiere permanent geladen werden und sich neue Wege, Ziele und Möglichkeiten suchen. Legt ein Huhn nun Eier oder nicht, schwimmt es, fliegt es, kann es laufen, gibt es Wege zu laufen und vieles mehr.
Mobs auf Wasser stellen dabei ein größeres Problem dar. Da die Mobs die ganze Zeit auf dem Wasser schwimmen, werden ständig neue Berechnungen zur Bewegung durchgeführt. Verstärkt werden diese, sobald sich mehrere Mobs an derselben Stelle auf dem Wasser befinden. Sollte dies nicht gerade gebraucht werden, so sollte das Wasser unter den Mobs entfernt werden, um dem Server die Berechnungen zu ersparen.
Wenn das alles nichts bringt, führen viele Server am Ende ein AFK System ein. Ich halte das für problematisch. Mehr dazu erfährst du aber hier:
Away from Keyboard (AFK)
Ich persönlich habe häufig Kritik an Servern geübt, die es ihren Stammspielern nicht ermöglichen aktiv auf ihrem Lieblingsserver zu spielen. Daher haben wir hier ein AFK-System eingeführt, welches inaktive Spieler vom Server entfernt um Platz für aktive Spieler zu schaffen. Mehr Slots sind leider nicht möglich, aufgrund der Art und Weise, wie Minecraft auf einen einzigen Haupt-Thread ausgelegt ist. Das heißt wir können nicht beliebig in neue Hardware investieren und damit mehr Slots schaffen, irgendwann ist technisch einfach Schluss. Die einzige Alternative ist weniger Spieler online zu haben. Einfach Spieler ohne Rang zu kicken, um Spielern mit Rang Platz zu schaffen ist unfair, daher sehen wir dies nicht ein. Demzufolge werden Accounts, welche als AFK erkannt werden, von unseren Servern geworfen. Das System unterscheidet nicht nach Rang oder AFK-Dauer, sondern nur nach diversen Parametern, welche Spielaktivität anzeigen. Welche als AFK erkannten Spieler vom Server getrennt werden, wird dann zufällig ermittelt. Das Plugin wählt hierbei vollkommen zufällig aus. Das System nutzt verschiedene Indikatoren, um zu ermitteln, ob ein Account aktiv spielt oder abwesend ist. Aus Sicherheitsgründen werden wir die genauen Indikatoren nicht veröffentlichen. Wir verfeinern die Indikatoren stetig, um sicherzustellen, dass die Erkennung von Aktivität optimiert wird, daher kann es jedoch passieren, dass auch du als AFK erkannt wirst, obwohl du es gar nicht bist.
Nun hast du ein vollumfängliches Verständnis, wie ein Server eigentlich arbeitet. Wenn du Fragen oder Feedback zu hast, wende dich im Discord Support Bereich gerne an das Team.
Zuletzt aktualisiert