Optimizimi i serverit Minecraft

Optimizimi i serverit Minecraft
Ne kemi tashmë në blogun tonë tha, si të krijoni serverin tuaj Minecraft, por kanë kaluar 5 vjet që atëherë dhe shumë kanë ndryshuar. Ne po ndajmë me ju mënyrat aktuale për të krijuar dhe optimizuar pjesën e serverit të një loje kaq të njohur.

Gjatë historisë së tij 9-vjeçare (duke llogaritur që nga data e lëshimit), Minecraft ka fituar një numër të mrekullueshëm fansash dhe urrejtësish si nga lojtarët e zakonshëm ashtu edhe nga geeks. Koncepti i thjeshtë i një bote të përbërë nga blloqe ka evoluar nga një formë e thjeshtë argëtimi në një medium universal për komunikimin dhe krijimin e objekteve të ndryshme nga bota reale.

Përveç ndërtimit, loja ka aftësinë për të krijuar logjikës, të cilat ju lejojnë të zbatoni algoritme të plota brenda Minecraft. YouTube është plot me video shumë mbresëlënëse ku njerëzit, duke bërë një përpjekje të madhe dhe duke shpenzuar shumë kohë, kanë krijuar një kopje të kësaj apo asaj pajisjeje elektronike ose kanë ndërtuar një kopje të detajuar ekzistuese и fiktive strukturat arkitekturore. Gjithçka kufizohet vetëm nga imagjinata e lojtarit dhe mundësitë e universit të lojërave.


Por le të mos flasim më tej se çfarë saktësisht krijojnë lojtarët, por le të shohim pjesën e serverit të aplikacionit dhe të nxjerrim në pah problemet (ndonjëherë shumë komplekse) që mund të lindin gjatë funksionimit nën ngarkesë. Le të bëjmë një rezervim menjëherë se do të flasim vetëm për versionin Java.

Llojet e serverëve

Opsioni më i thjeshtë është një server i integruar në klientin e lojës. Ne krijuam një botë, shtypëm një buton dhe serveri u bë i aksesueshëm përmes rrjetit lokal. Ky opsion nuk mund të përballojë ndonjë ngarkesë serioze, dhe për këtë arsye ne as nuk do ta konsiderojmë atë.

Vanilje

Mojang Studios po shpërndan falas pjesën e serverit të lojës si një aplikacion Java në faqen zyrtare. Kjo ju lejon të krijoni tuajin server i dedikuar dhe botën personale, duke e bërë atë të aksesueshme për lidhje nga kudo në planet. Për ata që po e bëjnë këtë për herë të parë, ka një gjë të madhe tutorial, i disponueshëm në Wiki-in përkatës të lojrave.

Kjo qasje ka një pengesë serioze, përkatësisht mungesën e aftësive jashtë kutisë për të lidhur shtojcat që zgjerojnë funksionalitetin e serverit dhe lejojnë jo vetëm automatizimin e shumë proceseve, por edhe optimizimin e performancës. Për më tepër, serveri zyrtar ka një konsum mjaft të madh RAM për çdo lojtar të lidhur.

bukkit

Një aplikacion serveri i krijuar nga entuziastët bazuar në versionin Vanilla bukkit zgjeroi ndjeshëm aftësitë e lojës duke mbështetur shtojcat dhe modalitetet (modifikimet). Ai lejoi jo vetëm të shtonte blloqe të reja në lojë, por edhe të kryente manipulime të ndryshme që ishin të paarritshme për softuerin e vaniljes. Është interesante se ky aplikacion kërkonte dukshëm më pak memorie.

Instalimi i Bukkit nuk është i vështirë; udhëzimet përkatëse janë në burim LojaPedia. Por kjo nuk ka kuptim, pasi që nga viti 2014 ekipi i Bukkit është shpërndarë, zhvilluesit e projektit janë bërë punonjës të Mojang Studios, dhe depo i braktisur. Kështu, Bukkit është efektivisht i vdekur dhe ka kuptim t'i kushtohet vëmendje dy projekteve të ardhshme.

