Βελτιστοποίηση διακομιστή Minecraft

Βελτιστοποίηση διακομιστή Minecraft
Στο blog μας έχουμε ήδη είπα, πώς να δημιουργήσετε τον δικό σας διακομιστή Minecraft, αλλά έχουν περάσει 5 χρόνια από τότε και πολλά έχουν αλλάξει. Μοιραζόμαστε μαζί σας τρέχοντες τρόπους για να δημιουργήσετε και να βελτιστοποιήσετε το τμήμα διακομιστή ενός τόσο δημοφιλούς παιχνιδιού.

Κατά τη διάρκεια της 9χρονης ιστορίας του (μετρώντας από την ημερομηνία κυκλοφορίας), το Minecraft έχει κερδίσει έναν εκπληκτικό αριθμό θαυμαστών και μισητών τόσο από απλούς παίκτες όσο και από geeks. Η απλή ιδέα ενός κόσμου φτιαγμένου από μπλοκ έχει εξελιχθεί από μια απλή μορφή ψυχαγωγίας σε ένα παγκόσμιο μέσο επικοινωνίας και δημιουργίας διαφόρων αντικειμένων από τον πραγματικό κόσμο.

Εκτός από την κατασκευή, το παιχνίδι έχει τη δυνατότητα δημιουργίας λογική, που σας επιτρέπουν να εφαρμόσετε πλήρεις αλγόριθμους μέσα στο Minecraft. Το YouTube είναι γεμάτο με πολύ εντυπωσιακά βίντεο όπου οι άνθρωποι, έχοντας καταβάλει τεράστια προσπάθεια και ξοδεύοντας πολύ χρόνο, έχουν δημιουργήσει ένα αντίγραφο αυτής ή της άλλης ηλεκτρονικής συσκευής ή έχουν δημιουργήσει ένα λεπτομερές αντίγραφο υπάρχον и μυθιστορηματικός αρχιτεκτονικές κατασκευές. Όλα περιορίζονται μόνο από τη φαντασία του παίκτη και τις δυνατότητες του κόσμου του παιχνιδιού.


Αλλά ας μην μιλήσουμε περαιτέρω για το τι ακριβώς δημιουργούν οι παίκτες, αλλά ας δούμε το τμήμα διακομιστή της εφαρμογής και ας επισημάνουμε τα προβλήματα (μερικές φορές πολύ περίπλοκα) που μπορεί να προκύψουν κατά τη λειτουργία υπό φορτίο. Ας κάνουμε μια κράτηση αμέσως ότι θα μιλήσουμε μόνο για την έκδοση Java.

Τύποι διακομιστών

Η απλούστερη επιλογή είναι ένας διακομιστής ενσωματωμένος στον πελάτη του παιχνιδιού. Δημιουργήσαμε έναν κόσμο, πατήσαμε ένα κουμπί και ο διακομιστής έγινε προσβάσιμος μέσω του τοπικού δικτύου. Αυτή η επιλογή δεν μπορεί να αντέξει κανένα σοβαρό φορτίο και επομένως δεν θα το εξετάσουμε καν.

Βανίλια

Η Mojang Studios διανέμει το τμήμα διακομιστή του παιχνιδιού ως εφαρμογή Java δωρεάν στην επίσημη ιστοσελίδα. Αυτό σας επιτρέπει να δημιουργήσετε το δικό σας αποκλειστικό διακομιστή και τον προσωπικό κόσμο, καθιστώντας το προσβάσιμο για σύνδεση από οπουδήποτε στον πλανήτη. Για όσους το κάνουν αυτό για πρώτη φορά, υπάρχει ένα υπέροχο φροντιστήριο, διαθέσιμο στο αντίστοιχο gaming Wiki.

Αυτή η προσέγγιση έχει ένα σοβαρό μειονέκτημα, δηλαδή την έλλειψη δυνατοτήτων σύνδεσης προσθηκών που επεκτείνουν τη λειτουργικότητα του διακομιστή και επιτρέπουν όχι μόνο την αυτοματοποίηση πολλών διαδικασιών, αλλά και τη βελτιστοποίηση της απόδοσης. Επιπλέον, ο επίσημος διακομιστής έχει αρκετά μεγάλη κατανάλωση RAM για κάθε συνδεδεμένο παίκτη.

bukkit

