Minecraft-palvelimen optimointi

Minecraft-palvelimen optimointi
Blogissamme olemme jo kertoi, kuinka luoda oma Minecraft-palvelin, mutta siitä on kulunut 5 vuotta ja paljon on muuttunut. Kerromme kanssasi nykyiset tavat luoda ja optimoida niin suositun pelin palvelinosa.

9-vuotisen historiansa aikana (julkaisupäivästä lukien) Minecraft on ansainnut hämmästyttävän määrän faneja ja vihaajia sekä tavallisten pelaajien että nörtien keskuudessa. Yksinkertainen käsite lohkoista koostuvasta maailmasta on kehittynyt yksinkertaisesta viihdemuodosta universaaliksi välineeksi kommunikoida ja luoda erilaisia ​​esineitä todellisesta maailmasta.

Rakentamisen lisäksi pelissä on kyky luoda logiikka, joiden avulla voit toteuttaa täysimittaisia ​​algoritmeja Minecraftissa. YouTube on täynnä erittäin vaikuttavia videoita, joissa ihmiset ovat tehneet valtavasti vaivaa ja viettäneet paljon aikaa, luoneet kopion tästä tai toisesta elektronisesta laitteesta tai rakentaneet yksityiskohtaisen kopion nykyinen и fiktiivinen arkkitehtoniset rakenteet. Kaikkea rajoittaa vain pelaajan mielikuvitus ja peliuniversumin mahdollisuudet.


Mutta älkäämme puhuko enempää siitä, mitä pelaajat tarkalleen luovat, vaan katsotaanpa sovelluksen palvelinosaa ja tuodaan esiin ongelmia (joskus erittäin monimutkaisia), joita voi syntyä kuormituksen aikana. Tehdään heti varaus, että puhumme vain Java-versiosta.

Palvelintyypit

Yksinkertaisin vaihtoehto on peliohjelmistoon sisäänrakennettu palvelin. Loimme maailman, painoimme yhtä nappia, ja palvelin tuli saataville paikallisverkon kautta. Tämä vaihtoehto ei kestä vakavaa kuormaa, joten emme edes harkitse sitä.

Vanilja

Mojang Studios jakaa pelin palvelinosan Java-sovelluksena ilmaiseksi virallisella verkkosivustolla. Näin voit luoda oman oma palvelin ja henkilökohtainen maailma, jolloin se on käytettävissä kaikkialla planeetalla. Niille, jotka tekevät tämän ensimmäistä kertaa, on loistava opetusohjelma, saatavilla vastaavasta peli Wikistä.

Tällä lähestymistavalla on yksi vakava haittapuoli, nimittäin valmiiden valmiuksien puute liittää laajennuksia, jotka laajentavat palvelimen toimintoja ja mahdollistavat monien prosessien automatisoinnin, mutta myös suorituskyvyn optimoinnin. Lisäksi virallisella palvelimella on melko suuri RAM-muistin kulutus jokaista kytkettyä pelaajaa kohden.

bukkit

Harrastajien luoma palvelinsovellus Vanilla-versioon perustuen bukkit laajensi merkittävästi pelin ominaisuuksia tukemalla laajennuksia ja moduuksia (muokkauksia). Sen avulla ei vain voitu lisätä uusia lohkoja peliin, vaan myös suorittaa erilaisia ​​​​manipulaatioita, joihin vaniljaohjelmisto ei voinut päästä käsiksi. Mielenkiintoista on, että tämä sovellus vaati huomattavasti vähemmän muistia.

Bukkitin asentaminen ei ole vaikeaa, vastaavat ohjeet ovat resurssissa GamePedia. Mutta tässä ei ole mitään järkeä, koska vuodesta 2014 lähtien Bukkit-tiimi on hajonnut, projektin kehittäjistä on tullut Mojang Studiosin työntekijöitä ja arkisto hylätty. Siten Bukkit on käytännössä kuollut, ja on järkevää kiinnittää huomiota kahteen seuraavaan projektiin.

SpigotMC