SpigotMC

Për ta bërë jetën më të lehtë për zhvilluesit e shtojcave, kishte nevojë për një API për të bashkëvepruar me botën e lojës. Ky është pikërisht problemi që zgjidhën krijuesit. duq, duke marrë thelbin e Bukkit dhe duke e ripunuar atë për të arritur besueshmëri dhe performancë më të mirë. Megjithatë, Depoja e Git projekti u bllokua për shkak të Aktit Dixhital të Mijëvjeçarit për të Drejtat e Autorit (P dhe P), dhe është e pamundur të shkarkosh kodin burim nga atje.

Aktualisht, SpigotMC është zhvilluar dhe përdoret në mënyrë aktive. Ai mbështet të gjitha shtojcat e krijuara për Bukkit, por nuk është në përputhje me të. Për të kapërcyer DMCA Takedown, u shpik një metodë elegante e quajtur BuildTools. Ky mjet eliminon nevojën për të shpërndarë një aplikacion të përpiluar dhe i lejon përdoruesit të përpilojnë Spigot, CraftBukkit dhe Bukkit nga kodi burimor. E gjithë kjo e bën të padobishme ndalimin e DMCA.

LetërMC

Gjithçka dukej e lezetshme dhe Spigot u bë një opsion i shkëlqyeshëm. Por kjo nuk mjaftoi për disa entuziastë dhe ata krijuan pirunin e tyre të Spigot "në steroid". Aktiv faqe projekti Avantazhi kryesor është se "Është budallaqe e shpejtë". Zhvilluar komunitetit ju lejon të zgjidhni shpejt çështjet në zhvillim, dhe API i zgjeruar ju lejon të krijoni shtojca interesante. Ju mund të nisni PaperMC me një komandë të thjeshtë, të dhënë në dokumentacionin.

PaperMC ka përputhshmëri të shkëlqyer, kështu që shtojcat e shkruara për SpigotMC mund të funksionojnë lehtësisht në PaperMC, por pa mbështetje zyrtare. Përputhshmëria e prapambetur me SpigotMC është gjithashtu e pranishme. Tani që kemi renditur opsionet e ndryshme për krijimin e një serveri, le të kalojmë te problemet e performancës që mund të lindin.

Problemet dhe Zgjidhjet

Gjëja kryesore që duhet të kuptoni është se gjithçka që lidhet me përpunimin e botës së lojës do të përpunohet vetëm në një bërthamë kompjuterike të serverit fizik. Pra, nëse papritmas keni një server të shkëlqyer me një duzinë bërthamash kompjuterike, atëherë vetëm një do të ngarkohet. Të gjithë të tjerët do të jenë praktikisht boshe. Kjo është arkitektura e aplikacionit dhe nuk mund të bëni asgjë për të. Pra, kur zgjidhni një server, duhet t'i kushtoni vëmendje jo numrit të bërthamave, por frekuencës së orës. Sa më i lartë të jetë, aq më i mirë do të jetë performanca.

Përsa i përket çështjes së kapacitetit të RAM-it, duhet të vijojmë nga treguesit e mëposhtëm:

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

Duhet mbajtur mend se një aplikacion Java gjithmonë ka nevojë për një rezervë RAM. Nëse prisni një konsum memorie prej 8 gigabajt, atëherë në fakt duhet të keni 12. Numrat janë relative, por thelbi nuk ndryshon.

Për të nisur pjesën e serverit, ne rekomandojmë përdorimin e flamujve të specifikuar në artikull Akordimi i flamujve të mbledhësit të mbeturinave JVM - G1GC për Minecraft. Kjo "magji e zezë" i lejon serverit të konfigurojë saktë "mbledhësin e mbeturinave" dhe të optimizojë përdorimin e RAM-it. Ju nuk duhet të ndani më shumë memorie sesa serveri konsumon në të vërtetë gjatë fluksit maksimal të lojtarëve.

Gjenerimi i një harte blloku

"A mendoni vërtet se hëna ekziston vetëm kur e shikoni atë?" (Albert Einstein)

