
Meie blogis oleme juba , kuidas luua oma Minecraft server, kuid sellest ajast on möödunud 5 aastat ja palju on muutunud. Jagame teiega praeguseid viise populaarse mÀngu serveri loomise ja optimeerimise kohta.
Oma 9-aasta ajaloo jooksul (kui arvestada vÀljaande kuupÀeva) on Minecraft teeninud hÀmmastava arvu fÀnne ja kriitikuid nii tavaliste mÀngijate kui ka geegide seas. Lihtne kuubikute maailma kontseptsioon on muutunud tavalisest ajaviitest universaalseks keskkonnaks suhtlemiseks ja erinevate reaalse maailma objektide loomise jaoks.
Lisaks ehitamisele on mĂ€ngus vĂ”imalus luua , mis vĂ”imaldavad ellu viia tĂ€ieĂ”iguslikke algoritme Minecraftis. YouTube'is on rohkesti muljetavaldavaid videoid, kus inimesed on teinud tohutu töö ja investeerinud palju aega, et luua koopia millestki elektronseadmest vĂ”i ehitada ĂŒksikasjalik koopia ja arhitektuurilistest ehitistest. KĂ”ik piirneb vaid mĂ€ngija fantaasia ja mĂ€ngumaailma vĂ”imalustega.