Μια εφαρμογή διακομιστή που δημιουργήθηκε από λάτρεις με βάση την έκδοση Vanilla bukkit επέκτεινε σημαντικά τις δυνατότητες του παιχνιδιού υποστηρίζοντας plugins και mods (τροποποιήσεις). Επέτρεψε όχι μόνο την προσθήκη νέων μπλοκ στο παιχνίδι, αλλά και την εκτέλεση διαφόρων χειρισμών που ήταν απρόσιτοι στο λογισμικό βανίλια. Είναι ενδιαφέρον ότι αυτή η εφαρμογή απαιτούσε σημαντικά λιγότερη μνήμη.

Η εγκατάσταση του Bukkit δεν είναι δύσκολη· οι αντίστοιχες οδηγίες βρίσκονται στον πόρο GamePedia. Αλλά αυτό δεν έχει νόημα, καθώς από το 2014 η ομάδα Bukkit διαλύθηκε, οι προγραμματιστές του έργου έγιναν υπάλληλοι των Mojang Studios και αποθήκη εγκαταλειμμένος. Έτσι, ο Bukkit είναι ουσιαστικά νεκρός και είναι λογικό να δώσουμε προσοχή στα επόμενα δύο έργα.

SpigotMC

Για να διευκολυνθεί η ζωή για τους προγραμματιστές προσθηκών, χρειαζόταν ένα API για αλληλεπίδραση με τον κόσμο του παιχνιδιού. Αυτό ακριβώς είναι το πρόβλημα που έλυσαν οι δημιουργοί. Τάπα, λαμβάνοντας τον πυρήνα του Bukkit και επεξεργάζοντάς τον ξανά για να επιτύχετε καλύτερη αξιοπιστία και απόδοση. Παρ 'όλα αυτά, Αποθετήριο Git το έργο μπλοκαρίστηκε λόγω του Νόμου για τα δικαιώματα πνευματικής ιδιοκτησίας στην ψηφιακή εποχή (DMCA), και είναι αδύνατο να κατεβάσετε τον πηγαίο κώδικα από εκεί.

Επί του παρόντος, το SpigotMC αναπτύσσεται και χρησιμοποιείται ενεργά. Υποστηρίζει όλα τα πρόσθετα που δημιουργήθηκαν για το Bukkit, αλλά δεν είναι συμβατό με αυτό. Για να ξεπεράσετε το DMCA Takedown, εφευρέθηκε μια κομψή μέθοδος που ονομάζεται BuildTools. Αυτό το εργαλείο εξαλείφει την ανάγκη διανομής μιας μεταγλωττισμένης εφαρμογής και επιτρέπει στους χρήστες να μεταγλωττίσουν τα Spigot, CraftBukkit και Bukkit από τον πηγαίο κώδικα. Όλα αυτά καθιστούν την απαγόρευση του DMCA άχρηστη.

PaperMC

Όλα φαίνονταν ωραία και το Spigot έγινε μια εξαιρετική επιλογή. Αλλά αυτό δεν ήταν αρκετό για ορισμένους ενθουσιώδεις και δημιούργησαν το δικό τους πιρούνι Spigot «σε στεροειδή». Επί σελίδα του έργου το βασικό πλεονέκτημα είναι ότι «Είναι ηλίθιο γρήγορο». Αναπτηγμένος κοινότητα σας επιτρέπει να επιλύετε γρήγορα αναδυόμενα προβλήματα και το εκτεταμένο API σάς επιτρέπει να δημιουργείτε ενδιαφέρουσες προσθήκες. Μπορείτε να εκκινήσετε το PaperMC με μία απλή εντολή τεκμηρίωση.

Το PaperMC έχει εξαιρετική συμβατότητα, επομένως τα πρόσθετα που έχουν γραφτεί για το SpigotMC μπορούν εύκολα να λειτουργήσουν στο PaperMC, αλλά χωρίς επίσημη υποστήριξη. Υπάρχει επίσης συμβατότητα προς τα πίσω με το SpigotMC. Τώρα που παραθέσαμε τις διάφορες επιλογές για τη δημιουργία διακομιστή, ας προχωρήσουμε στα ζητήματα απόδοσης που μπορεί να προκύψουν.

Προβλήματα και λύσεις

