Optimizimi i serverit Minecraft

Optimizimi i serverit Minecraft
Në blogun tonë tashmë treguam, si të krijoni serverin tuaj Minecraft, megjithatë kanë kaluar 5 vjet që atëherë dhe shumë gjëra kanë ndryshuar. Po ndajmë me ju mënyrat aktuale të krijimit dhe optimizimit të serverit për këtë lojë kaq të njohur.

Në historinë e saj 9-vjeçare (nëse e numërojmë nga data e lëshimit), Minecraft ka fituar një numër të madh adhuruesish dhe kritikësh si nga lojtarët e zakonshëm ashtu edhe nga gikat. Koncepti i thjeshtë i një bote prej kubesh është transformuar nga një argëtim i zakonshëm në një mjedis universalisht për komunikim dhe krijim të objekteve të ndryshme nga bota reale.

Përveç ndërtimit, në lojë ka mundësi të krijoni skema logjike, të cilat mundësojnë realizimin e algoritmeve të plota brenda Minecraft. Në YouTube ka një sasi të madhe videosh shumë mbresëlënëse, ku njerëz, duke investuar një sasi të madhe energjie dhe duke kaluar shumë kohë, kanë krijuar një kopje të këtij apo atij aparati elektik ose kanë ndërtuar një kopje të detajuar të strukturave dhe imagjinare arkitekturore. Të gjitha kufizohen vetëm nga fantazia e lojtarit dhe mundësitë e universit të lojës.

Luaj videon

Por le të mos flasim më tej për atë që krijojnë lojtarët, por të shqyrtojmë pjesën server të aplikacionit dhe të hedhim dritë mbi problemet (në disa raste mjaft të ndërlikuara) që mund të lindin në procesin e punës nën ngarkesë. Të sqarojmë menjëherë se do të flasim vetëm për Java Edition.

Llojet e serverëve

Mundësia më e thjeshtë është serveri i integruar në klientin e lojës. Krijuat një botë, e shtypët një buton, dhe ja, serveri është i disponueshëm në rrjetin lokal. Ky lloj variante nuk mund të përballojë një ngarkesë serioze, prandaj nuk do ta shqyrtojmë atë.

Vanilë

Kompania Mojang Studios shpërndan pjesën server të lojës si një aplikacion Java falas në faqen zyrtare. Kjo lejon krijimin e botës suaj server i dedikuar dhe personale, duke e bërë atë të disponueshme për të lidhur nga çdo pikë të planetit. Për ata që e bëjnë këtë për herë të parë, ka një fantastike tutorial, e cila është e disponueshme në Wiki-n përkatëse të lojës.

Ky qasje ka një disavantazh të madh, dhe ajo është — mungesa e mundësive "nga kutia" për të lidhur shtesa, që zgjeron funksionalitetin e serverit dhe lejon automatizimin e shumë proceseve, si dhe optimizimin e performancës. Për më tepër, serveri zyrtar ka një konsum relativisht të lartë të memorjes operative për çdo lojtar të lidhur.

Bukkit

Aplikacija serverit e krijuar nga entuziastë mbi bazën e versionit Vanilla Bukkit ka zgjeruar ndjeshëm mundësitë e lojës duke mbështetur plug-ins dhe modifikime. Ajo lejon jo vetëm shtimin e blloqeve të rinj në procesin e lojës, por gjithashtu kryerjen e manipulimeve të ndryshme që nuk ishin të disponueshme me softuerin vanilla. E veçanta është se kjo aplikacion kërkonte shumë më pak memorie.

Instalimi i Bukkit është i thjeshtë, udhëzimi përkatës është i disponueshëm në burim GamePedia. Por kjo nuk ka kuptim, pasi nga viti 2014 ekipi Bukkit u shpërnda, zhvilluesit e projektit u bënë bashkëpunëtorë të Mojang Studios, dhe repozitori u braktis. Kështu, Bukkit përfundimisht është i vdekur, dhe ka kuptim të kushtoni vëmendje dy projekteve të tjera.

SpigotMC

