
Në blogun tonë ne tashmë , si të krijoni serverin tuaj Minecraft, megjithatë kanë kaluar 5 vjet dhe shumë ka ndryshuar. Po ndajmë me ju mënyrat aktuale për të krijuar dhe optimizuar pjesën server të kësaj loje kaq të njohur.
Gjatë 9 viteve të tij të historisë (nëse e llogarisim nga data e lansimit), Minecraft ka fituar një numër të madh adhuruesish dhe kritikësh si midis lojtarëve të zakonshëm ashtu edhe midis geek-ëve. Koncepti i thjeshtë i një bote prej kubesh është transformuar nga një argëtim i zakonshëm në një mjedis universal për komunikim dhe krijimin e objekteve të ndryshme nga bota reale.
Përveç ndërtimit, loja ofron mundësinë për të krijuar , të cilat lejojnë realizimin e algoritmeve të plota brenda Minecraft. Në YouTube ka plot video shumë mbresëlënëse, ku njerëzit, duke përdorur një sasi të madhe energjie dhe duke shpenzuar shumë kohë, kanë krijuar kopje të pajisjeve elektronike ose kanë ndërtuar një kopje të detajuar dhe veprave arkitektonike. Të gjitha kufizohen vetëm nga imagjinata e lojtarit dhe mundësitë e universit të lojës.