Server komplet i ri. Sapo lojtari lidhet me sukses për herë të parë, personazhi i lojës shfaqet në pikën e përgjithshme të grumbullimit (pjellja). Ky është i vetmi vend ku bota e lojës është krijuar paraprakisht nga serveri. Në të njëjtin moment, pjesa e klientit shikon cilësimet, dhe parametri kryesor është distanca e vizatimit. Ajo matet në copa (zona e hartës është 16×16 dhe 256 blloqe të larta).

Serveri ruan një hartë globale të botës, dhe nëse nuk ka ende blloqe të krijuara në të në pikën e shfaqjes së karakterit të lojës, atëherë serveri i gjeneron ato në mënyrë dinamike dhe i ruan ato. Kjo jo vetëm që kërkon burime të mëdha kompjuterike, por gjithashtu rrit vazhdimisht madhësinë e hartës botërore. Në një nga serverët më të vjetër anarkistë 2b2t (2builders2tools) Madhësia e hartës tashmë ka tejkaluar 8 Tb, dhe kufiri i botës është rreth 30 milion blloqe. Ka mijëra histori që lidhen me këtë server dhe ai meriton artikullin e tij në seri.

Krijimi i një bote rreth një lojtari nuk është problem. Krijimi i një bote rreth qindra lojtarëve do të shkaktojë ngadalësime të vogla të serverit për një kohë të shkurtër, pas së cilës ngarkesa do të ulet. Krijimi i një bote në distancën e paraqitjes së klientit rreth një mijë lojtarë tashmë është në gjendje të "heqë" serverin dhe të nxjerrë të gjithë klientët jashtë tij për shkak të një afati kohor.

Në softuerin e serverit ekziston një vlerë si p.sh TPS (Ticks per Server - ticks per second). Normalisht, 1 cikël orësh është i barabartë me 50 ms. (1 sekondë e botës reale është e barabartë me 20 rriqra të botës së lojës). Nëse përpunimi i një tik-tak rritet në 60 sekonda, aplikacioni i serverit do të mbyllet, duke hedhur jashtë të gjithë lojtarët.

Zgjidhja është të kufizohet bota në koordinata të caktuara dhe të kryhet gjenerimi paraprak i bllokut. Kështu, ne heqim nevojën për gjenerim dinamik gjatë lojës dhe serverit do t'i duhet vetëm të lexojë një hartë ekzistuese. Të dyja çështjet mund të zgjidhen me një shtesë të vetme Kufiri Botëror.

Mënyra më e lehtë është të vendosni kufirin e botës në formën e një rrethi në lidhje me pikën e pjelljes (megjithëse mund ta bëni atë të çdo forme) me një urdhër:

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

Nëse personazhi i lojtarit përpiqet të kalojë kufirin, ai do të shtyhet pas disa blloqe. Nëse kjo bëhet disa herë brenda një kohe të kufizuar, shkelësi do të teleportohet me forcë në pikën e pjelljes. Para-gjenerimi i botës bëhet edhe më thjeshtë, me komandën:

/wb fill

Meqenëse ky veprim mund të prekë lojtarët në server, sigurohuni që të konfirmoni:

/wb confirm

Në total, u deshën rreth 5000 orë për të gjeneruar një botë me një rreze prej 40 blloqesh (~2 miliardë blloqe) në një procesor Intel® Xeon® Gold 6240. Prandaj, nëse doni të gjeneroni paraprakisht një hartë më të madhe, kini parasysh se ky proces do të marrë një kohë të mirë, dhe serveri TPS do të reduktohet seriozisht. Gjithashtu, mbani mend se edhe një rreze prej 5000 blloqesh do të kërkojë afërsisht 2 GB hapësirë ​​në disk.

Përkundër faktit se versioni më i fundit i shtojcës u zhvillua për versionin Minecraft 1.14, u zbulua eksperimentalisht se funksionon shkëlqyeshëm në versionet pasuese. Ekziston një listë e plotë e komandave me shpjegime në forumin e shtojcave.