Το κύριο πράγμα που πρέπει να καταλάβετε είναι ότι όλα όσα σχετίζονται με την επεξεργασία του κόσμου του παιχνιδιού θα υποβάλλονται σε επεξεργασία μόνο σε έναν υπολογιστικό πυρήνα του φυσικού διακομιστή. Έτσι, αν ξαφνικά έχετε έναν εξαιρετικό διακομιστή με μια ντουζίνα υπολογιστικούς πυρήνες, τότε μόνο ένας θα φορτωθεί. Όλοι οι άλλοι θα είναι σχεδόν αδρανείς. Αυτή είναι η αρχιτεκτονική της εφαρμογής και δεν μπορείτε να κάνετε τίποτα γι 'αυτό. Επομένως, όταν επιλέγετε έναν διακομιστή, θα πρέπει να δίνετε προσοχή όχι στον αριθμό των πυρήνων, αλλά στη συχνότητα του ρολογιού. Όσο υψηλότερο είναι, τόσο καλύτερη θα είναι η απόδοση.

Όσον αφορά το θέμα της χωρητικότητας RAM, θα πρέπει να προχωρήσουμε από τους παρακάτω δείκτες:

  • προγραμματισμένος αριθμός παικτών·
  • προγραμματισμένος αριθμός κόσμων στον διακομιστή.
  • το μέγεθος του κάθε κόσμου.

Θα πρέπει να θυμόμαστε ότι μια εφαρμογή Java χρειάζεται πάντα ένα απόθεμα μνήμης RAM. Αν περιμένετε κατανάλωση μνήμης 8 gigabyte, τότε στην πραγματικότητα πρέπει να έχετε 12. Τα νούμερα είναι σχετικά, αλλά η ουσία δεν αλλάζει.

Για να ξεκινήσετε το τμήμα διακομιστή, συνιστούμε να χρησιμοποιήσετε τις σημαίες που καθορίζονται στο άρθρο Συντονισμός του JVM – G1GC Garbage Collector Flags για το Minecraft. Αυτή η «μαύρη μαγεία» επιτρέπει στον διακομιστή να διαμορφώσει σωστά τον «συλλέκτη απορριμμάτων» και να βελτιστοποιήσει τη χρήση της μνήμης RAM. Δεν πρέπει να εκχωρείτε περισσότερη μνήμη από αυτή που καταναλώνει ο διακομιστής κατά τη διάρκεια της αιχμής εισροής παικτών.

Δημιουργία χάρτη μπλοκ

«Πιστεύεις αλήθεια ότι το φεγγάρι υπάρχει μόνο όταν το κοιτάς;» (Albert Einstein)

Εντελώς νέος διακομιστής. Μόλις ο παίκτης συνδεθεί με επιτυχία για πρώτη φορά, ο χαρακτήρας του παιχνιδιού εμφανίζεται στο γενικό σημείο συγκέντρωσης (spawn). Αυτό είναι το μόνο μέρος όπου ο κόσμος του παιχνιδιού έχει προδημιουργηθεί από τον διακομιστή. Την ίδια στιγμή, το τμήμα πελάτη κοιτάζει τις ρυθμίσεις και η βασική παράμετρος είναι η απόσταση σχεδίασης. Μετράται σε κομμάτια (η περιοχή του χάρτη είναι 16×16 και 256 μπλοκ ύψος).

Ο διακομιστής αποθηκεύει έναν παγκόσμιο χάρτη του κόσμου και εάν δεν υπάρχουν ακόμη δημιουργημένα μπλοκ σε αυτόν στο σημείο εμφάνισης του χαρακτήρα του παιχνιδιού, τότε ο διακομιστής τα δημιουργεί δυναμικά και τα αποθηκεύει. Αυτό όχι μόνο απαιτεί μεγάλους υπολογιστικούς πόρους, αλλά αυξάνει επίσης συνεχώς το μέγεθος του παγκόσμιου χάρτη. Σε έναν από τους παλαιότερους αναρχικούς διακομιστές 2b2t (2builders2tools) Το μέγεθος του χάρτη έχει ήδη ξεπεράσει τα 8 Tb και τα σύνορα του κόσμου είναι περίπου 30 εκατομμύρια μπλοκ. Υπάρχουν χιλιάδες ιστορίες που σχετίζονται με αυτόν τον διακομιστή και αξίζει το δικό του άρθρο στη σειρά.

Η δημιουργία ενός κόσμου γύρω από έναν παίκτη δεν είναι πρόβλημα. Η δημιουργία ενός κόσμου γύρω από εκατοντάδες παίκτες θα προκαλέσει μικρές επιβραδύνσεις του διακομιστή για σύντομο χρονικό διάστημα, μετά το οποίο το φόρτο θα μειωθεί. Η δημιουργία ενός κόσμου σε απόσταση απόδοσης πελάτη περίπου χιλίων παικτών είναι ήδη ικανή να "πέσει" τον διακομιστή και να πετάξει όλους τους πελάτες εκτός αυτού λόγω χρονικού ορίου.