Për të lehtësuar jetën e zhvilluesve të plug-ins, ishte e nevojshme një API për ndërveprimin me botën e lojës. Këtë detyrë e zgjidhën krijuesit e Spigot, duke marrë si bazë kernelin e Bukkit dhe duke e ripunuar atë për të arritur një besueshmëri dhe performancë më të mirë. Megjithatë, Git-repozitorin projekti u bllokua për shkak të Ligjit për të Drejtat e Autorit në Epokën Digjitale (DMCA), dhe nuk është e mundur të shkarkosh kodin burim.

Në këtë moment, SpigotMC po zhvillohet aktivisht dhe përdoret. Ai mbështet të gjitha plug-ins e krijuara për Bukkit, por nuk është e përshtatshme për përdorim të kundërt. Për të anashkaluar ndalimin e DMCA Takedown, u shpik një mënyrë elegante e quajtur BuildTools. Ky mjet eliminon nevojën për shpërndarje të aplikacioneve të kompiluar dhe lejon përdoruesit të kryejnë kompilimin e Spigot, CraftBukkit dhe Bukkit nga kodi burimor. Të gjitha këto e bëjnë ndalimin DMCA të paefektshëm.

PaperMC

Duket sikur gjithçka është në rregull, dhe Spigot u bë një opsion i shkëlqyer. Por disa entuziastë e gjetën këtë të pamjaftueshme dhe krijuan fork-un e tyre të Spigot «në steroide». Në faqen e projektit pikat kyçe theksohet se “është jashtëzakonisht i shpejtë”. Komuniteti i zhvilluar lejon zgjidhjen e shpejtë të problemeve që shfaqen, ndërsa API e zgjeruar lejon krijimin e plug-ins interesante. Të nisësh PaperMC mund të bëhet me një urdhër të thjeshtë, i cituar në lejon që të zgjidhni shpejt pyetjet që lindin, dhe API i zgjeruar — të krijoni plugina interesante. Të nisni PaperMC mund të bëhet me një komandë të thjeshtë, e cila është dokumentacionin.

Me përshtatshmërinë e PaperMC, gjithçka është në rregull, kështu që pluginat e shkruar për SpigotMC do të funksionojnë lehtësisht edhe në PaperMC, por pa mbështetje zyrtare. Ndërkohë, janë të pranishme gjithashtu përputhshmëria e prapme me SpigotMC. Tani, pasi renditëm varianta të ndryshme për krijimin e serverit, le të kalojmë te problemet e performancës që mund të shfaqen.

Problemet dhe zgjidhjet

E rëndësishmja që duhet të kuptoni është se çdo gjë që ka të bëjë me përpunimin e botës së lojës do të përpunojë vetëm në një bërthamë të vetme shkencore fizike të serverit. Pra, nëse ndonjëherë keni një server të shkëlqyer me dhjetë bërthama të llogaritjes, vetëm njëra do të jetë e ngarkuar. Të gjitha të tjerat do të jenë faktikisht të papërdorura. Kjo është arkitektura e aplikacionit, dhe nuk mund të bëni asgjë për këtë. Prandaj, kur zgjidhni një server, duhet të njihni jo numrin e bërthamave, por frekuencën e taktimeve. Sa më e lartë të jetë, aq më mirë do të jetë performanca.

Sa i përket pyetjes për sasinë e RAM-it, kjo duhet të bazohet në treguesit e mëposhtëm:

  • numri i parashikuar i lojtarëve;
  • numri i parashikuar i botëve në server;
  • madhësia e çdo bote.

Duhet të mbani mend se një aplikacion Java gjithmonë ka nevojë për një rezervë të RAM-it. Nëse pret ndihmën deri në 8 gigabajt, në fakt duhet të keni 12. Numrat janë të kushtëzuar, por thelbi nuk ndryshon.

Për të ç aktivizuar serverin, rekomandojmë të përdorni flamujt e shënuar në artikullin Tuning the JVM – G1GC Garbage Collector Flags for Minecraft. Kjo "magji e zezë" lejon serverin të konfigurojë në mënyrë të duhur "kolektorin e plehrave" dhe optimizon përdorimin e RAM-it. Nuk duhet të ndahen më shumë memorje sesa realisht konsumon serveri gjatë fluksit më të madh të lojtarëve.