Blloqet e problemeve

Ka një larmi të madhe blloqesh në Minecraft. Sidoqoftë, ne dëshirojmë të tërheqim vëmendjen e lexuesve në një bllok të tillë si TNT. Siç sugjeron emri, ky bllok është një eksploziv (shënim i redaktorit - ky është një artikull loje i botës virtuale dhe ky artikull nuk ka asgjë me eksplozivë të vërtetë). E veçanta e tij është e tillë që në momentin e aktivizimit fillon të veprojë forca e gravitetit. Kjo e detyron serverin të llogarisë të gjitha koordinatat nëse në këtë moment blloku fillon të bjerë.

Nëse ka disa blloqe TNT, atëherë shpërthimi i një blloku shkakton shpërthim dhe aktivizimin e gravitetit në 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 të llogaritur trajektoren e secilit bllok, si dhe ndërveprim me blloqet fqinje. Detyra është jashtëzakonisht intensive me burime, të cilën kushdo mund ta kontrollojë lehtësisht. Gjeneroni dhe shpërtheni një kub nga blloqet TNT që është të paktën 30x30x30 në madhësi. Dhe nëse keni menduar se keni një kompjuter të mirë dhe të fuqishëm lojrash, keni gabuar shumë 😉

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

Optimizimi i serverit Minecraft
Një "eksperiment" i ngjashëm në një server me Intel® Xeon® Gold 6240 çoi në një rënie serioze të TPS dhe ngarkesë 80% të CPU gjatë gjithë kohës së shpërthimit të bllokut. Prandaj, nëse ndonjë lojtar është në gjendje ta bëjë këtë, atëherë problemi i performancës do të prekë të gjithë lojtarët në server.

Një opsion edhe më i ashpër - Kristalet e skajit. Nëse TNT megjithatë shpërthen në mënyrë sekuenciale, atëherë Kristalet Edge shpërthejnë të gjithë në të njëjtën kohë, gjë që në teori mund të ndalojë plotësisht funksionimin e aplikacionit të serverit.

Ky skenar mund të shmanget vetëm duke ndaluar plotësisht përdorimin e këtyre blloqeve në botën e lojës. Për shembull, duke përdorur shtojcën Garda Botërore. Ju lutemi vini re se kjo shtojcë në vetvete nuk funksionon pa një shtesë tjetër Redaktimi Botëror. Pra, instaloni WorldEdit së pari dhe më pas WorldGuard.

Përfundim

Menaxhimi i duhur i një serveri lojërash nuk është një detyrë e lehtë. Vështirësitë dhe performanca e zvogëluar do t'ju presin në çdo hap, veçanërisht nëse nuk merrni parasysh vetë mekanikën e lojës. Është e pamundur të parashikosh gjithçka, sepse lojtarët ndonjëherë mund të jenë shumë krijues në përpjekjen për të detyruar serverin të bëjë diçka për të cilën nuk ishte menduar. Vetëm një ekuilibër i arsyeshëm midis rreziqeve dhe kufizimeve të vendosura do t'i lejojë serverit të funksionojë vazhdimisht dhe të mos ulë performancën e tij në vlera kritike.

Gjatë karantinës, disa nga punonjësit tanë humbën zyrat e tyre të preferuara dhe vendosën t'i rikrijonin ato brenda Minecraft. Ju gjithashtu keni mundësinë të na vizitoni pa rrezikuar shëndetin tuaj ose duke humbur kohë në rrugë.

Për ta bërë këtë, ne i ftojmë të gjithë në serverin tonë minecraft.selectel.ru (versioni i klientit 1.15.2), ku u rikrijuan qendrat e të dhënave Tsvetochnaya-1 dhe Tsvetochnaya-2. Mos harroni të pranoni të shkarkoni burime shtesë, ato janë të nevojshme për shfaqjen e saktë të disa vendndodhjeve.

Kërkimet, kodet promocionale, vezët e Pashkëve dhe komunikimi i këndshëm ju presin.

Burimi: www.habr.com

Shto një koment