
Meie blogis oleme juba , kuidas luua oma Minecrafti server, kuid sellest on möödunud 5 aastat ja palju on muutunud. Jagame teiega asjakohaseid viise selle populaarse mÀngu serveri loomise ja optimeerimise kohta.
Oma 9-aasta ajaloo jooksul (kui arvestada vÀljaandmise kuupÀeva) on Minecraft kogunud uskumatult palju fÀnne ja kriitikuid nii tavapÀrastelt mÀngijatelt kui ka geekeritest. Lihtne kuubikute maailm on muutunud tavalisest ajaviitest universaalseks suhtlus- ja loomekeskkonnaks, kus saab luua erinevaid reaalse maailma objekte.
Lisaks ehitamisele pakub mÀng vÔimalust luua , mis vÔimaldavad rakendada tÀielikke algoritme Minecraftis. YouTube'is on palju muljetavaldavaid videoid, kus inimesed, kes on investeerinud tohutult vaeva ja aega, on loonud koopiaid erinevatest elektroonilistest seadmetest vÔi ehitanud detailsed koopiad ja arhitektuurilistest ehitistest. KÔik on piiratud vaid mÀngija kujutlusvÔime ja mÀngu universumi vÔimalustega.

Aga jĂ€tkame jutu kĂ€tketud teemadega, mis on seotud mĂ€ngijate loominguga, ning vaatame rakenduse serveripoolt ning kĂ€sitleme probleeme, mis vĂ”ivad tekkida töö kĂ€igus koormuse all (mĂ”nikord ĂŒsna keerulised). TĂ€iendavalt mĂ€rkime, et rÀÀgime ainult Java Edition'ist.
ServeritĂŒĂŒbid
Lihtsaim variant on server, mis on integreeritud mÀngu klienti. Loodud maailm, vajutad nuppu, ja server on kohaliku vÔrgu kaudu saadaval. Selline variant ei suuda taluda tÔsist koormust, seega ei arutame seda varianti edasi.
Vanilla
EttevÔte Mojang Studios jagab mÀngu serveripoolt tasuta Java-rakendusena. See vÔimaldab sul luua omaenda ja isikliku maailma, tehes selle kergesti kÀttesaadavaks igast maailma nurgast. Need, kes teevad seda esmakordselt, saavad suurepÀrase , mis on saadaval vastavas mÀngu Wikis.
Sellel lĂ€henemisel on ĂŒks tĂ”sine puudus, nimelt - poe tasemel plugin-de integreerimise vĂ”imaluste puudumine, mis laiendavad serveri funktsionaalsust ning vĂ”imaldavad mitte ainult automatiseerida paljusid protsesse, vaid ka optimeerida jĂ”udlust. Lisaks tarbib ametlik server ĂŒsna palju RAM'i iga ĂŒhendatud mĂ€ngija kohta.
Bukkit
Harrastajate loodud Vanilla versiooni pĂ”hjal serverirakendus laiendas mĂ€ngu vĂ”imalusi oluliselt, toetades pluginaid ja modifikatsioone. See lubas mitte ainult mĂ€ngu protsessis uusi plokke lisada, vaid ka teostada erinevaid manipuleerimisi, mis olid vanillisĂŒsteemides saadaval. Huvi tĂ”ttu, vajab see rakendus mĂ€lu oluliselt vĂ€hem.
Bukkit'i installimine ei ole keeruline, vastav juhend on saadaval ressursil . Kuid see pole mÔtet, kuna alates 2014. aastast on Bukkit meeskond lahku lÀinud, projekti arendajad on saanud Mojang Studios'i töötajateks, ning on mahajÀetud. Seega on Bukkit sisuliselt surnud ja on mÔistlik pöörata tÀhelepanu jÀrgmistele kahele projektile.
SpigotMC
Pluginide arendajate elu lihtsustamiseks oli vajalik API mĂ€ngumaailmaga suhtlemiseks. Just selle ĂŒlesande lahendamisega tegelesid loojad , vĂ”ttes aluseks Bukkit'i tuuma ja töötades selle ĂŒmber parema usaldusvÀÀrsuse ja jĂ”udluse saavutamiseks. Siiski, projekti oli blokeeritud digitaalajastu autoriĂ”iguse seaduse () tĂ”ttu ja sealt ei saa allalaadida lĂ€htekoodi.
Praegu areneb ja kasutatakse aktiivselt SpigotMC. See toetab kĂ”iki Bukkit'i pĂ”hjal loodud pluginaid, kuid ei ole nendega tagurpidi ĂŒhilduv. DMCA Takedown'i keelust möödumiseks leiutati elegantne lahendus nimega BuildTools. See tööriist vabastab vajalikust kompileeritud rakenduse levitamisest ja vĂ”imaldab kasutajatel Spigot'i, CraftBukkit'i ja Bukkit'i kompileerida lĂ€htekoodist. See kĂ”ik muudab DMCA keelu kasutuks.
PaperMC
Tundub, et kĂ”ik on suurepĂ€rane, ja Spigot sai suurepĂ€raseks vĂ”imaluseks. Kuid mĂ”ned entusiastid pidasid seda liiga vĂ€heseks ning nad lĂ”id oma Spigot'i âsteroidide allâ forki. Selle peamiseks eeliseks on mĂ€rgitud, et âSee on ÀÀrmiselt kiireâ. Arenguga lahendab kiiresti tekkivaid kĂŒsimusi, samas kui laiendatud API vĂ”imaldab luua huvitavaid pluginaid. PaperMC saab kĂ€ivitada ĂŒhe lihtsa kĂ€suga, mis on toodud .
PaperMC-aga on kĂ”ike head, mistĂ”ttu SpigotMC jaoks kirjutatud pluginad töötavad PaperMC-l kergesti, kuid ilma ametliku toeta. Tagurpidi ĂŒhilduvus SpigotMC-ga on samuti olemas. NĂŒĂŒd, kui oleme loetlenud erinevaid serveri loomise vĂ”imalusi, liikume edasi jĂ”udlusprobleemide juurde, mis vĂ”ivad tekkida.
Probleemid ja lahendused
Peamine, mida tuleb mĂ”ista, on see, et kĂ”ik, mis puudutab mĂ€ngumaailma töötlemist, töötatakse vĂ€lja ainult ĂŒhe fĂŒĂŒsilise serveri arvutustuumaga. Seega, kui teil on suurepĂ€rane server, kus on kĂŒmmekond arvutustuumade, kasutatakse ainult ĂŒhte. KĂ”ik ĂŒlejÀÀnud jÀÀvad tegelikult seisma. Selline on rakenduse arhitektuur ja te ei saa sellega midagi teha. Seega tuleks serveri valimisel pöörata tĂ€helepanu mitte tuumade arvule, vaid taktsagedusele. Mida kĂ”rgem see on, seda parem on jĂ”udlus.
Mis osas mÀlu mahust, tuleks lÀhtuda jÀrgmistest nÀitajatest:
- planeeritav mÀngijate arv;
- planeeritav maailmade arv serveris;
- iga maailma suurus.
Tuleb meeles pidada, et Java-rakendus vajab alati mÀlureservi. Kui arvate, et mÀlu tarbimine on 8 gigabaiti, siis tegelikult tuleks varuda 12. Numbrid on tinglikud, kuid pÔhimÔte ei muutu.
Serveri kĂ€ivitamiseks soovitame kasutada artiklis toodud rippmenĂŒĂŒs . See "must maagia" aitab serveril Ă”igesti seadistada "prĂŒgikoristaja" ja optimeerib mĂ€lu kasutamist. Ei tasu eraldada rohkem mĂ€lu, kui server tĂ”eliselt vajab tipphetkel mĂ€ngijate vooluga.
Kaardiblokkide genereerimine
âKas te tĂ”esti arvate, et Kuu eksisteerib ainult siis, kui te seda vaatate?â (Albert Einstein)
TĂ€iesti uus server. Korra, kui mĂ€ngija esmakordselt edukalt ĂŒhendub, ilmub mĂ€ngujoonis ĂŒldisesse kogunemispunkti (spawni). See on ainus koht, kus mĂ€ngumaailm genereeritakse serveri poolt eelnevalt. Sel hetkel vaatab kliendipool seadistuste poole, kus vĂ”tmeparameetriks on renderdamise kaugus. Seda mÔÔdetakse chunkâides (kaardi piirkond 16Ă16 ja kĂ”rgus 256 plokki). Kui palju chunkâe on seal mÀÀratud, just nii palju kĂŒsitakse serverilt.
Serveris hoitakse globaalselt maailma kaarti ja kui mĂ€ngija ilmingupunktis ei ole veel genereeritud plokke, genereerib server need dĂŒnaamiliselt ja salvestab enda juurde. Mitte ainult, et see nĂ”uab suuri arvutusressursse, vaid see suurendab ka pidevalt maailma kaardi suurust. Ăhel vanimal anarhilisel serveril (2builders2tools) on kaardi suurus juba ĂŒletanud 8 Tb ja maailma piir kulgeb 30 miljoni ploki mĂ€rgi juures. Selle serveriga seondub tuhandeid lugusid ja see vÀÀrib eraldi artiklit artiklite seeriast.
Maailma genereerimine ĂŒhe mĂ€ngija ĂŒmber ei ole probleem. Kuid maailma genereerimine saja mĂ€ngija ĂŒmber vĂ”ib serveri töös pĂ”hjustada vĂ€ikseid viivitusi lĂŒhikese aja jooksul, pĂ€rast mida koormus vĂ€heneb. Kui maailma genereerida kliendi joonistuskaugusel tuhandete mĂ€ngijate ĂŒmber, vĂ”ib see serveri "mahutada" ja eemaldada kĂ”ik mĂ€ngijad ajaĂŒlese katkestamise tĂ”ttu.
Serveri tarkvaras on selline vÀÀrtus nagu TPS (Ticks per Server â taktid sekundis). Tavaline 1 takt kestab 50 ms. (1 reaalmaailma sekund on 20 takti mĂ€ngumaailmas). Kui ĂŒhe takti töötlemise aeg tĂ”useb 60 sekundini, siis serveri rakendus sulgub, eemaldades kĂ”ik mĂ€ngijad.
Lahendus on piirata maailma teatud koordinaatidega ja teostada eelnevat generaatorit. Sellega vĂ€heneb vajadus dĂŒnaamilise genereerimise jĂ€rele mĂ€ngu ajal, ja serveril on piisav lugeda juba olemasolevat kaarti. MĂ”lemad probleemid lahendatakse ĂŒheainsa plugina abil. .
KĂ”ige lihtsam on seada maailma piir ĂŒmmargusena spawni punkti suhtes (kuigi seda saab teha ka mistahes kujul) ĂŒhe kĂ€su abil:
/wb set <ŃаЎОŃŃ ĐČ Đ±Đ»ĐŸĐșаŃ
> spawnKui mĂ€ngutegeleane pĂŒĂŒab piiri ĂŒletada, visatakse ta tagasi mitme ploki vĂ”rra. Kui seda teete lĂŒhikese aja jooksul mitu korda, teleporteeritakse rikkumise teinud isik sunniviisiliselt spawni punkti. Eelnevat maailmapreparatsiooni on veelgi lihtsam teha, kasutades kĂ€sku:
/wb fillKuna see tegevus vÔib potentsiaalselt mÔjutada mÀngijaid, kes on serveris, Àrge unustage kinnitada selle teostamist:
/wb confirmKokku kulus 5000 ploki (~40 miljardit plokki) raadiuse genereerimiseks umbes 2 tundi IntelŸ XeonŸ Gold 6240 protsessoril. Seega, kui soovite kÀivitada suurema kaardi eelpreparatsiooni, arvestage, et see protsess vÔtab rohkem aega ja serveri TPS (tehingute sekundi jooksul) vÀheneb tÔsiselt. Samuti pidage meeles, et isegi 5000 ploki raadius vajab umbes 2 GB ruumi kÔvakettal.
Kuigi plugina viimase versiooni on vÀlja töötatud Minecrafti versioonile 1.14, on praktika nÀidanud, et see töötab suurepÀraselt ka hilisemates versioonides. TÀielik kÀskude nimekiri koos selgitustega on saadaval .
Probleemsed plokid
Minecraftis on palju erinevaid plokke. Me tahaksime siiski luua lugejatele tĂ€helepanu plokile, mis on TNT. Nagu nimi ĂŒtleb, on see plokk plahvatusohtlik aine (toimetuse mĂ€rkus â see on mĂ€nguelement virtuaalses maailmas ja sel ei ole seost reaalse lĂ”hkeainega). Selle omadus on see, et aktiveerimise hetkel hakkab sellele mĂ”juma gravitatsioonijĂ”ud. See sunnib serverit arvutama kĂ”iki koordinaate, kui plokk hakkab sel hetkel langema.
Kui TNT-plokke on mitu, kutsub ĂŒhe bloki detoneerimine esile naabrite plokkide detoneerimise ja gravitatsiooni aktiveerimise, paisates need igas suunas laiali. Kogu see ilus mehaanika serveri poolel tundub kui arvukad operatsioonid iga ploki trajektoori arvutamisel ning naabrite plokkidega suhtlemisel. See on ÀÀrmiselt ressursimahukas ĂŒlesanne, mida saab igaĂŒks kergesti kontrollida. Looge ja lĂ”hkeke plokkide TNT kuubik, mille suurus on vĂ€hemalt 30x30x30. Ja kui arvasite, et teil on hea vĂ”imas mĂ€nguarvuti, siis eksisite tugevalt đ
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Sarnane âkatseâ IntelÂź XeonÂź Gold 6240 serveris pĂ”hjustas tĂ”sise TPS vĂ€henemise ja 80% koormuse CPU-l kĂ”ikide plokkide plahvatuse ajal. Seega, kui keegi mĂ€ngijatest suudab midagi sellist teha, mĂ”jutab jĂ”udlusprobleem kĂ”iki serveris olevaid mĂ€ngijaid.
Veelgi rangem variant â ĂĂ€rmiselt TĂ€hed. Kui TNT siiski plahvatab jĂ€rjestikku, plahvatavad ĂĂ€rmiselt TĂ€hed kĂ”ik koos, mis teoorias vĂ”ib serveri rakenduse tegevuse tĂ€ielikult peatada.
Seda stsenaariumi saab vÀltida, kui keelata nende plokkide kasutamine mÀngumaailmas tÀielikult. NÀiteks plugina kaudu . Pange tÀhele, et see plugin ei tööta iseseisvalt ilma teise plugina, abi. Seega installige esmalt WorldEdit ja seejÀrel WorldGuard.
KokkuvÔte
MĂ€nguserveri Ă”ige juhtimine ei ole lihtne ĂŒlesanne. IgapĂ€evaselt vĂ”ivad tekkida raskused ja jĂ”udluse langus, eriti kui arvesse ei vĂ”eta mĂ€ngu enda mehaanikat. KĂ”iki olukordi ette nĂ€ha ei saa, kuna mĂ€ngijad vĂ”ivad olla vĂ€ga leidlikud, pĂŒĂŒdes sundida serverit tegema asju, milleks see algselt ei olnud mĂ”eldud. Ainult mĂ”istlik tasakaal riskide ja kehtestatud piirangute vahel vĂ”imaldab serveril töötada pidevalt ja mitte vĂ€hendada oma jĂ”udlust kriitilistele tasemetele.
Karantiini ajal igatsesid mĂ”ned meie töötajad oma lemmikute kontorite jĂ€rele ja otsustasid need Minecraftis taasluua. Ka teil on vĂ”imalus meile kĂŒlla tulla, riskimata oma tervise ja raiskamata aega teel.
Sellega seoses kutsume kĂ”iki huvilisi meie serverisse minecraft.selectel.ru (kliendi versioon 1.15.2), kus on taasloodud andmekeskused Lillakas-1 ja Lillakas-2. Ăra unusta nĂ”ustuda tĂ€iendavate ressursside allalaadimisega, need on vajalikud mĂ”nede asukohtade korrektseks kuvamiseks.
Teid ootavad seiklused, sooduskoodid, "munad" ja meeldiv suhtlemine.
Allikas: habr.com