Gjenerimi i hartës së bllokut

"A e konsideroni vërtet se Hëna ekziston vetëm kur e shihni atë?" (Albert Einstein)

Serveri i ri absolut. Sapo që lojtarët lidhen për herë të parë me sukses, personazhi shfaqet në një pikë të përbashkët grumbullimi (spawn). Ky është vendi i vetëm ku bota e lojës generohet paraprakisht nga serveri. Në këtë moment, ana klientike shikon në konfigurime, dhe parametri kyç është distanca e vizualizimit. Ajo matet në chunks (zona e hartës 16×16 dhe me lartësi prej 256 bllokesh). Sa më shumë chunks të jenë të specifikuara, aq më shumë do të kërkohen nga serveri.

Në server ruhet harta globale e botës, dhe nëse nuk ka blloqe të gjeneruara në pikën e shfaqjes së personazhit, atëherë serveri i gjeneron ato dinamikisht dhe i ruan. Jo vetëm që kjo kërkon burime të mëdha llogaritëse, por gjithashtu vazhdon të rritë madhësinë e hartës së botës. Në një nga serverët më të vjetër anarkikë 2b2t (2builders2tools) madhësia e hartës ka tejkaluar 8 TB, dhe kufiri i botës kalon në shenjën e 30 milion bllokesh. Ky server lidhet me mijëra histori dhe meriton një artikull të veçantë ose serinë e artikujve.

Gjenerimi i botës rreth një lojtari nuk është problem. Gjenerimi i botës rreth qindra lojtarëve do të shkaktojë vonesa të vogla në server për një periudhë të shkurtër, pas së cilës ngarkesa do të ulet. Gjenerimi i botës në distancën e vizualizimit të klientit rreth një mijë lojtarëve tashmë mund të "rrëzojë" serverin dhe të përjashtojë të gjithë klientët nga 'timeout'.

Në softuerin e serverit ka një vlerë të tillë si TPS (Ticks per Server - cicërima për sekondë). Zakonisht, 1 cikël është baraz 50 ms. (1 sekondë në botën reale është baraz 20 cicërimave në botën e lojës). Nëse përpunimi i një cikli rritet në 60 sekonda — aplikacioni i serverit do të mbyllet, duke përjashtuar të gjithë lojtarët.

Zgjidhja - kufizoni botën me koordinata të caktuara dhe kryeni një para-gjenerim të blloqeve. Kështu ne heqim nevojën për gjenerim dinamik gjatë lojës, dhe serveri mjafton të lexojë hartën ekzistuese. Të dy çështjet zgjidhen me një plugin të vetëm WorldBorder.

Më e lehtë është të caktoni kufirin e botës në formën e një rrethi rreth pikës së shfaqjes (ndonëse mund ta bëni atë në çdo formë) me një komandë:

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

Nëse personazhi i lojës përpiqet të kalojë kufirin, do të rrethohet disa blloqe mbrapa. Nëse kjo bëhet disa herë brenda një kohe të caktuar, shkelësi do të teleportohet me forcë në pikën e spawns. Gjenerimi paraprak i botës kryhet shumë më lehtë, me komandën:

/wb fill

Duke qenë se kjo veprim mund të preki potencialisht lojtarët që ndodhen në server, mos harroni të konfirmoni ekzekutimin:

/wb confirm

Në total, për të gjeneruar një botë me një rreze prej 5000 blloqesh (~40 miliard blloqesh) iu deshën rreth 2 orë në procesorin Intel® Xeon® Gold 6240. Prandaj, nëse dëshironi të filloni një pre-gjenerim të një mapë më të madhe, mbani parasysh se ky proces do të marrë një kohë të konsiderueshme, dhe TPS i serverit do të ulet ndjeshëm. Gjithashtu, mbani mend se edhe një rreze prej 5000 blloqesh kërkon rreth 2GB hapësirë në disk.

