Sur notre blog, nous avons déjà
Au cours de ses 9 années d'histoire (à compter de la date de sortie), Minecraft a gagné un nombre incroyable de fans et de haineux parmi les joueurs ordinaires et les geeks. Le concept simple d'un monde composé de blocs a évolué d'une simple forme de divertissement à un moyen universel de communication et de création de divers objets du monde réel.
En plus de la construction, le jeu a la capacité de créer
Mais ne parlons pas plus de ce que créent exactement les joueurs, mais regardons la partie serveur de l'application et soulignons les problèmes (parfois très complexes) qui peuvent survenir lors du fonctionnement sous charge. Réservons tout de suite que nous ne parlerons que de l'édition Java.
Types de serveurs
L'option la plus simple est un serveur intégré au client du jeu. Nous avons créé un monde, appuyé sur un bouton et le serveur est devenu accessible sur le réseau local. Cette option ne peut supporter aucune charge importante et nous ne l'envisagerons donc même pas.
Vanille
Mojang Studios distribue gratuitement la partie serveur du jeu sous forme d'application Java.
Cette approche présente un inconvénient majeur, à savoir le manque de fonctionnalités prêtes à l'emploi pour connecter des plugins qui étendent les fonctionnalités du serveur et permettent non seulement d'automatiser de nombreux processus, mais également d'optimiser les performances. De plus, le serveur officiel a une consommation de RAM assez importante pour chaque joueur connecté.
bukkit
Une application serveur créée par des passionnés basée sur la version Vanilla
L'installation de Bukkit n'est pas difficile, les instructions correspondantes sont sur la ressource
RobinetMC
Pour faciliter la vie des développeurs de plugins, il était nécessaire de disposer d'une API pour interagir avec le monde du jeu. C'est exactement le problème que les créateurs ont résolu.
Actuellement, SpigotMC est activement développé et utilisé. Il prend en charge tous les plugins créés pour Bukkit, mais n'est pas rétrocompatible avec celui-ci. Pour contourner le DMCA Takedown, une méthode élégante appelée BuildTools a été inventée. Cet outil élimine le besoin de distribuer une application compilée et permet aux utilisateurs de compiler Spigot, CraftBukkit et Bukkit à partir du code source. Tout cela rend l’interdiction DMCA inutile.
PapierMC
Tout semblait cool et Spigot est devenu une excellente option. Mais cela n’a pas suffi à certains passionnés, et ils ont créé leur propre fourchette de Spigot « sous stéroïdes ». Sur
PaperMC a une excellente compatibilité, donc les plugins écrits pour SpigotMC peuvent facilement fonctionner sur PaperMC, mais sans support officiel. La rétrocompatibilité avec SpigotMC est également présente. Maintenant que nous avons listé les différentes options pour créer un serveur, passons aux problèmes de performances qui peuvent survenir.
Problèmes et solutions
La principale chose que vous devez comprendre est que tout ce qui concerne le traitement du monde du jeu ne sera traité que sur un seul cœur de calcul du serveur physique. Donc si du coup vous disposez d'un excellent serveur avec une douzaine de cœurs de calcul, alors un seul sera chargé. Tous les autres seront pratiquement inactifs. Il s’agit de l’architecture de l’application et vous ne pouvez rien y faire. Ainsi, lors du choix d'un serveur, vous devez faire attention non pas au nombre de cœurs, mais à la fréquence d'horloge. Plus il est élevé, meilleures seront les performances.
Concernant la question de la capacité de la RAM, il faut partir des indicateurs suivants :
- nombre de joueurs prévu ;
- nombre prévu de mondes sur le serveur ;
- la taille de chaque monde.
Il ne faut pas oublier qu'une application Java a toujours besoin d'une réserve de RAM. Si vous prévoyez une consommation de mémoire de 8 gigaoctets, il vous en faut en réalité 12. Les chiffres sont relatifs, mais l'essence ne change pas.
Pour démarrer la partie serveur, nous vous recommandons d'utiliser les drapeaux spécifiés dans l'article
Générer une carte de blocs
"Pensez-vous vraiment que la lune n'existe que lorsque vous la regardez ?" (Albert Einstein)
Serveur complètement nouveau. Dès que le joueur se connecte avec succès pour la première fois, le personnage du jeu apparaît au point de rassemblement général (spawn). C'est le seul endroit où le monde du jeu est pré-généré par le serveur. Au même moment, la partie client regarde les réglages, et le paramètre clé est la distance de dessin. Il est mesuré en morceaux (la zone de la carte mesure 16 × 16 et 256 blocs de haut). Le nombre de morceaux indiqués correspond exactement au nombre qui sera demandé au serveur.
Le serveur stocke une carte globale du monde, et s'il n'y a pas encore de blocs générés au moment de l'apparition du personnage du jeu, alors le serveur les génère et les stocke dynamiquement. Non seulement cela nécessite d’importantes ressources informatiques, mais cela augmente également constamment la taille de la carte du monde. Sur l'un des plus anciens serveurs anarchistes
Générer un monde autour d'un seul joueur n'est pas un problème. Générer un monde autour de centaines de joueurs entraînera des ralentissements mineurs du serveur pendant une courte période, après quoi la charge diminuera. Générer un monde à une distance de rendu client d'environ un millier de joueurs est déjà capable de « laisser tomber » le serveur et d'en expulser tous les clients en raison d'un délai d'attente.
Dans le logiciel serveur, il existe une valeur telle que TPS (Ticks par serveur - ticks par seconde). Normalement, 1 cycle d'horloge équivaut à 50 ms. (1 seconde du monde réel équivaut à 20 ticks du monde du jeu). Si le traitement d'un tick passe à 60 secondes, l'application serveur sera fermée, expulsant tous les joueurs.
La solution consiste à limiter le monde à certaines coordonnées et à effectuer une génération préliminaire de blocs. Ainsi, nous supprimons le besoin de génération dynamique pendant le jeu, et le serveur n'aura besoin que de lire une carte existante. Les deux problèmes peuvent être résolus avec un seul plugin
Le moyen le plus simple est de définir la limite du monde sous la forme d'un cercle par rapport au point d'apparition (bien que vous puissiez lui donner n'importe quelle forme) avec une seule commande :
/wb set <радиус в блоках> spawn
Si le personnage du joueur tente de traverser la frontière, il sera repoussé de plusieurs blocs. Si cela est répété plusieurs fois dans un temps limité, le contrevenant sera téléporté de force au point d'apparition. La pré-génération du monde se fait encore plus simplement, avec la commande :
/wb fill
Puisque cette action pourrait potentiellement affecter les joueurs sur le serveur, assurez-vous de confirmer :
/wb confirm
Au total, il a fallu environ 5000 heures pour générer un monde avec un rayon de 40 2 blocs (~ 6240 milliards de blocs) sur un processeur Intel® Xeon® Gold 5000. Par conséquent, si vous souhaitez pré-générer une carte plus grande, sachez que ce processus prendra un temps décent et le TPS du serveur sera considérablement réduit. N'oubliez pas non plus que même un rayon de 2 XNUMX blocs nécessitera environ XNUMX Go d'espace disque.
Malgré le fait que la dernière version du plugin ait été développée pour Minecraft version 1.14, il a été constaté expérimentalement qu'il fonctionne très bien sur les versions ultérieures. Une liste complète des commandes avec explications est disponible
Blocs problématiques
Il existe une grande variété de blocs dans Minecraft. Cependant, nous souhaitons attirer l'attention des lecteurs sur un bloc tel que TNT. Comme son nom l'indique, ce bloc est un explosif (note de l'éditeur - il s'agit d'un élément de jeu du monde virtuel et cet objet n'a rien avec de vrais explosifs). Sa particularité est telle qu'au moment de l'activation, la force de gravité commence à agir sur lui. Cela oblige le serveur à calculer toutes les coordonnées si à ce moment le bloc commence à tomber.
S'il y a plusieurs blocs de TNT, alors la détonation d'un bloc provoque la détonation et l'activation de la gravité dans les blocs voisins, les dispersant dans toutes les directions. Toute cette belle mécanique côté serveur ressemble à un grand nombre d'opérations pour calculer la trajectoire de chaque bloc, ainsi que l'interaction avec les blocs voisins. La tâche est extrêmement gourmande en ressources, ce que tout le monde peut facilement vérifier. Générez et faites exploser un cube à partir de blocs TNT d'une taille d'au moins 30x30x30. Et si vous pensiez avoir un bon ordinateur de jeu puissant, vous vous trompiez lourdement 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt
Une « expérience » similaire sur un serveur équipé d'Intel® Xeon® Gold 6240 a entraîné une baisse importante du TPS et une charge CPU de 80 % pendant toute la durée de détonation du bloc. Par conséquent, si un joueur est capable de le faire, le problème de performances affectera tous les joueurs du serveur.
Une option encore plus difficile - Cristaux de bord. Si TNT explose néanmoins de manière séquentielle, alors les Edge Crystals explosent tous en même temps, ce qui peut en théorie arrêter complètement le fonctionnement de l'application serveur.
Ce scénario ne peut être évité qu’en interdisant totalement l’utilisation de ces blocs dans le monde du jeu. Par exemple, en utilisant le plugin
Conclusion
Gérer correctement un serveur de jeux n’est pas une tâche facile. Des difficultés et des performances réduites vous attendront à chaque tour, surtout si vous ne tenez pas compte des mécanismes de jeu eux-mêmes. Il est impossible de tout prévoir, car les joueurs peuvent parfois être très créatifs en essayant de forcer le serveur à faire quelque chose pour lequel il n'est pas prévu. Seul un équilibre raisonnable entre les risques et les restrictions établies permettra au serveur de fonctionner en continu et de ne pas réduire ses performances à des valeurs critiques.
Pendant la quarantaine, certains de nos employés ont raté leurs bureaux préférés et ont décidé de les recréer dans Minecraft. Vous avez également la chance de venir nous rendre visite sans risquer votre santé ni perdre de temps sur la route.
Pour ce faire, nous invitons tout le monde sur notre serveur minecraft.selectel.ru (version client 1.15.2), où les centres de données Tsvetochnaya-1 et Tsvetochnaya-2 ont été recréés. N'oubliez pas d'accepter le téléchargement de ressources supplémentaires, elles sont nécessaires au bon affichage de certains emplacements.
Quêtes, codes promotionnels, œufs de Pâques et communication agréable vous attendent.
Source: habr.com