Lisäosien kehittäjien elämän helpottamiseksi tarvittiin API, joka olisi vuorovaikutuksessa pelimaailman kanssa. Tämä on juuri se ongelma, jonka tekijät ratkaisivat. Tappiottamalla Bukkit-ytimen ja muokkaamalla sitä paremman luotettavuuden ja suorituskyvyn saavuttamiseksi. Tästä huolimatta, Git arkisto projekti estettiin Digital Millennium Copyright Act -lain vuoksi (DMCA), ja sieltä on mahdotonta ladata lähdekoodia.

Tällä hetkellä SpigotMC:tä kehitetään ja käytetään aktiivisesti. Se tukee kaikkia Bukkitille luotuja laajennuksia, mutta ei ole taaksepäin yhteensopiva sen kanssa. DMCA Takedownin kiertämiseksi keksittiin tyylikäs menetelmä nimeltä BuildTools. Tämä työkalu poistaa tarpeen levittää käännettyä sovellusta ja antaa käyttäjille mahdollisuuden kääntää Spigot, CraftBukkit ja Bukkit lähdekoodista. Kaikki tämä tekee DMCA-kiellosta hyödyttömän.

PaperMC

Kaikki vaikutti siistiltä, ​​ja Spigotista tuli loistava vaihtoehto. Mutta tämä ei riittänyt joillekin harrastajille, ja he loivat oman Spigot-haarukan "steroideilla". Päällä projektin sivu tärkein etu on, että "Se on typerää nopeasti". Kehitetty Yhteisö avulla voit ratkaista nopeasti uusia ongelmia, ja laajennetun API:n avulla voit luoda mielenkiintoisia laajennuksia. Voit käynnistää PaperMC:n yhdellä yksinkertaisella komennolla dokumentointi.

PaperMC:llä on erinomainen yhteensopivuus, joten SpigotMC:lle kirjoitetut lisäosat voivat toimia helposti PaperMC:ssä, mutta ilman virallista tukea. Myös taaksepäin yhteensopivuus SpigotMC:n kanssa on olemassa. Nyt kun olemme listanneet eri vaihtoehdot palvelimen luomiseen, siirrytään mahdollisiin suorituskykyongelmiin.

Ongelmia ja ratkaisuja

Tärkein asia, joka sinun on ymmärrettävä, on, että kaikki pelimaailman käsittelyyn liittyvä käsitellään vain yhdessä fyysisen palvelimen laskentaytimessä. Joten jos sinulla on yhtäkkiä erinomainen palvelin, jossa on tusina laskentaydintä, vain yksi ladataan. Kaikki muut jäävät käytännössä toimettomana. Tämä on sovelluksen arkkitehtuuri, etkä voi tehdä asialle mitään. Joten valitessasi palvelinta, sinun ei tulisi kiinnittää huomiota ytimien määrään, vaan kellotaajuuteen. Mitä korkeampi se on, sitä parempi suorituskyky on.

Mitä tulee RAM-kapasiteetin kysymykseen, meidän tulisi edetä seuraavista indikaattoreista:

  • suunniteltu pelaajien määrä;
  • suunniteltu määrä maailmoja palvelimella;
  • jokaisen maailman kokoa.

On syytä muistaa, että Java-sovellus tarvitsee aina RAM-muistin. Jos oletetaan, että muistinkulutus on 8 gigatavua, tarvitset itse asiassa 12. Luvut ovat suhteellisia, mutta olemus ei muutu.

Palvelinosan käynnistämiseksi suosittelemme artikkelissa määritettyjen lippujen käyttöä JVM – G1GC Roskakeräilippujen virittäminen Minecraftille. Tämän "mustan magian" avulla palvelin voi määrittää "roskakeräimen" oikein ja optimoida RAM:n käytön. Sinun ei pitäisi varata enemmän muistia kuin palvelin todella kuluttaa pelaajien huipun aikana.

Lohkokartan luominen

"Luuletko todella, että kuu on olemassa vain, kun katsot sitä?" (Albert Einstein)