Kuid jĂ€tkame rÀÀkimist sellest, mida mĂ€ngijad loovad, ning vaatame rakenduse serveri osa ja kĂ€sitleme probleeme (mĂ”nikord vĂ€ga keerulisi), mis vĂ”ivad tekkida koormuse all töötamise protsessis. Ătleme kohe, et rÀÀgime ainult Java Edition'ist.
Serverite tĂŒĂŒbid
Lihtsaim variant on server, mis on integreeritud mÀngu kliendi sisse. Loote maailma, vajutate nuppu, ja server on kohaliku vÔrgu kaudu kergesti kÀttesaadav. Selline variant ei suuda taluda tÔsist koormust ja seetÔttu ei uurime seda isegi edasi.
Vanilla
Mojang Studios jagab mÀngu serveri osa tasuta Java-rakendusena . See vÔimaldab luua omaenda ja isikliku maailma, tehes selle kergesti kÀttesaadavaks igast maailma punktist. Esmakordsetele tegijatele on olemas suurepÀrane , mis on saadaval vastavas mÀngu Wikis.
Selle lĂ€htekoha ĂŒks tĂ”sine puudus on see, et puuduvad vĂ”imalused "karbist vĂ€lja" pluginate ĂŒhendamiseks, mis laiendavad serveri funktsionaalsust ja vĂ”imaldavad mitte ainult paljusid protsesse automatiseerida, vaid ka sooritusvĂ”imetoptimeerida. Lisaks vajab ametlik server piisavalt suurt töötlemismĂ€lu igale ĂŒhendatud mĂ€ngijale.
Bukkit
Harrastajate loodud serverirakendus Vanilla versiooni alusel laiendas mÀngu vÔimalusi mÀrgatavalt pluginate ja modifikatsioonide toetamise kaudu. See vÔimaldas mitte ainult lisada mÀngu uusi plokke, vaid ka teha erinevaid manipulatsioone, mis olid tavalise tarkvara jaoks kÀttesaamatud. Mis on huvitav, see rakendus nÔudis mÀlu oluliselt vÀhem.
Bukkit'i installimine ei ole eriline vaev, vastav juhend on ressursis . Kuid see ei ole mÔttekas, kuna alates 2014. aastast on Bukkit'i meeskond lahku lÀinud, projekti arendajad on saanud Mojang Studios töötajateks ja on jÀetud. Seega on Bukkit tegelikult surnud ja on mÔistlik pöörata tÀhelepanu kahele jÀrgmisele projektile.
SpigotMC
Pluginade arendajate elukergendamiseks oli vajalik API, et suhelda mĂ€ngumaailmaga. Just selle ĂŒlesande lahendasid , vĂ”ttes aluseks Bukkit'i tuuma ja töötades selle paremaks usaldusvÀÀrsuseks ja sooritusvĂ”imeks. Siiski, projekti on takistatud digitaalse ajastu autoriĂ”iguse seaduse () tĂ”ttu, ja sealt allalaadimine on vĂ”imatu.
Praegu arendatakse SpigotMC aktiivselt ja seda kasutatakse. See toetab kĂ”iki Bukkit'i alla loodud pluginaid, kuid ei ole nende tagasiĂŒhilduv. DMCA Takedown'i keelu ringist mööda hiilimiseks pandi paika elegantne lahendus nimega BuildTools. See tööriist vabastab vajadusest jaotada compiled rakendust ja vĂ”imaldab kasutajatel Spigot, CraftBukkit ja Bukkit ise allikakoodist kompileerida. KĂ”ik see muudab DMCA keelu kasutuks.
PaperMC
Tundub, et kĂ”ik on suurepĂ€rane ja Spigot on saanud suurepĂ€raseks valikuks. Kuid mĂ”ned entusiastid pidasid seda siiski vĂ€heks ja lĂ”id oma Spigot'i "steroidide peal" forki. Peamine eelis on, et âItâs stupid fastâ. Arendatud kommuun aitab valmis kiiresti lahendama tekkinud kĂŒsimusi, ja laiendatud API - looma huvitavaid pluginaid. PaperMC kĂ€ivitamiseks on vajalik vaid ĂŒks lihtne kĂ€sk, nagu on toodud .
PaperMC on kĂ”ik ĂŒhilduv, seega SpigotMC-le kirjutatud pluginad töötavad kergesti ka PaperMC-l, kuid ametlikku tuge ei pakuta. TagasiĂŒhilduvus SpigotMC-ga on samuti olemas. NĂŒĂŒd, kui oleme loetlenud erinevad serveri loomise vĂ”imalused, liigume edasi jĂ”udlusprobleemide juurde, mis vĂ”ivad esineda.
Probleemid ja lahendused
Peamine, mida tuleb mĂ”ista, on see, et kĂ”ik, mis puudutab mĂ€ngumaailma töötlemist, töödeldakse ainult ĂŒhe fĂŒĂŒsilise serveri arvutustihedusega korra. Seega, kui teil on suurepĂ€rane server kĂŒmne arvutustihedusega kerniga, siis koormatakse ainult ĂŒhte. KĂ”ik teised jÀÀvad tegelikult tĂŒhjaks. Selline on rakenduse arhitektuur, ja te ei saa selle vastu midagi ette vĂ”tta. Seega serveri valimisel tuleks tĂ€helepanu pöörata mitte tuumade arvule, vaid taktsagedusele. Mida kĂ”rgem on taktsagedus, seda parem on jĂ”udlus.
Mis puudutab RAM-i mahtuvust, siis tuleks lÀhtuda jÀrgmistest nÀitajatest:
- planeeritud mÀngijate arv;
- planeeritud maailmade arv serveris;
- iga maailma suurus.
Peab meeles pidama, et Java rakendusele on alati vajalik mÀlureserv. Kui arvate, et mÀlu tarbimine on 8 gigabayti, siis tegelikult peaks olema 12. Numbrid on tinglikud, kuid sisu ei muutu.
Serveriosa kĂ€ivitamiseks soovitame kasutada artiklis mĂ€rgitud mĂ€rke . See "must maagia" vĂ”imaldab serveril Ă”igesti seadistada "prĂŒgikoguja" ja optimeerida RAM-i kasutamist. Ei ole mĂ”tet eraldada rohkem mĂ€lu, kui server tegelikult tarbib, kui mĂ€ngijate arv on kĂ”rgem.
Blokikaardi genereerimine
âKas te tĂ”eliselt arvate, et kuu eksisteerib ainult siis, kui te seda vaatate?â (Albert Einstein)
TĂ€iesti uus server. Kui mĂ€ngija esmakordselt edukalt liitub, ilmub mĂ€ngu karakter ĂŒhisele kogunemispunktile (spawn). See on ainus koht, kus mĂ€ngumaailm genereeritakse serveri poolt ette. Sel hetkel vaatab kliendi pool seadistusi, kus vĂ”tmeparameetriks on joonistuse ulatus. See mÔÔdetakse chunk'ides (kaardiala 16x16 ja kĂ”rgus 256 plokki). Kui palju chunk'e seal on mÀÀratud, just nii palju kĂŒsitakse serverilt.
Serveris hoitakse globaalset mĂ€ngumaailma kaarti, ja kui mĂ€ngu karakteri ilmumispunktis ei ole veel genereeritud plokke, genereerib server need dĂŒnaamiliselt ja salvestab endasse. Lisaks sellele, et see nĂ”uab suuri arvutusressursse, suurendab see pidevalt maailma kaardi suurust. Ăhel vanimal anarhilisel serveril (2builders2tools) on kaardi suurus juba ĂŒletanud 8 Tb, ja maailma piir kulgeb 30 miljoni ploki pealt. Selle serveriga on seotud tuhandeid lugusid ja see vÀÀrib eraldi artiklite seeriat.
Maailma genereerimine ĂŒhe mĂ€ngija ĂŒmber ei ole probleem. Maailma genereerimine sada mĂ€ngijat ĂŒmber tekitab serveris lĂŒhiajalisi vĂ€iksemaid viivitusi, pĂ€rast mida koormus vĂ€heneb. Kui joonistuse ulatus ulatub tuhandete mĂ€ngijate ĂŒmber, on server juba vĂ”imeline âkukutamaâ ning viskama kĂ”ik kliendid vĂ€lja ajakaotuse tĂ”ttu.
Serveri tarkvaras on selline vÀÀrtus nagu TPS (Ticks per Server â taktid sekundis). Normaalsetele tingimustele vastab 1 takt 50 ms. (1 reaalmaailma sekund vastab 20 mĂ€ngumaailma taktile). Kui ĂŒhe takti töötlemine kasvab 60 sekundini â serveri rakendus suletakse, lĂ”petades kĂ”ik mĂ€ngijad.
Lahendus on piirata maailma teatud koordinaatidega ja teha plokkide eelgenereerimine. Sel moel elimineerime dĂŒnaamilise genereerimise vajaduse mĂ€ngu kĂ€igus, ja serveril on piisav lugeda juba olemasolevat kaarti. MĂ”lemad kĂŒsimused lahendatakse ĂŒheainsa pistikprogrammi abil. .
KĂ”ige lihtsam on seada maailma piir ringina spawn-punkti suhtes (kuigi see vĂ”ib olla mistahes kujuga) ĂŒhe kĂ€suga:
/wb set <ŃаЎОŃŃ ĐČ Đ±Đ»ĐŸĐșаŃ
> spawnKui mĂ€ngu karakter proovib piiri ĂŒletada, visatakse ta tagasi mitme ploki kaugusele. Kui seda teha mitu korda lĂŒhikese aja jooksul, siis sunnitakse rikkumist sooritanud mĂ€ngija teleportima spawni punkti. Eelnev maailma genereerimine toimub veelgi lihtsamalt kĂ€suga:
/wb fillKuna see tegevus vÔib potentsiaalselt mÔjutada serveris olevaid mÀngijaid, Àrge unustage kinnitada selle teostamist:
/wb confirmKokku kulus 5000 ploki (~40 miljardit ploki) raadiusega maailma genereerimiseks umbes 2 tundi IntelŸ XeonŸ Gold 6240 protsessoril. Seega, kui soovite kÀivitada suurema kaardi eel genereerimise, arvestage, et see protsess vÔtab tublisti aega ja serveri TPS vÀhendab oluliselt. Samuti pidage meeles, et isegi 5000 ploki raadius vajab umbes 2 GB ruumi kÔvakettal.
Kuigi plugina viimane versioon on loodud Minecrafti versiooni 1.14 jaoks, on praktikas leitud, et see töötab suurepÀraselt ka uusimates versioonides. TÀielik kÀskude nimekiri koos selgitustega on saadaval .
Probleemsed plokid
Minecraftis on erinevaid plokke tohutult. Kuid soovime lugedes tĂ€helepanu juhtida plokile nimega TNT. Nagu nimestki selgub, on see plokk lĂ”hkeaine. (toimetuse mĂ€rkus â see on mĂ€nguasi virtuaalses maailmas ning ei oma seost tegelike lĂ”hkeainetega). Selle eripĂ€ra on see, et aktiveerimise hetkel hakkab plokile mĂ”ju avaldama gravitatsioon. See sunnib serverit arvutama kĂ”ik koordinaadid, kui plokk hakkab langema.
Kui plokke TNT on mitu, siis ĂŒhe ploki detonatsioon pĂ”hjustab naabrite plokkide detonatsiooni ja gravitatsiooni aktiveerimist, levitades neid igas suunas. Kogu see ilus mehaanika serveri poolel nĂ€eb vĂ€lja nagu palju tegevusi iga ploki trajektoori arvutamiseks ja naabrite plokkidega suhtlemiseks. Ălesanne on ÀÀrmiselt ressursimahukas, mis on kergesti kontrollitav. Genereerige ja detonatsioonige TNT plokist kuub, mille suurus on vĂ€hemalt 30x30x30. Ja kui arvasite, et teil on hea ja vĂ”imas mĂ€nguarvuti, siis eksisite tĂ”eliselt đ
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Sarnane âeksperimentâ serveris IntelÂź XeonÂź Gold 6240 pĂ”hjustas tĂ”sise âlanguseâ TPS-is ja 80% koormuse CPU-s kogu detoneerimise aja. Seega, kui ĂŒkskĂ”ik milline mĂ€ngija suudab sellise asja korda saata, siis jĂ”udlusprobleem mĂ”jutab kĂ”iki serveris olevaid mĂ€ngijaid.
Isegi rangem variant â Kraadi Kristallid. Kui TNT siiski plahvatab jĂ€rjestikku, siis Kraadi Kristallid detoneeruvad kĂ”ik samaaegselt, mis teoorias vĂ”ib tĂ€ielikult peatada serveri rakenduse töö.
Seda stsenaariumi on vÔimalik vÀltida, kui keelata nende plokkide kasutamine mÀngumaailmas tÀielikult. NÀiteks pistiku kaudu . Pange tÀhele, et see plugin iseenesest ei toimi ilma teise plugina . Seega installige kÔigepealt WorldEdit ja seejÀrel WorldGuard.
KokkuvÔte
MĂ€nguserveri tĂ”hus haldamine ei ole lihtne ĂŒlesanne. Raskused ja jĂ”udluse langus varitsevad iga sammu peal, eriti kui mitte arvestada mĂ€ngu protsessi enda mehhanismi. KĂ”ike ette nĂ€ha on vĂ”imatu, sest mĂ€ngijad on aeg-ajalt vĂ€ga leidlikud ĂŒritades sundida serverit tĂ€itma ĂŒlesandeid, milleks see ei olnud ette nĂ€htud. Ainult mĂ”istlik tasakaal riskide ja seatud piirangute vahel vĂ”imaldab serveril töötada pidevalt ja mitte langetada oma jĂ”udlust kriitilistele vÀÀrtustele.
Karantiinis igatsesid mĂ”ned meie töötajad oma lemmikbĂŒroode jĂ€rele ja otsustasid luua need Minecraftis. Teil on ka vĂ”imalus meid kĂŒlastada, riskimata oma tervise ja raiskamata aega teel.
Selleks kutsume kĂ”iki soovijaid meie serverisse minecraft.selectel.ru klientversioon 1.15.2), kus on taaslooduud andmekeskused Lilleline-1 ja Lilleline-2. Ărge unustage nĂ”ustuda tĂ€iendavate ressursside allalaadimisega; need on vajalikud mĂ”nede asukohtade korrektselt kuvamiseks.
Teid ootavad seiklused, sooduskoodid, âmunadâ ja meeldiv suhtlemine.
Allikas: habr.com