Por mos të flasim më për atë që krijojnë lojtarët, por le të hedhim një vështrim në pjesën server të aplikacionit dhe të ndriçojmë problemet (ndonjëherë shumë të komplikuara) që mund të shfaqen gjatë punës nën ngarkesë. Menjëherë duhet të sqarojmë se biseda do të jetë vetëm për Java Edition.
Llojet e serverëve
Opsioni më i thjeshtë është serveri i integruar në klientin e lojës. Krijoni një botë, klikoni një buton dhe ja, serveri bëhet i Disponueshëm për rrjetin lokal. Ky opsion nuk mund të përballojë ngarkesa të rënda, prandaj nuk do ta shqyrtojmë atë.
Vanilla
Kompania Mojang Studios ndan pjesën server të lojës si një aplikacion Java falas . Kjo lejon krijimin e botës tuaj dhe personale, duke e bërë atë të disponueshme për lidhje nga çdo pikë e planetit. Për ata që e bëjnë këtë për herë të parë, ka një , të disponueshme në Wiki të lojës përkatëse.
Ky qasje ka një mangësi të rëndësishme, pikërisht — mungesën e mundësive "nga kutia" për të lidhur shtesa, të cilat zgjeruan funksionalitetin e serverit dhe lejojnë jo vetëm automatizimin e shumë proceseve, por gjithashtu optimizimin e performancës. Për më tepër, serveri zyrtar ka një konsum të konsiderueshëm të memories RAM për çdo lojtar të lidhur.
Bukkit
Një aplikacion serveri i krijuar nga entuziastët mbi versionin Vanilla ka zgjeruar ndjeshëm mundësitë e lojës përmes mbështetjes së pluginave dhe modifikimeve. Ai lejon jo vetëm shtimin e bllokave të reja në procesin e lojës, por gjithashtu të kryhen manipulime të ndryshme, të cilat nuk ishin të disponueshme në softuerin Vanilla. E habitshme, ky aplikacion kërkoi shumë më pak memorie.
Instalimi i Bukkit nuk është shumë i vështirë, udhëzimi përkatës është në burimin . 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 është braktisur. Kështu, Bukkit është faktikisht i vdekur, dhe ka sens të kthehesh në dy projektet e ardhshme.
SpigotMC
Për të lehtësuar jetën e zhvilluesve të pluginave, ishte e nevojshme një API për ndërveprimin me botën e lojës. Kjo detyrë e morën përsipër krijuesit e , duke marrë si bazë bërthamën e Bukkit dhe duke e përpunuar atë për të arritur një besueshmëri dhe performancë më të mirë. Megjithatë, projekti u bllokua për shkak të Ligjit për të Drejtat e Autorit në Epokën Digjitale (), dhe nënshkrimi i kodit burimor është i pamundur.
Në këtë moment, SpigotMC po zhvillohet aktivisht dhe përdoret. Ai mbështet të gjitha pluginat e krijuara për Bukkit, megjithatë nuk është i përputhshëm me të. Për të anashkaluar ndalimin e DMCA Takedown, u shpik një mënyrë elegante e quajtur BuildTools. Ky mjet e eliminon nevojën për shpërndarjen e aplikacionit të kompiluar dhe lejon përdoruesit të kryejnë kompilimin e Spigot, CraftBukkit dhe Bukkit nga kodi burimor. E gjithë kjo e bën ndalimin e DMCA të panevojshëm.
PaperMC
Duket se gjithçka është në rregull, dhe Spigot u bë një opsion i shkëlqyer. Por disa entuziastë e ndoqën dhe krijuan forkun e tyre të Spigot “në steroide”. Në avantazhin kryesor është thënë se “Është jashtëzakonisht e shpejtë”. Komuniteti i përkushtuar lejon që të zgjidhni shpejt problemet që lindin, dhe API e avancuar — të krijoni plug-in të shkëlqyer. Duke e drejtuar PaperMC mund të bëhet me një komandë të thjeshtë, e cila jepet në .
PaperMC ka pajisni është i shkëlqyer, kështu që pluginët e shkruar për SpigotMC do të funksionojnë gjithashtu lehtësisht në PaperMC, por pa përkrahje zyrtare. Ka gjithashtu përkrahje për kthim në SpigotMC. Tani, pasi kemi përmendur opsionet e ndryshme për krijimin e serverëve, le të kalojmë në problemet e produktivitetit që mund të lindin.
Problemet dhe zgjidhjet
Gjithçka 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ërpunohet vetëm në një bërthamë të vetme të serverit fizik. Pra, nëse ndonjëherë keni një server të shkëlqyer me dhjetë bërthama përpunimi, vetëm njëra do të ngarkohet. Të gjitha të tjerat do të jenë në fakt të papërdorura. Kjo është arkitektura e aplikacionit dhe nuk mund të bëni asgjë për të. Pra, kur zgjidhni një server, duhet të përqendroheni jo në numrin e bërthamave, por në frekuencën e taktim. Sa më e lartë të jetë ajo, aq më e mirë do të jetë performanca.
Sa i përket çështjes së sasisë së memorie RAM, duhet të bazohemi në shifrat e mëposhtme:
- numri i planifikuar i lojtarëve;
- numri i planifikuar i botëve në server;
- madhësia e secilës botë.
Duhet të mbani në mend se aplikacioni Java gjithmonë kërkon një rezervë në memorie RAM. Nëse planifikoni një konsum të memories prej 8 gigabajt, në fakt duhet të keni 12. Numrat janë të përafërt, por thelbi mbetet i njëjtë.
Për të nisur pjesën server, rekomandojmë të përdorni flamujt e përmendur në artikullin . Kjo "magji e zezë" i lejon serverit të konfigurojë në mënyrë korrekte "grumbulluesin e plehrave" dhe optimizon përdorimin e memories RAM. Mos u jepni më shumë memorie se sa realisht konsumon serveri gjatë fluksit më të lartë të lojtarëve.
Gjenrimi i hartës së blloqeve
"A e mendoni vërtet se Luna ekziston vetëm kur ju shikoni në të?" (Albert Einstein)
Server krejtësisht i ri. Pasi që lojtari lidhet me sukses për herë të parë, personazhi i lojës shfaqet në pikën e përbashkët të mbledhjes (spawn). Ky është vendi i vetëm ku bota e lojës generohet paraprakisht nga serveri. Në këtë moment, ana klienti shikon në cilësimet, dhe një parametr kyç është distanca e vizatimit. Kjo matet në chunks (zona e hartës 16×16 dhe lartësia 256 blloqe). Sa më shumë chunks të jenë të specifikuara, aq më shumë do të kërkohen nga serveri.
Në server ndodhet një hartë globale e botës, dhe nëse aty nuk ka blloqe të gjeneruara në pikën e shfaqjes së personazhit lojë, serveri i gjeneron ato dinamikisht dhe i ruan. Jo vetëm që kjo kërkon burime të mëdha llogaritëse, por gjithashtu vazhdimisht rrit madhësinë e hartës së botës. Në një nga serverët më të vjetër anarkikë (2builders2tools) madhësia e hartës ka kaluar tashmë 8 Tb, dhe kufiri i botës ndodhet në shifrën 30 milion blloqe. Ky server është i lidhur me mijëra histori dhe meriton një artikull të veçantë ose një seri artikujsh.
Gjenarimi i botës përreth një lojtari nuk është problem. Gjenarimi i botës përreth njëqind 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ë bjerë. Gjenarimi i botës në distancën e vizionit të klientit rreth një mijë lojtarëve mund të 'rrëzojë' serverin dhe t’i heqë të gjithë klientët për shkak të kohës së mbarimit.
Në softuerin e serverit ekziston një vlerë të quajtur TPS (Ticks per Server — takt në sekondë). Normalisht 1 takt është i barabartë me 50 ms. (1 sekondë në botën reale është e barabartë me 20 takt në botën e lojës). Nëse përpunimi i një takt rritet në 60 sekonda — aplikacioni i serverit do të mbyllet, duke hequr të gjithë lojtarët.
Zgjidhja është të kufizoni botën në disa koordinata dhe të kryeni një gjenerim paraprak të blloqeve. Në këtë mënyrë ne eliminojmë nevojën për gjenerim dinamik gjatë lojës, dhe serveri do të mjaftojë të lexojë hartën ekzistuese. Të dy çështjet zgjidhen nga një plugin të vetme .
Më lehtë është të vendosni kufirin e botës në formën e një rrethi në lidhje me pikën e shfaqjes (edhe pse mund ta bëni atë në çdo formë) me një komandë:
/wb set <радиус в блоках> spawnNëse personazhi i lojës përpiqet të kalojë kufirin, ai do të kthehet disa blloqe prapa. Nëse e bën këtë disa herë brenda një kohe të kufizuar, shkelësi do të teleportohet me forcë në pikën e shfaqjes. Gjenerimi paraprak i botës kryhet akoma më thjeshtë, me komandën:
/wb fillDuke qenë se kjo veprim potencialisht mund të prekur lojtarët që janë në server, mos harroni të konfirmoni përfundimin:
/wb confirmPër të gjeneruar një botë me rreze 5000 blloqe (~40 miliard blloqe), nevojiten rreth 2 orë në procesorin Intel® Xeon® Gold 6240. Prandaj, nëse dëshironi të nisni gjenerimin e një harte më të madhe, merrni parasysh se ky proces do të marrë një kohë të konsiderueshme, dhe TPS i serverit do të bjerë ndjeshëm. Gjithashtu, mbani mend se edhe një rreze prej 5000 blloqesh do të kërkojë rreth 2 GB hapësirë në disk.
Megjithëse versioni më i fundit i plugin-it është zhvilluar për Minecraft versionin 1.14, është zbuluar se funksionon shumë mirë edhe në versionet e mëtejshme. Lista e plotë e komandave me shpjegime është e disponueshme .
Blloqet problematike
Ka shumë lloje blloqesh në Minecraft. Megjithatë, ne do të dëshironim të ndalemi te një bllok i tillë si TNT. Siç tregohet nga emri, ky bllok është një eksploziv (vërejtje e redaksisë - ky është një produkt i lojës virtuale dhe nuk ka lidhje me eksplozivët realë). Karakteristika e tij është se në momentin e aktivizimit, mbi të vepron forca e gravitetit. 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, shpërthimi i një blloku shkakton shpërthimin dhe aktivizimin e gravitetit të blloqeve fqinj, duke i shpërndarë ato në të gjitha drejtimet. E gjithë kjo mekanikë e bukur nga ana e serverit duket si shumë operacione për llogaritjen e trajektoreve të çdo blloku, si dhe ndërveprimin me blloqet fqinj. Kjo detyrë është jashtëzakonisht e kërkuar për burime, dhe është e lehtë për t'u provuar nga kushdo. Gjeneroni dhe shkatërroni një kub me blloqe TNT, të paktën 30x30x30. Dhe nëse mendoni se keni një kompjuter të fuqishëm gaming, po gaboni rëndë 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Një 'eksperiment' i tillë në një server me Intel® Xeon® Gold 6240 çoi në një rënie të konsiderueshme të TPS dhe një ngarkesë prej 80% në CPU gjatë gjithë kohës së shpërthimeve të blloqeve. Prandaj, nëse ndonjë nga lojtarët arrin ta realizojë një gjë të tillë, problemi i performancës do të prekë të gjithë lojtarët e pranishëm në server.
Një variant edhe më ekstrem është Kristalet e Fundit. Nëse TNT shpërthen radhazi, Kristalet e Fundit shpërthejnë të gjitha në të njëjtën kohë, që në teori mund të ndalojë plotësisht aktivitetin e aplikacionit të serverit.
Për të shmangur këtë skenar, është e nevojshme të ndaloni plotësisht përdorimin e këtyre blloqeve në botën e lojës. Për shembull, duke përdorur një plug-in . Vini re se ky plug-in nuk funksionon vetëm ai vetë pa një plug-in tjetër . Pra, instaloni fillimisht WorldEdit dhe pastaj WorldGuard.
Përfundimi
Menaxhimi i duhur i një serveri loje është një detyrë e vështirë. Vështirësitë dhe ulja e performancës do t'ju presin në çdo hap, veçanërisht nëse nuk merrni parasysh vetë mekanikën e lojës. Të parashikosh gjithçka është e pamundur, pasi lojtarët ndonjëherë janë shumë të krijueshëm në përpjekjen për të detyruar serverin të kryejë atë për të cilin nuk është dizajnuar. Vetëm një balancë e arsyeshme midis rreziqeve dhe kufizimeve të vendosura do ta lejojë serverin të punojë në mënyrë të vazhdueshme dhe të mos ulë performancën e tij në nivele kritike.
Në karantinë disa nga punonjësit tanë u përmallën për zyrat e tyre të preferuara dhe vendosën t'i rindërtojnë ato brenda Minecraft. Edhe ju keni mundësinë të na vizitoni, pa rrezikuar shëndetin tuaj dhe pa e humbur kohën në udhëtime.
Për këtë, ftojmë të gjithë të interesuarit në serverin tonë minecraft.selectel.ru (versioni klientit 1.15.2), ku janë rinovuar qendrat të të dhënave Zhvillues 1 dhe Zhvillues 2. Mos harhoni të pranoni shkarkimin e burimeve shtesë, ato janë të nevojshme për paraqitjen e saktë të disa vendeve.
Ju presin quest-e, kode promocionale, "veçori të fshehura" dhe biseda të këndshme.
Burimi: habr.com