Täysin uusi palvelin. Heti kun pelaaja muodostaa yhteyden onnistuneesti ensimmäisen kerran, pelihahmo ilmestyy yleiseen kokoontumispisteeseen (spawn). Tämä on ainoa paikka, jossa palvelin on luonut pelimaailman valmiiksi. Samalla asiakasosa tarkastelee asetuksia ja avainparametri on piirtoetäisyys. Se mitataan paloina (kartta-alue on 16×16 ja 256 lohkoa korkea) Kuinka monta paloa siellä on ilmoitettu, on tarkalleen kuinka monta palvelimelta pyydetään.

Palvelin tallentaa globaalin maailmankartan, ja jos siinä ei ole vielä luotuja lohkoja pelihahmon ilmestymishetkellä, palvelin luo ne dynaamisesti ja tallentaa ne. Tämä ei ainoastaan ​​vaadi suuria laskentaresursseja, vaan se myös kasvattaa jatkuvasti maailmankartan kokoa. Yhdellä vanhimmista anarkistipalvelimista 2b2t (2builders2tools) Kartan koko on jo ylittänyt 8 Tb ja maailman raja on noin 30 miljoonan korttelin kohdalla. Tähän palvelimeen liittyy tuhansia tarinoita, ja se ansaitsee oman artikkelinsa sarjassa.

Maailman luominen yhden pelaajan ympärille ei ole ongelma. Maailman luominen satojen pelaajien ympärille aiheuttaa pieniä palvelimen hidastuksia lyhyeksi ajaksi, jonka jälkeen kuormitus vähenee. Maailman luominen noin tuhannen pelaajan asiakkaan renderöintietäisyydelle voi jo "pudottaa" palvelimen ja heittää kaikki asiakkaat pois siitä aikakatkaisun vuoksi.

Palvelinohjelmistossa on arvo esim TPS (Ticks per Server - tikkejä sekunnissa). Normaalisti yksi kellojakso on 1 ms. (50 sekunti todellisesta maailmasta vastaa 1 pelimaailman rastia). Jos yhden rastin käsittely pitenee 20 sekuntiin, palvelinsovellus suljetaan ja kaikki pelaajat heitetään ulos.

Ratkaisu on rajoittaa maailma tiettyihin koordinaatteihin ja suorittaa alustava lohkogenerointi. Näin ollen poistamme dynaamisen generoinnin tarpeen pelin aikana, ja palvelimen tarvitsee vain lukea olemassa oleva kartta. Molemmat ongelmat voidaan ratkaista yhdellä liitännällä Maailmanraja.

Helpoin tapa on asettaa maailmanraja ympyrän muotoon suhteessa syntypisteeseen (vaikka voit tehdä siitä minkä muotoisen tahansa) yhdellä komennolla:

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

Jos pelaajahahmo yrittää ylittää rajan, hänet työnnetään taaksepäin useita lohkoja. Jos tämä tehdään useita kertoja rajoitetun ajan sisällä, rikoksentekijä teleportoidaan väkisin syntypisteeseen. Maailman esisukupolvi tehdään vieläkin yksinkertaisemmin komennolla:

/wb fill

Koska tämä toiminto saattaa vaikuttaa palvelimen pelaajiin, varmista:

/wb confirm

Yhteensä 5000 lohkon (n. 40 miljardin lohkon) säteellä olevan maailman luominen Intel® Xeon® Gold 2 -prosessorilla kesti noin 6240 tuntia. Siksi, jos haluat esiluoda suuremman kartan, ota huomioon, että tämä prosessi vie kohtuullisen ajan ja palvelimen TPS vähenee huomattavasti. Muista myös, että jopa 5000 lohkon säde vaatii noin 2 Gt levytilaa.

Huolimatta siitä, että laajennuksen uusin versio kehitettiin Minecraft-versiolle 1.14, kokeellisesti havaittiin, että se toimii hyvin myöhemmissä versioissa. Saatavilla on täydellinen luettelo komennoista selityksineen laajennusfoorumilla.