Στο λογισμικό διακομιστή υπάρχει μια τιμή όπως TPS (Ticks per Server - ticks per second). Κανονικά, 1 κύκλος ρολογιού ισούται με 50 ms. (1 δευτερόλεπτο του πραγματικού κόσμου ισούται με 20 τικ του κόσμου του παιχνιδιού). Εάν η επεξεργασία ενός τικ αυξηθεί στα 60 δευτερόλεπτα, η εφαρμογή διακομιστή θα κλείσει, αποβάλλοντας όλους τους παίκτες.

Η λύση είναι να περιοριστεί ο κόσμος σε ορισμένες συντεταγμένες και να πραγματοποιηθεί προκαταρκτική δημιουργία μπλοκ. Έτσι, αφαιρούμε την ανάγκη για δυναμική δημιουργία κατά τη διάρκεια του παιχνιδιού και ο διακομιστής θα χρειαστεί μόνο να διαβάσει έναν υπάρχοντα χάρτη. Και τα δύο προβλήματα μπορούν να λυθούν με ένα μόνο πρόσθετο World Border.

Ο ευκολότερος τρόπος είναι να ορίσετε το όριο του κόσμου με τη μορφή ενός κύκλου σε σχέση με το σημείο αναπαραγωγής (αν και μπορείτε να το κάνετε με οποιοδήποτε σχήμα) με μία εντολή:

/wb set <радиус в блоках> spawn

Εάν ο χαρακτήρας του παίκτη προσπαθήσει να περάσει τα σύνορα, θα απωθηθεί αρκετά μπλοκ. Εάν αυτό γίνει πολλές φορές μέσα σε περιορισμένο χρονικό διάστημα, ο δράστης θα τηλεμεταφερθεί αναγκαστικά στο σημείο αναπαραγωγής. Η προπαραγωγή του κόσμου γίνεται ακόμα πιο απλά, με την εντολή:

/wb fill

Εφόσον αυτή η ενέργεια θα μπορούσε ενδεχομένως να επηρεάσει τους παίκτες στον διακομιστή, φροντίστε να επιβεβαιώσετε:

/wb confirm

Συνολικά, χρειάστηκαν περίπου 5000 ώρες για να δημιουργηθεί ένας κόσμος με ακτίνα 40 μπλοκ (~2 δισεκατομμύρια μπλοκ) σε έναν επεξεργαστή Intel® Xeon® Gold 6240. Επομένως, εάν θέλετε να δημιουργήσετε εκ των προτέρων έναν μεγαλύτερο χάρτη, να γνωρίζετε ότι αυτή η διαδικασία θα πάρει έναν αξιοπρεπή χρόνο και το TPS του διακομιστή θα μειωθεί σοβαρά. Επίσης, να θυμάστε ότι ακόμη και μια ακτίνα 5000 μπλοκ θα απαιτήσει περίπου 2 GB χώρου στο δίσκο.

Παρά το γεγονός ότι η τελευταία έκδοση του πρόσθετου αναπτύχθηκε για την έκδοση 1.14 του Minecraft, διαπιστώθηκε πειραματικά ότι λειτουργεί εξαιρετικά σε επόμενες εκδόσεις. Διατίθεται πλήρης λίστα εντολών με επεξηγήσεις στο φόρουμ των προσθηκών.

Προβληματικά μπλοκ

Υπάρχει μεγάλη ποικιλία μπλοκ στο Minecraft. Ωστόσο, θα θέλαμε να επιστήσουμε την προσοχή των αναγνωστών σε ένα τέτοιο μπλοκ όπως TNT. Όπως υποδηλώνει το όνομα, αυτό το μπλοκ είναι ένα εκρηκτικό (σημείωση του συντάκτη - αυτό είναι ένα παιχνίδι του εικονικού κόσμου και αυτό το στοιχείο δεν έχει τίποτα με πραγματικά εκρηκτικά). Η ιδιαιτερότητά του είναι τέτοια που τη στιγμή της ενεργοποίησης αρχίζει να δρα πάνω του η δύναμη της βαρύτητας. Αυτό αναγκάζει τον διακομιστή να υπολογίσει όλες τις συντεταγμένες εάν αυτή τη στιγμή το μπλοκ αρχίσει να πέφτει.

