Blogissamme olemme jo
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
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
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
Bukkitin asentaminen ei ole vaikeaa, vastaavat ohjeet ovat resurssissa
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.
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ä
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öä
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
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ä
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
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
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
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