Ongelmalohkot

Minecraftissa on suuri valikoima lohkoja. Haluamme kuitenkin kiinnittää lukijoiden huomion sellaiseen lohkoon kuin TNT. Kuten nimestä voi päätellä, tämä lohko on räjähdysaine (Toimittajan huomautus - tämä on virtuaalimaailman pelikohde, eikä tässä esineessä ole mitään oikeita räjähteitä). Sen erikoisuus on sellainen, että aktivoitumishetkellä painovoima alkaa vaikuttaa siihen. Tämä pakottaa palvelimen laskemaan kaikki koordinaatit, jos lohko tällä hetkellä alkaa pudota.

Jos TNT-lohkoja on useita, yhden lohkon räjähdys aiheuttaa räjähdyksen ja painovoiman aktivoitumisen naapurilohkoissa, jotka sirottavat ne kaikkiin suuntiin. Kaikki tämä kaunis mekaniikka palvelinpuolella näyttää monilta operaatioilta kunkin lohkon liikeradan laskemiseksi sekä vuorovaikutukselta viereisten lohkojen kanssa. Tehtävä on erittäin resurssiintensiivinen, jonka kuka tahansa voi helposti tarkistaa. Luo ja räjäytä TNT-lohkoista kuutio, jonka koko on vähintään 30x30x30. Ja jos luulit, että sinulla on hyvä, tehokas pelitietokone, erehdyit pahasti 😉

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

Minecraft-palvelimen optimointi
Samanlainen "koe" palvelimella Intel® Xeon® Gold 6240:llä johti vakavaan TPS-pudotukseen ja 80 % suorittimen kuormitukseen koko lohkoräjäytysajan aikana. Siksi, jos joku pelaaja pystyy tekemään tämän, suorituskykyongelma vaikuttaa kaikkiin palvelimen pelaajiin.

Vielä tiukempi vaihtoehto - Edge kristalleja. Jos TNT kuitenkin räjähtää peräkkäin, Edge Crystals räjähtää kaikki samaan aikaan, mikä teoriassa voi pysäyttää palvelinsovelluksen toiminnan kokonaan.

Tämä skenaario voidaan välttää vain kieltämällä kokonaan näiden lohkojen käyttö pelimaailmassa. Esimerkiksi käyttämällä laajennusta Maailmanvartija. Huomaa, että tämä laajennus itsessään ei toimi ilman toista laajennusta Worldedit. Asenna siis ensin WorldEdit ja sitten WorldGuard.

Johtopäätös

Pelipalvelimen oikea hallinta ei ole helppo tehtävä. Vaikeudet ja heikentynyt suorituskyky odottavat sinua joka käänteessä, varsinkin jos et ota huomioon itse pelimekaniikkaa. Kaikkea on mahdotonta ennakoida, koska pelaajat voivat joskus olla hyvin luovia yrittäessään pakottaa palvelimen tekemään jotain, johon sitä ei ole tarkoitettu. Vain kohtuullinen tasapaino riskien ja asetettujen rajoitusten välillä mahdollistaa palvelimen jatkuvan toiminnan ilman, että sen suorituskyky laskee kriittisiin arvoihin.

Karanteenin aikana osa työntekijöistämme kaipasi suosikkitoimistojaan ja päätti luoda ne uudelleen Minecraftissa. Sinulla on myös mahdollisuus tulla luoksemme vaarantamatta terveyttäsi tai tuhlaamatta aikaa tien päällä.

Tätä varten kutsumme kaikki palvelimellemme minecraft.selectel.ru (asiakasversio 1.15.2), jossa palvelinkeskukset Tsvetotšnaja-1 ja Tsvetotšnaja-2 luotiin uudelleen. Älä unohda suostua lataamaan lisäresursseja, ne ovat välttämättömiä joidenkin sijaintien oikeaan näyttämiseen.

Tehtävät, tarjouskoodit, pääsiäismunat ja miellyttävä viestintä odottavat sinua.

Lähde: will.com

Lisää kommentti