Megjithëse versioni ekstreme i plugin-it është zhvilluar për versionin 1.14 të Minecraft, është vërtetuar përmes përvojës se funksionon mirë edhe në versionet pasuese. Një listë e plotë e komandave me shpjegime është e disponueshme në forumin e plugin-it.

Blloqet problematike

Ka shumë lloje blloqesh në Minecraft. Megjithatë, do të dëshironim të fokusoheshim te një bllok, siç është TNT. Siç tregohet nga emri, ky bllok përfaqëson një eksploziv (shënim redaksional - ky është një artikull loje në botën virtuale dhe nuk ka asnjë lidhje me eksplozivët e vërtetë). Karakteristika e tij është se në momentin e aktivizimit, forca e gravitetit fillon të veprojë mbi të. Kjo bën që serveri të llogarisë të gjitha koordinatat, nëse në atë moment blloku fillon të bie.

Nëse ka disa blloqe TNT, detonimi i një blloku shkakton detonimin dhe aktivizimin e gravitetit te blloqet fqinje, duke i shpërndarë ato në të gjitha drejtimet. E gjithë kjo mekanikë e bukur në anën e serverit duket si shumë operacione për llogaritjen e trajektoreve të çdo blloku, si dhe ndërveprimin me blloqet fqinje. Detyra është jashtëzakonisht e kërkuar për burime, që çdo kush mund ta verifikojë lehtësisht. Gjeneroni dhe shpërtheni një kub me blloqe TNT, me një madhësi prej të paktën 30x30x30. Dhe nëse mendonit se keni një kompjuter të fuqishëm për lojë, po e ndjeni shumë keq 😉

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

Optimizimi i serverit Minecraft
Një "eksperiment" i tillë në një server me Intel® Xeon® Gold 6240 çoi në një rënie serioze të TPS dhe një ngarkesë 80% të CPU gjatë gjithë kohës së shpërthimit të blloqeve. Pra, nëse ndonjë nga lojtarët arrin të bëjë diçka të tillë, problemi me performancën do të prekë të gjithë lojtarët që janë në server.

Një variant edhe më të ashpër — Kristalet e Fundit. Nëse TNT shpërthen në mënyrë të renditur, atëherë Kristalet e Fundit do të shpërthejnë të gjitha njëkohësisht, gjë që teorikisht mund ta ndalojë plotësisht aplikacionin e serverit.

Për të shmangur këtë skenar, mund të ndaloni plotësisht përdorimin e këtyre blloqeve në botën e lojës. Për shembull, duke përdorur një plugin WorldGuard. Kushtojini vëmendje, ky plugin vetë nuk funksionon pa një plugin tjetër WorldEdit. Pra, instaloni së pari WorldEdit dhe pastaj WorldGuard.

Përfundim

Menaxhimi i duhur i një serveri të lojës është një detyrë jo e lehtë. Sfidat dhe uljet në performancë do t'i presin në çdo hap, veçanërisht nëse nuk merret parasysh vetë mekanika e lojës. Të parashikosh gjithçka është e pamundur, sepse lojtarët ndonjëherë janë shumë shpikës në përpjekjet për të detyruar serverin të bëjë atë për çfarë nuk ishte të krijuar. Vetëm një balancim të arsyeshëm mes rreziqeve dhe kufizimeve të vendosura do të lejojë serverin të punojë në një mënyrë të pandërprerë dhe të mos ulet performanca e tij në nivele kritike.

Në karantinë disa nga punonjësit tanë u mërzitën për zyrat e tyre të preferuara dhe vendosën t'i rigjenerojnë ato brenda Minecraft. Ju gjithashtu keni mundësinë të na vizitoni, pa rrezikuar shëndetin tuaj dhe pa humbur kohë në rrugë.

Për këtë, ftojmë të gjithë të interesuarit në serverin tonë minecraft.selectel.ru (versioni i klientit 1.15.2), ku janë rikrijuar qendrat e të dhënave Flower-1 dhe Flower-2. Mos harroni të pranoni shkarkimin e burimeve shtesë, ato janë të nevojshme për shfaqjen e saktë të disa lokaleve.

Ju presin misione, kodet promocionale, "pashkët" dhe bisedë të këndshme.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster