Minecraft zerbitzariaren optimizazioa

Minecraft zerbitzariaren optimizazioa
Gure blogean dagoeneko badugu esan, nola sortu zure Minecraft zerbitzaria, baina 5 urte pasa dira ordutik eta asko aldatu da. Hain joko ezagun baten zerbitzariaren zatia sortzeko eta optimizatzeko egungo moduak partekatzen ari gara zurekin.

Bere 9 urteko historian (argitaratze datatik zenbatzen hasita), Minecraft-ek zale eta gorroto ugari irabazi ditu jokalari arrunten eta geeken artean. Blokeez osatutako munduaren kontzeptu sinplea entretenimendu forma soil batetik mundu errealeko hainbat objektu komunikatzeko eta sortzeko bitarteko unibertsal izatera igaro da.

Eraikuntzaz gain, jokoak sortzeko gaitasuna du logika, Minecraft barruan algoritmo osoak ezartzeko aukera ematen dutenak. YouTube oso bideo ikusgarriz beteta dago, non jendeak, esfortzu handia egin eta denbora asko eman ondoren, gailu elektroniko honen edo besteren kopia bat sortu edo kopia zehatza egin duen. dauden и вымышленных egitura arkitektonikoak. Dena bakarrik mugatzen da jokalariaren irudimenak eta joko unibertsoaren aukerek.


Baina ez dezagun gehiago hitz egin jokalariek zer sortzen duten zehazki, baina ikus ditzagun aplikazioaren zerbitzariaren zatia eta nabarmendu ditzagun kargapean funtzionatzerakoan sor daitezkeen arazoak (batzuetan oso konplexuak). Egin dezagun erreserba berehala, Java edizioari buruz bakarrik hitz egingo dugulako.

Zerbitzari motak

Aukerarik errazena jokoaren bezeroan integratutako zerbitzari bat da. Mundu bat sortu genuen, botoi bat sakatu eta zerbitzaria sare lokalaren bidez eskuragarri bihurtu zen. Aukera honek ezin du karga larririk jasan, eta, beraz, ez dugu kontuan hartuko.

Vanilla

Mojang Studios jokoaren zerbitzariaren zatia Java aplikazio gisa banatzen ari da doan webgune ofizialean. Horrek zurea sortzeko aukera ematen dizu zerbitzari dedikatua eta mundu pertsonala, planetako edozein lekutatik konektatzeko erabilgarri bihurtuz. Lehenengo aldiz hau egiten ari direnentzat, handia dago tutoretza, dagokion jokoaren Wikian eskuragarri.

У этого подхода есть один серьезный недостаток, а именно — отсутствие возможностей «из коробки» подключать плагины, расширяющие функционал сервера и позволяющие не только автоматизировать многие процессы, но и оптимизировать производительность. Кроме того, у официального сервера достаточно большое потребление оперативной памяти на каждого подключенного игрока.

bukkit

Vanilla bertsioan oinarritutako zaleek sortutako zerbitzari-aplikazioa bukkit jokoaren gaitasunak nabarmen zabaldu zituen pluginak eta modak (aldaketak) lagunduta. Jokatzeko bloke berriak gehitzeaz gain, bainila softwarerako eskuraezinak ziren hainbat manipulazio egiteko aukera ematen zuen. Interesgarria da aplikazio honek memoria askoz gutxiago behar zuela.

Bukkit instalatzea ez da zaila; dagozkion argibideak baliabidean daude GamePedia. Baina horrek ez du zentzurik, 2014az geroztik Bukkit taldea desegin denez, proiektuaren garatzaileak Mojang Studios-en langile bihurtu dira, eta biltegia abandonatu. Horrela, Bukkit hilda dago, eta zentzuzkoa da hurrengo bi proiektuei arreta jartzea.

SpigotMC

Pluginen garatzaileei bizitza errazteko, jokoen munduarekin elkarreragiteko API baten beharra zegoen. Hau da, hain zuzen, sortzaileek konpondu zuten arazoa. spigot, Bukkit nukleoa hartu eta berriro lantzea fidagarritasun eta errendimendu hobea lortzeko. Hala ere, Git biltegia proiektua blokeatu egin zen Digital Millennium Copyright Act delako (DMCA), eta ezinezkoa da hortik iturburu kodea deskargatzea.

Gaur egun, SpigotMC aktiboki garatu eta erabiltzen da. Bukkit-erako sortutako plugin guztiak onartzen ditu, baina ez da horrekin bateragarria. DMCA Takedown-a inguratzeko, BuildTools izeneko metodo dotore bat asmatu zen. Tresna honek konpilatutako aplikazio bat banatzeko beharra ezabatzen du eta erabiltzaileei Spigot, CraftBukkit eta Bukkit iturburu-kodetik konpilatzeko aukera ematen die. Horrek guztiak alferrikakoa egiten du DMCA debekua.

PaperMC

Dena polita zirudien, eta Spigot aukera bikaina bihurtu zen. Baina hori ez zen nahikoa zaletu batzuentzat, eta Spigot-en sardexka propioa sortu zuten "esteroideetan". On proiektuaren orria abantaila gakoa "Azkarra ergela da". Garatua komunitatea sortzen ari diren arazoak azkar konpontzeko aukera ematen du, eta API hedatuak plugin interesgarriak sortzeko aukera ematen du. PaperMC abiarazi dezakezu komando sinple batekin, emandakoa dokumentazioa.

PaperMC-k bateragarritasun bikaina du, beraz, SpigotMC-rako idatzitako pluginek erraz funtziona dezakete PaperMC-en, baina laguntza ofizialik gabe. SpigotMC-rekin atzerako bateragarritasuna ere badago. Zerbitzari bat sortzeko aukera ezberdinak zerrendatu ditugunez, joan gaitezen sor daitezkeen errendimendu-arazoetara.

Arazoak eta irtenbideak

Ulertu behar duzun gauza nagusia da jokoaren mundua prozesatzearekin zerikusia duen guztia zerbitzari fisikoko informatika-nukleo batean bakarrik prozesatuko dela. Beraz, bat-batean dozena bat konputazio nukleo dituen zerbitzari bikaina baduzu, bakarra kargatuko da. Beste guztiak ia alferrik egongo dira. Hau da aplikazioaren arkitektura, eta ezin duzu ezer egin. Beraz, zerbitzari bat aukeratzerakoan, arreta jarri behar duzu ez nukleo kopuruari, baizik eta erlojuaren maiztasunari. Zenbat eta altuagoa izan, orduan eta errendimendua hobea izango da.

RAM gaitasunaren gaiari dagokionez, adierazle hauetatik abiatu beharko genuke:

  • aurreikusitako jokalari kopurua;
  • zerbitzarian aurreikusitako mundu kopurua;
  • mundu bakoitzaren tamaina.

Gogoratu behar da Java aplikazio batek beti behar duela RAM erreserba bat. 8 gigabyteko memoria-kontsumoa espero baduzu, 12 izan behar dituzu. Zenbakiak erlatiboak dira, baina funtsa ez da aldatzen.

Zerbitzariaren zatia hasteko, artikuluan zehaztutako banderak erabiltzea gomendatzen dugu JVM - G1GC Garbage Collector Flags sintonizatzea Minecrafterako. "Magia beltz" honek zerbitzariari "zabor biltzailea" behar bezala konfiguratzeko eta RAMaren erabilera optimizatzeko aukera ematen dio. Ez zenuke esleitu behar zerbitzariak benetan kontsumitzen duen baino memoria gehiago jokalarien uholdeen garaian.

Blokeen mapa sortzea

"Benetan uste al duzu ilargia begiratzen duzunean bakarrik existitzen dela?" (Albert Einstein)

Zerbitzari guztiz berria. Jokalariak lehen aldiz konektatu bezain laster, jokoaren pertsonaia biltzeko puntu orokorrean (sorkuntza) agertzen da. Hau da zerbitzariak jokoaren mundua aurrez sortzen duen leku bakarra. Momentu berean, bezeroaren zatiak ezarpenei begiratzen die eta funtsezko parametroa marrazketa distantzia da. Zatitan neurtzen da (maparen eremua 16×16 eta 256 blokeko altuera du).Zenbat zati adierazita dago zenbat eskatuko zaizkion zerbitzariari.

Zerbitzariak munduko mapa global bat gordetzen du, eta jokoaren pertsonaia agertzen den unean oraindik sortutako blokerik ez badago, zerbitzariak dinamikoki sortzen ditu eta gordetzen ditu. Honek baliabide informatiko handiak behar izateaz gain, munduko maparen tamaina etengabe handitzen du. Zerbitzari anarkista zaharrenetako batean 2b2t (2builders2tools) Maparen tamainak 8 Tb gainditu ditu jada, eta munduko muga 30 milioi bloke ingurukoa da. Zerbitzari honekin lotutako milaka istorio daude eta serieko artikulu propioa merezi du.

Jokalari baten inguruan mundu bat sortzea ez da arazoa. Ehunka jokalariren inguruan mundu bat sortzeak zerbitzariaren moteltze txikiak eragingo ditu denbora laburrean, eta ondoren karga gutxituko da. Mila jokalari inguru bezeroak errendatzeko distantzian mundu bat sortzea dagoeneko gai da zerbitzaria "jaregin" eta bezero guztiak bertatik botatzeko denbora-muga baten ondorioz.

Zerbitzariaren softwarean, esaterako, balio bat dago TPS (Zerbitzari bakoitzeko ticks - ticks segundoko). Normalean, 1 erloju-ziklo 50 ms-ren berdina da. (Mundu errealeko segundo 1 jokoaren munduko 20 tickren berdina da). Tick ​​baten prozesamendua 60 segundora igotzen bada, zerbitzariaren aplikazioa itxi egingo da, jokalari guztiak botaz.

Konponbidea mundua koordenatu batzuetara mugatzea eta aurretiazko blokeen sorrera egitea da. Horrela, jokoan zehar belaunaldi dinamikoaren beharra kentzen dugu, eta zerbitzariak lehendik dagoen mapa bat bakarrik irakurri beharko du. Arazo biak plugin bakar batekin konpondu daitezke MunduMuga.

Modurik errazena munduaren muga zirkulu baten forman ezartzea da sortze puntuarekiko (edozein forma egin dezakezun arren) komando batekin:

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

Jokalari pertsonaia muga zeharkatzen saiatzen bada, hainbat bloke atzera botako du. Denbora mugatu batean hainbat aldiz egiten bada, delitugilea indarrez teleportatuko da sorkuntza puntura. Munduaren aurreko belaunaldia are sinpleago egiten da, komandoarekin:

/wb fill

Ekintza honek zerbitzariko jokalariei eragin diezaiekeenez, ziurtatu baieztatu:

/wb confirm

Guztira, gutxi gorabehera 5000 ordu behar izan zituen Intel® Xeon® Gold 40 prozesadore batean 2 blokeko (~6240 milioi bloke) erradioa duen mundu bat sortzeko. Horregatik, mapa handiagoa aldez aurretik sortu nahi baduzu, kontuan izan prozesu honek denbora dezente hartuko du, eta zerbitzari TPS larriki murriztuko da. Gainera, gogoratu 5000 blokeko erradioak ere 2 GB gutxi gorabehera diskoko espazioa beharko duela.

Pluginaren azken bertsioa Minecraft 1.14 bertsiorako garatu zen arren, esperimentalki ondoko bertsioetan ondo funtzionatzen duela ikusi zen. Komandoen zerrenda osoa azalpenekin dago eskuragarri на форуме плагина.

Arazo blokeak

Minecraft-en bloke ugari daude. Hala ere, irakurleen arreta erakarri nahi dugu horrelako bloke bati buruz TNT. Izenak dioen bezala, bloke hau lehergailua da (editorearen oharra - mundu birtualeko joko-elementua da eta elementu honek ez du ezer benetako lehergailuekin). Bere berezitasuna aktibatzeko unean grabitatearen indarra eragiten hasten da. Horrek zerbitzaria koordenatu guztiak kalkulatzera behartzen du une honetan blokea erortzen hasten bada.

Hainbat TNT bloke badaude, bloke baten detonazioak detonazioa eta grabitatearen aktibazioa eragiten du ondoko blokeetan, norabide guztietan barreiatzen. Zerbitzariaren aldean mekanika eder honek guztiak bloke bakoitzaren ibilbidea kalkulatzeko eragiketa asko dirudi, baita ondoko blokeekin elkarrekintza ere. Zereginak baliabide asko ditu, edonork erraz egiaztatu dezakeena. Sortu eta detonatu kubo bat gutxienez 30x30x30 tamaina duen TNT blokeetatik. Eta joko-ordenagailu on eta indartsu bat duzula uste bazenuen, oso oker zaude 😉

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

Minecraft zerbitzariaren optimizazioa
Intel® Xeon® Gold 6240-rekin zerbitzari batean antzeko "esperimentu" batek TPS jaitsiera larria ekarri zuen eta %80ko CPU karga ekarri zuen blokeen detonazio-denbora osoan zehar. Hori dela eta, edozein jokalari hau egiteko gai bada, errendimendu-arazoak zerbitzariko jokalari guztiei eragingo die.

Aukera are gogorragoa - Ertz kristalak. TNT, hala ere, sekuentzialki lehertzen bada, Edge Kristalak aldi berean lehertzen dira, eta horrek zerbitzariaren aplikazioaren funtzionamendua erabat geldi dezake teorian.

Eszenatoki hau jokoaren munduan bloke hauen erabilera erabat debekatuta soilik saihestu daiteke. Adibidez, plugina erabiliz WorldGuard. Kontuan izan plugin honek berez ez duela funtzionatzen beste pluginik gabe MunduaEdit. Beraz, instalatu WorldEdit lehenik, eta gero WorldGuard.

Ondorioa

Joko zerbitzari bat behar bezala kudeatzea ez da lan erraza. Zailtasunak eta errendimendu gutxitzea itxarongo zaituzte une bakoitzean, batez ere jokatzeko mekanika bera kontuan hartzen ez baduzu. Ezinezkoa da dena aurreikustea, jokalariak batzuetan oso sortzaileak izan daitezkeelako zerbitzaria behartu nahi izan ez zuen zerbait egitera. Arriskuen eta ezarritako murrizketen arteko oreka zentzuzko batek soilik ahalbidetuko du zerbitzariak etengabe funtzionatzea eta ez du bere errendimendua balio kritikoetara murriztea.

Berrogeialdian, gure langile batzuek euren bulego gogokoenak galdu zituzten eta Minecraft barruan birsortzea erabaki zuten. Zure osasuna arriskuan jarri gabe edo errepidean denbora galdu gabe bisitatzera etortzeko aukera ere baduzu.

Horretarako, denak gonbidatzen ditugu gure zerbitzarira minecraft.selectel.ru (1.15.2 bezeroaren bertsioa), non Tsvetochnaya-1 eta Tsvetochnaya-2 datu-zentroak birsortu ziren. Ez ahaztu baliabide gehigarriak deskargatzea onartzea, beharrezkoak dira kokapen batzuk zuzen bistaratzeko.

Bilaketak, promozio kodeak, Pazko arrautzak eta komunikazio atsegina zain dituzu.

Iturria: www.habr.com

Gehitu iruzkin berria