Εάν υπάρχουν πολλά μπλοκ TNT, τότε η έκρηξη ενός μπλοκ προκαλεί έκρηξη και την ενεργοποίηση της βαρύτητας σε γειτονικά μπλοκ, διασκορπίζοντάς τα προς όλες τις κατευθύνσεις. Όλη αυτή η όμορφη μηχανική στην πλευρά του διακομιστή μοιάζει με πολλές λειτουργίες για τον υπολογισμό της τροχιάς κάθε μπλοκ, καθώς και με αλληλεπίδραση με γειτονικά μπλοκ. Η εργασία είναι εξαιρετικά έντασης πόρων, την οποία ο καθένας μπορεί εύκολα να ελέγξει. Δημιουργήστε και πυροδοτήστε έναν κύβο από μπλοκ TNT μεγέθους τουλάχιστον 30x30x30. Και αν νομίζατε ότι είχατε έναν καλό, ισχυρό υπολογιστή παιχνιδιών, κάνατε πολύ λάθος 😉

/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt

Βελτιστοποίηση διακομιστή Minecraft
Ένα παρόμοιο «πείραμα» σε διακομιστή με Intel® Xeon® Gold 6240 οδήγησε σε σοβαρή πτώση του TPS και 80% φορτίο CPU κατά τη διάρκεια ολόκληρου του χρόνου έκρηξης του μπλοκ. Επομένως, εάν κάποιος παίκτης μπορεί να το κάνει αυτό, τότε το πρόβλημα απόδοσης θα επηρεάσει όλους τους παίκτες στον διακομιστή.

Μια ακόμη πιο σκληρή επιλογή - Κρύσταλλοι άκρων. Εάν παρόλα αυτά το TNT εκραγεί διαδοχικά, τότε τα Edge Crystals εκρήγνυνται ταυτόχρονα, κάτι που θεωρητικά μπορεί να σταματήσει εντελώς τη λειτουργία της εφαρμογής διακομιστή.

Αυτό το σενάριο μπορεί να αποφευχθεί μόνο με την πλήρη απαγόρευση της χρήσης αυτών των μπλοκ στον κόσμο του παιχνιδιού. Για παράδειγμα, χρησιμοποιώντας το πρόσθετο Παγκόσμια Φρουρά. Λάβετε υπόψη ότι αυτό το πρόσθετο από μόνο του δεν λειτουργεί χωρίς άλλο πρόσθετο WorldEdit. Εγκαταστήστε λοιπόν πρώτα το WorldEdit και μετά το WorldGuard.

Συμπέρασμα

Η σωστή διαχείριση ενός διακομιστή παιχνιδιών δεν είναι εύκολη υπόθεση. Δυσκολίες και μειωμένη απόδοση θα σας περιμένουν σε κάθε στροφή, ειδικά αν δεν λάβετε υπόψη τους ίδιους τους μηχανισμούς του παιχνιδιού. Είναι αδύνατο να προβλέψουμε τα πάντα, επειδή οι παίκτες μπορεί μερικές φορές να είναι πολύ δημιουργικοί προσπαθώντας να αναγκάσουν τον διακομιστή να κάνει κάτι για το οποίο δεν προοριζόταν. Μόνο μια λογική ισορροπία μεταξύ κινδύνων και καθορισμένων περιορισμών θα επιτρέψει στον διακομιστή να λειτουργεί συνεχώς και να μην μειώνει την απόδοσή του σε κρίσιμες τιμές.

Κατά τη διάρκεια της καραντίνας, μερικοί από τους υπαλλήλους μας έχασαν τα αγαπημένα τους γραφεία και αποφάσισαν να τα ξαναδημιουργήσουν μέσα στο Minecraft. Έχετε επίσης την ευκαιρία να μας επισκεφτείτε χωρίς να διακινδυνεύσετε την υγεία σας ή να χάσετε χρόνο στο δρόμο.

Για να γίνει αυτό, προσκαλούμε όλους στον διακομιστή μας minecraft.selectel.ru (έκδοση πελάτη 1.15.2), όπου αναδημιουργήθηκαν τα κέντρα δεδομένων Tsvetochnaya-1 και Tsvetochnaya-2. Μην ξεχάσετε να συμφωνήσετε να κάνετε λήψη πρόσθετων πόρων, είναι απαραίτητοι για τη σωστή εμφάνιση ορισμένων τοποθεσιών.

Αποστολές, κωδικοί προσφοράς, πασχαλινά αυγά και ευχάριστη επικοινωνία σας περιμένουν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο