Ottimizzazione del server Minecraft

Ottimizzazione del server Minecraft
Sul nostro blog lo abbiamo già detto, come creare il proprio server Minecraft, ma da allora sono passati 5 anni e molte cose sono cambiate. Condividiamo con te i modi attuali per creare e ottimizzare la parte server di un gioco così popolare.

Nel corso dei suoi 9 anni di storia (a partire dalla data di uscita), Minecraft ha guadagnato un numero incredibile di fan e odiatori sia tra i giocatori comuni che tra i geek. Il semplice concetto di un mondo fatto di blocchi si è evoluto da una semplice forma di intrattenimento a un mezzo universale per comunicare e creare vari oggetti dal mondo reale.

Oltre alla costruzione, il gioco ha la capacità di creare logica, che ti consentono di implementare algoritmi completi all'interno di Minecraft. YouTube è pieno di video davvero impressionanti in cui le persone, dopo aver investito moltissimo impegno e molto tempo, hanno creato una copia di questo o quel dispositivo elettronico o hanno costruito una copia dettagliata esistente и immaginario strutture architettoniche. Tutto è limitato solo dall’immaginazione del giocatore e dalle possibilità dell’universo di gioco.


Ma non parliamo ulteriormente di cosa creano esattamente i giocatori, ma diamo un'occhiata alla parte server dell'applicazione ed evidenziamo i problemi (a volte molto complessi) che possono sorgere durante il funzionamento sotto carico. Facciamo subito una prenotazione che parleremo solo della Java Edition.

Tipi di server

L'opzione più semplice è un server integrato nel client di gioco. Abbiamo creato un mondo, abbiamo premuto un pulsante e il server è diventato accessibile tramite la rete locale. Questa opzione non può sopportare alcun carico serio e quindi non la prenderemo nemmeno in considerazione.

Vaniglia

Mojang Studios distribuisce gratuitamente la parte server del gioco come applicazione Java sul sito ufficiale. Ciò ti consente di crearne uno tuo server dedicato e mondo personale, rendendolo accessibile alla connessione da qualsiasi parte del pianeta. Per coloro che lo fanno per la prima volta, c'è un fantastico tutorial, disponibile sulla Wiki di gioco corrispondente.

Questo approccio presenta un grave inconveniente, vale a dire la mancanza di funzionalità pronte all'uso per connettere plug-in che espandono le funzionalità del server e consentono non solo di automatizzare molti processi, ma anche di ottimizzare le prestazioni. Inoltre, il server ufficiale ha un consumo di RAM abbastanza elevato per ogni giocatore connesso.

bukkit

Un'applicazione server creata da appassionati basata sulla versione Vanilla bukkit ampliato in modo significativo le capacità del gioco supportando plug-in e mod (modifiche). Permetteva non solo di aggiungere nuovi blocchi al gameplay, ma anche di eseguire varie manipolazioni inaccessibili al software Vanilla. È interessante notare che questa applicazione richiedeva molta meno memoria.

Installare Bukkit non è difficile, le istruzioni corrispondenti si trovano sulla risorsa GamePedia. Ma questo non ha senso, dal momento che dal 2014 il team Bukkit si è sciolto, gli sviluppatori del progetto sono diventati dipendenti di Mojang Studios, e deposito abbandonato. Pertanto, Bukkit è effettivamente morto e ha senso prestare attenzione ai prossimi due progetti.

SpigotMC

Per rendere la vita più semplice agli sviluppatori di plugin, era necessaria un'API per interagire con il mondo del gioco. Questo è esattamente il problema che i creatori hanno risolto. zipolo, prendendo il core Bukkit e rielaborandolo per ottenere migliore affidabilità e prestazioni. Tuttavia, Deposito Git il progetto è stato bloccato a causa del Digital Millennium Copyright Act (DMCA) ed è impossibile scaricare il codice sorgente da lì.

Attualmente, SpigotMC è sviluppato e utilizzato attivamente. Supporta tutti i plugin creati per Bukkit, ma non è retrocompatibile con esso. Per aggirare il DMCA Takedown, è stato inventato un metodo elegante chiamato BuildTools. Questo strumento elimina la necessità di distribuire un'applicazione compilata e consente agli utenti di compilare Spigot, CraftBukkit e Bukkit dal codice sorgente. Tutto ciò rende inutile il divieto del DMCA.

PaperMC

Tutto sembrava interessante e Spigot è diventata un'ottima opzione. Ma ad alcuni appassionati questo non è bastato e hanno creato il proprio fork di Spigot “con steroidi”. SU pagina del progetto il vantaggio principale è che "è stupidamente veloce". Sviluppato Comunità ti consente di risolvere rapidamente i problemi emergenti e l'API estesa ti consente di creare plugin interessanti. Puoi avviare PaperMC con un semplice comando, fornito in documentazione.

PaperMC ha un'eccellente compatibilità, quindi i plugin scritti per SpigotMC possono funzionare facilmente su PaperMC, ma senza supporto ufficiale. È presente anche la retrocompatibilità con SpigotMC. Ora che abbiamo elencato le varie opzioni per creare un server, passiamo ai problemi di prestazioni che potrebbero sorgere.

Problemi e soluzioni

La cosa principale che devi capire è che tutto ciò che riguarda l'elaborazione del mondo di gioco verrà elaborato solo su un core di calcolo del server fisico. Quindi, se all'improvviso hai un server eccellente con una dozzina di core di calcolo, ne verrà caricato solo uno. Tutti gli altri saranno praticamente inattivi. Questa è l'architettura dell'applicazione e non puoi fare nulla al riguardo. Pertanto, quando si sceglie un server, è necessario prestare attenzione non al numero di core, ma alla frequenza dell'orologio. Più è alto, migliori saranno le prestazioni.

Per quanto riguarda la questione della capacità della RAM, dovremmo procedere dai seguenti indicatori:

  • numero previsto di giocatori;
  • numero pianificato di mondi sul server;
  • la dimensione di ciascun mondo.

Va ricordato che un'applicazione Java necessita sempre di una riserva di RAM. Se ti aspetti un consumo di memoria di 8 gigabyte, in realtà devi averne 12. I numeri sono relativi, ma l'essenza non cambia.

Per avviare la parte server si consiglia di utilizzare i flag specificati nell'articolo Ottimizzazione dei flag JVM – G1GC Garbage Collector per Minecraft. Questa “magia nera” consente al server di configurare correttamente il “garbage collector” e ottimizzare l’utilizzo della RAM. Non dovresti allocare più memoria di quella effettivamente consumata dal server durante il picco di afflusso di giocatori.

Generazione di una mappa di blocchi

"Pensi davvero che la luna esista solo quando la guardi?" (Albert Einstein)

Server completamente nuovo. Non appena il giocatore si connette con successo per la prima volta, il personaggio del gioco appare nel punto di ritrovo generale (spawn). Questo è l'unico posto in cui il mondo di gioco è pregenerato dal server. Nello stesso momento, la parte client esamina le impostazioni e il parametro chiave è la distanza di disegno. Viene misurato in blocchi (l'area della mappa è 16×16 e alta 256 blocchi).Quanti blocchi sono indicati lì indica esattamente quanti ne verranno richiesti al server.

Il server memorizza una mappa globale del mondo e, se non sono ancora presenti blocchi generati al momento dell'apparizione del personaggio del gioco, il server li genera dinamicamente e li memorizza. Ciò non solo richiede grandi risorse di calcolo, ma aumenta anche costantemente le dimensioni della mappa del mondo. Su uno dei server anarchici più antichi 2b2t (2builders2tools) La dimensione della mappa ha già superato gli 8 Tb, e il confine del mondo è a circa 30 milioni di isolati. Ci sono migliaia di storie associate a questo server e merita un articolo a parte nella serie.

Generare un mondo attorno a un giocatore non è un problema. La generazione di un mondo attorno a centinaia di giocatori causerà lievi rallentamenti del server per un breve periodo, dopodiché il carico diminuirà. Generare un mondo a una distanza di rendering del client di circa mille giocatori è già in grado di "lasciare cadere" il server e buttarne fuori tutti i client a causa di un timeout.

Nel software del server è presente un valore come TPS (Tick per server - tick al secondo). Normalmente 1 ciclo di clock equivale a 50 ms. (1 secondo del mondo reale equivale a 20 tick del mondo di gioco). Se l'elaborazione di un tick aumenta a 60 secondi, l'applicazione del server verrà chiusa, espellendo tutti i giocatori.

La soluzione è limitare il mondo a determinate coordinate ed eseguire la generazione preliminare dei blocchi. Pertanto, eliminiamo la necessità di generazione dinamica durante il gioco e il server dovrà solo leggere una mappa esistente. Entrambi i problemi possono essere risolti con un unico plugin WorldBorder.

Il modo più semplice è impostare il confine del mondo sotto forma di cerchio rispetto al punto di spawn (anche se puoi renderlo di qualsiasi forma) con un comando:

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

Se il personaggio del giocatore tenta di attraversare il confine, verrà respinto di diversi blocchi. Se ciò viene fatto più volte entro un tempo limitato, l'autore del reato verrà teletrasportato con la forza al punto di spawn. La pregenerazione del mondo viene eseguita in modo ancora più semplice, con il comando:

/wb fill

Poiché questa azione potrebbe potenzialmente influenzare i giocatori sul server, assicurati di confermare:

/wb confirm

In totale, sono state necessarie circa 5000 ore per generare un mondo con un raggio di 40 blocchi (~2 miliardi di blocchi) su un processore Intel® Xeon® Gold 6240. Pertanto, se desideri pregenerare una mappa più grande, tieni presente che questo processo richiederà una discreta quantità di tempo e il TPS del server sarà notevolmente ridotto. Inoltre, ricorda che anche un raggio di 5000 blocchi richiederà circa 2 GB di spazio su disco.

Nonostante il fatto che l'ultima versione del plugin sia stata sviluppata per Minecraft versione 1.14, è stato sperimentalmente riscontrato che funziona perfettamente sulle versioni successive. È disponibile un elenco completo dei comandi con relative spiegazioni sul forum dei plugin.

Blocchi problematici

Esiste una grande varietà di blocchi in Minecraft. Tuttavia, vorremmo attirare l'attenzione dei lettori su un blocco come TNT. Come suggerisce il nome, questo blocco è esplosivo (nota dell'editore: questo è un oggetto di gioco del mondo virtuale e non ha nulla a che fare con esplosivi reali). La sua particolarità è tale che nel momento dell'attivazione la forza di gravità comincia ad agire su di esso. Ciò costringe il server a calcolare tutte le coordinate se in questo momento il blocco inizia a cadere.

Se sono presenti più blocchi di TNT, la detonazione di un blocco provoca la detonazione e l'attivazione della gravità nei blocchi vicini, disperdendoli in tutte le direzioni. Tutta questa bellissima meccanica sul lato server sembra una serie di operazioni per calcolare la traiettoria di ciascun blocco, nonché l'interazione con i blocchi vicini. Il compito è estremamente dispendioso in termini di risorse, che chiunque può facilmente verificare. Genera e fai esplodere un cubo da blocchi TNT di dimensioni almeno 30x30x30. E se pensavi di avere un computer da gioco buono e potente, ti sbagliavi di grosso 😉

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

Ottimizzazione del server Minecraft
Un "esperimento" simile su un server con Intel® Xeon® Gold 6240 ha portato ad un grave calo del TPS e ad un carico della CPU dell'80% durante l'intero tempo di detonazione del blocco. Pertanto, se un giocatore è in grado di farlo, il problema di prestazioni interesserà tutti i giocatori sul server.

Un'opzione ancora più difficile - Cristalli di bordo. Se il TNT esplode comunque in sequenza, gli Edge Crystals esplodono tutti contemporaneamente, il che in teoria può interrompere completamente il funzionamento dell'applicazione server.

Questo scenario può essere evitato solo vietando completamente l'uso di questi blocchi nel mondo di gioco. Ad esempio, utilizzando il plugin Guardia Mondiale. Tieni presente che questo plugin da solo non funziona senza un altro plugin Worldedit. Quindi installa prima WorldEdit e poi WorldGuard.

conclusione

Gestire correttamente un server di gioco non è un compito facile. Difficoltà e prestazioni ridotte ti aspetteranno ad ogni turno, soprattutto se non prendi in considerazione le meccaniche di gioco stesse. È impossibile prevedere tutto, perché a volte i giocatori possono essere molto creativi nel cercare di costringere il server a fare qualcosa per cui non era previsto. Solo un ragionevole equilibrio tra rischi e restrizioni stabilite consentirà al server di funzionare continuamente e di non ridurre le sue prestazioni a valori critici.

Durante la quarantena, ad alcuni dei nostri dipendenti sono mancati i loro uffici preferiti e hanno deciso di ricrearli all'interno di Minecraft. Hai anche la possibilità di venire a trovarci senza rischiare la salute o perdere tempo per strada.

Per fare ciò, invitiamo tutti al nostro server minecraft.selectel.ru (versione client 1.15.2), dove sono stati ricreati i data center Tsvetochnaya-1 e Tsvetochnaya-2. Non dimenticare di accettare di scaricare risorse aggiuntive, necessarie per la corretta visualizzazione di alcune località.

Ti aspettano missioni, codici promozionali, uova di Pasqua e piacevoli comunicazioni.

Fonte: habr.com

Aggiungi un commento