Minecraft servera optimizācija

Minecraft servera optimizācija
MÅ«su emuārā mēs jau esam stāstÄ«ja, kā izveidot savu Minecraft serveri, bet kopÅ” tā laika ir pagājuÅ”i 5 gadi un daudz kas ir mainÄ«jies. Mēs dalāmies ar jums paÅ”reizējiem veidiem, kā izveidot un optimizēt tik populāras spēles servera daļu.

Savas 9 gadu vēstures laikā (skaitot no izlaiÅ”anas datuma), Minecraft ir izpelnÄ«jies pārsteidzoÅ”u fanu un nÄ«dēju skaitu gan parasto spēlētāju, gan dÄ«Ä·u vidÅ«. VienkārŔā pasaules koncepcija, kas veidota no blokiem, ir attÄ«stÄ«jusies no vienkārÅ”as izklaides formas par universālu mediju saziņai un dažādu objektu radÄ«Å”anai no reālās pasaules.

Papildus konstrukcijai spēlei ir iespēja radÄ«t loÄ£ika, kas ļauj Minecraft iekÅ”ienē ieviest pilnvērtÄ«gus algoritmus. YouTube ir pilns ar ļoti iespaidÄ«giem video, kur cilvēki, pieliekot milzu pÅ«les un pavadot daudz laika, ir izveidojuÅ”i vienas vai citas elektroniskās ierÄ«ces kopiju vai izveidojuÅ”i detalizētu kopiju. esoÅ”o Šø izdomāts arhitektÅ«ras bÅ«ves. Visu ierobežo tikai spēlētāja iztēle un spēļu visuma iespējas.


Bet nerunāsim tālāk par to, ko tieÅ”i spēlētāji rada, bet apskatÄ«sim aplikācijas servera daļu un izcelsim problēmas (dažreiz ļoti sarežģītas), kas var rasties darbÄ«bas laikā ar slodzi. Uzreiz rezervēsim, ka runāsim tikai par Java izdevumu.

Serveru veidi

VienkārŔākā iespēja ir spēles klientā iebÅ«vēts serveris. Mēs izveidojām pasauli, nospiedām vienu pogu, un serveris kļuva pieejams vietējā tÄ«klā. Å Ä« iespēja nevar izturēt nopietnu slodzi, un tāpēc mēs to pat neapsvērsim.

Vaniļa

Mojang Studios bez maksas izplata spēles servera daļu kā Java lietojumprogrammu oficiālajā tīmekļa vietnē. Tas ļauj jums izveidot savu veltīts serveris un personīgā pasaule, padarot to pieejamu savienojumam no jebkuras planētas vietas. Tiem, kas to dara pirmo reizi, ir lieliska iespēja pamācība, pieejams attiecīgajā spēļu Wiki.

Å ai pieejai ir viens nopietns trÅ«kums, proti, gatavu iespēju trÅ«kums savienot spraudņus, kas paplaÅ”ina servera funkcionalitāti un ļauj ne tikai automatizēt daudzus procesus, bet arÄ« optimizēt veiktspēju. Turklāt oficiālajam serverim ir diezgan liels RAM patēriņŔ katram pievienotajam atskaņotājam.

bukkit

Servera lietojumprogramma, ko izveidojuÅ”i entuziasti, pamatojoties uz Vanilla versiju bukkit ievērojami paplaÅ”ināja spēles iespējas, atbalstot spraudņus un modifikācijas (modifikācijas). Tas ļāva ne tikai pievienot jaunus blokus spēlei, bet arÄ« veikt dažādas manipulācijas, kas nebija pieejamas vaniļas programmatÅ«rai. Interesanti, ka Å”ai lietojumprogrammai bija nepiecieÅ”ams ievērojami mazāk atmiņas.

Bukkit instalÄ“Å”ana nav grÅ«ta, attiecÄ«gās instrukcijas ir resursā GamePedia. Bet tam nav jēgas, jo kopÅ” 2014. gada Bukkit komanda ir izjukusi, projekta izstrādātāji ir kļuvuÅ”i par Mojang Studios darbiniekiem un krātuve pamesti. Tādējādi Bukkit faktiski ir miris, un ir jēga pievērst uzmanÄ«bu nākamajiem diviem projektiem.

SpigotMC

Lai atvieglotu spraudņu izstrādātāju dzÄ«vi, bija nepiecieÅ”ama API mijiedarbÄ«bai ar spēļu pasauli. TieÅ”i Å”o problēmu veidotāji atrisināja. Spiegu, izmantojot Bukkit kodolu un pārstrādājot to, lai panāktu labāku uzticamÄ«bu un veiktspēju. Tomēr, Git repozitorijs projekts tika bloķēts Digitālās tÅ«kstoÅ”gades autortiesÄ«bu likuma (DMCA), un no turienes nav iespējams lejupielādēt avota kodu.

Å obrÄ«d SpigotMC tiek aktÄ«vi izstrādāts un izmantots. Tas atbalsta visus Bukkit izveidotos spraudņus, taču nav ar to saderÄ«gs. Lai apietu DMCA noņemÅ”anu, tika izgudrota eleganta metode ar nosaukumu BuildTools. Å is rÄ«ks novērÅ” nepiecieÅ”amÄ«bu izplatÄ«t kompilētu lietojumprogrammu un ļauj lietotājiem kompilēt Spigot, CraftBukkit un Bukkit no pirmkoda. Tas viss padara DMCA aizliegumu bezjēdzÄ«gu.

PaperMC

Viss Ŕķita forÅ”i, un Spigot kļuva par lielisku iespēju. Bet dažiem entuziastiem ar to nepietika, un viņi izveidoja savu Spigot dakÅ”iņu ā€œuz steroÄ«diemā€. Ieslēgts projekta lapa galvenā priekÅ”rocÄ«ba ir tā, ka "tas ir stulbi ātri". Izstrādāts kopienai ļauj ātri atrisināt raduŔās problēmas, un paplaÅ”inātais API ļauj izveidot interesantus spraudņus. Varat palaist PaperMC ar vienu vienkārÅ”u komandu, kas norādÄ«ta dokumentācija.

PaperMC ir lieliska saderÄ«ba, tāpēc SpigotMC rakstÄ«tie spraudņi var viegli darboties PaperMC, taču bez oficiāla atbalsta. Ir pieejama arÄ« atpakaļejoÅ”a saderÄ«ba ar SpigotMC. Tagad, kad esam uzskaitÄ«juÅ”i dažādas servera izveides iespējas, pāriesim pie veiktspējas problēmām, kas var rasties.

Problēmas un risinājumi

Galvenais, kas jums jāsaprot, ir tas, ka viss, kas saistÄ«ts ar spēļu pasaules apstrādi, tiks apstrādāts tikai vienā fiziskā servera skaitļoÅ”anas kodolā. Tātad, ja pēkŔņi jums ir lielisks serveris ar duci skaitļoÅ”anas kodolu, tiks ielādēts tikai viens. Visi pārējie bÅ«s praktiski dÄ«kstāvē. Å Ä« ir lietojumprogrammas arhitektÅ«ra, un jÅ«s to nevarat darÄ«t. Tāpēc, izvēloties serveri, jums vajadzētu pievērst uzmanÄ«bu nevis kodolu skaitam, bet gan pulksteņa frekvencei. Jo augstāks tas ir, jo labāka bÅ«s veiktspēja.

Runājot par RAM ietilpību, mums jāvadās no Ŕādiem rādītājiem:

  • plānotais spēlētāju skaits;
  • plānotais pasauļu skaits serverÄ«;
  • katras pasaules lielums.

Jāatceras, ka Java lietojumprogrammai vienmēr ir nepiecieÅ”ama RAM rezerve. Ja sagaidāt, ka atmiņas patēriņŔ ir 8 gigabaiti, tad patiesÄ«bā tiem jābÅ«t 12. Skaitļi ir relatÄ«vi, bet bÅ«tÄ«ba nemainās.

Lai palaistu servera daļu, iesakām izmantot rakstā norādÄ«tos karogus JVM ā€” G1GC atkritumu savācēja karogu noregulÄ“Å”ana priekÅ” Minecraft. Å Ä« ā€œmelnā maÄ£ijaā€ ļauj serverim pareizi konfigurēt ā€œatkritumu savācējuā€ un optimizēt RAM izmantoÅ”anu. Maksimālā spēlētāju pieplÅ«duma laikā nevajadzētu pieŔķirt vairāk atmiņas, nekā serveris faktiski patērē.

Bloku kartes ģenerēŔana

"Vai jÅ«s tieŔām domājat, ka mēness pastāv tikai tad, kad uz to skatāties?" (Alberts EinÅ”teins)

PilnÄ«gi jauns serveris. TiklÄ«dz spēlētājs pirmo reizi veiksmÄ«gi pieslēdzas, spēles varonis parādās vispārējā pulcÄ“Å”anās punktā (nārstotā). Å Ä« ir vienÄ«gā vieta, kur serveris ir iepriekÅ” Ä£enerējis spēļu pasauli. Tajā paŔā brÄ«dÄ« klienta daļa aplÅ«ko iestatÄ«jumus, un galvenais parametrs ir zÄ«mÄ“Å”anas attālums. Tas tiek mērÄ«ts gabalos (kartes laukums ir 16Ɨ16 un 256 blokus augsts) Cik tur ir norādÄ«ti gabali, ir tieÅ”i tas, cik tie tiks pieprasÄ«ti no servera.

Serveris glabā globālo pasaules karti, un, ja spēles varoņa parādÄ«Å”anās brÄ«dÄ« tajā vēl nav Ä£enerētu bloku, tad serveris tos dinamiski Ä£enerē un saglabā. Tas ne tikai prasa lielus skaitļoÅ”anas resursus, bet arÄ« pastāvÄ«gi palielina pasaules kartes izmēru. Vienā no vecākajiem anarhistu serveriem 2b2t (2builders2tools) Kartes izmērs jau pārsniedzis 8 Tb, un pasaules robeža ir aptuveni 30 miljonu bloku attālumā. Ar Å”o serveri ir saistÄ«ti tÅ«kstoÅ”iem stāstu, un tas ir pelnÄ«jis savu rakstu sērijā.

RadÄ«t pasauli ap vienu spēlētāju nav problēma. Radot pasauli ap simtiem spēlētāju, uz Ä«su laiku tiks izraisÄ«ta neliela servera palēnināŔana, pēc kuras slodze samazināsies. Izveidojot pasauli klienta renderÄ“Å”anas attālumā ap tÅ«kstoÅ” spēlētājiem, jau ir iespējams ā€œizmestā€ serveri un visus klientus izmest no tā taimauta dēļ.

Servera programmatÅ«rā ir tāda vērtÄ«ba kā TPS (Ērces uz serveri - ērces sekundē). Parasti 1 pulksteņa cikls ir vienāds ar 50 ms. (1 sekunde no reālās pasaules ir vienāda ar 20 spēles pasaules atzÄ«mēm). Ja viena Ä·eksÄ«Å”a apstrāde palielinās lÄ«dz 60 sekundēm, servera lietojumprogramma tiks aizvērta, izmetot visus spēlētājus.

Risinājums ir ierobežot pasauli ar noteiktām koordinātām un veikt iepriekŔēju bloku Ä£enerÄ“Å”anu. Tādējādi mēs noņemam nepiecieÅ”amÄ«bu pēc dinamiskas Ä£enerÄ“Å”anas spēles laikā, un serverim bÅ«s tikai jālasa esoÅ”a karte. Abas problēmas var atrisināt ar vienu spraudni Pasaules robeža.

VienkārŔākais veids ir iestatīt pasaules robežu apļa formā attiecībā pret nārsta punktu (lai gan jūs varat to izveidot jebkurā formā) ar vienu komandu:

/wb set <рŠ°Š“Šøус Š² Š±Š»Š¾ŠŗŠ°Ń…> spawn

Ja spēlētāja varonis mēģinās Ŕķērsot robežu, viņŔ tiks atstumts vairākus blokus. Ja tas tiek darÄ«ts vairākas reizes ierobežotā laika posmā, pārkāpējs tiks piespiedu kārtā teleportēts uz nārsta punktu. Pasaules pirmsÄ£enerÄ“Å”ana tiek veikta vēl vienkārŔāk, ar komandu:

/wb fill

Tā kā Ŕī darbÄ«ba var ietekmēt servera spēlētājus, noteikti apstipriniet:

/wb confirm

Kopumā pasaules Ä£enerÄ“Å”ana ar 5000 bloku rādiusu (~40 miljardi bloku) ar IntelĀ® XeonĀ® Gold 2 procesoru aizņēma aptuveni 6240 stundas. Tāpēc, ja vēlaties iepriekÅ” Ä£enerēt lielāku karti, ņemiet vērā, ka Å”is process prasÄ«s pietiekami daudz laika, un servera TPS tiks nopietni samazināts. Tāpat atcerieties, ka pat 5000 bloku rādiusam bÅ«s nepiecieÅ”ami aptuveni 2 GB diska vietas.

Neskatoties uz to, ka jaunākā spraudņa versija tika izstrādāta Minecraft versijai 1.14, eksperimentāli tika konstatēts, ka tas lieliski darbojas nākamajās versijās. Ir pieejams pilns komandu saraksts ar paskaidrojumiem spraudņu forumā.

Problēmu bloki

Minecraft ir daudz dažādu bloku. Tomēr vēlamies vērst lasÄ«tāju uzmanÄ«bu uz tādu bloku kā TNT. Kā norāda nosaukums, Å”is bloks ir sprāgstviela (redaktora piezÄ«me - Å”is ir virtuālās pasaules spēles vienums, un Å”im vienumam nav nekā ar Ä«stām sprāgstvielām). Tā Ä«patnÄ«ba ir tāda, ka aktivizÄ“Å”anas brÄ«dÄ« uz to sāk darboties gravitācijas spēks. Tas liek serverim aprēķināt visas koordinātas, ja Å”ajā brÄ«dÄ« bloks sāk krist.

Ja ir vairāki trotila bloki, tad viena bloka detonācija izraisa detonāciju un gravitācijas aktivizÄ“Å”anos blakus esoÅ”ajos blokos, izkliedējot tos visos virzienos. Visa Ŕī skaistā mehānika servera pusē izskatās pēc daudzām operācijām, lai aprēķinātu katra bloka trajektoriju, kā arÄ« mijiedarbÄ«bu ar blakus esoÅ”ajiem blokiem. Uzdevums ir ārkārtÄ«gi resursietilpÄ«gs, ko ikviens var viegli pārbaudÄ«t. Izveidojiet un uzspridziniet kubu no TNT blokiem, kuru izmērs ir vismaz 30x30x30. Un, ja jÅ«s domājāt, ka jums ir labs, jaudÄ«gs spēļu dators, jÅ«s ļoti kļūdÄ«jāties šŸ˜‰

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

Minecraft servera optimizācija
LÄ«dzÄ«gs ā€œeksperimentsā€ serverÄ« ar IntelĀ® XeonĀ® Gold 6240 izraisÄ«ja nopietnu TPS kritumu un 80% CPU slodzi visā bloka detonācijas laikā. Tāpēc, ja kāds spēlētājs to spēj, veiktspējas problēma ietekmēs visus servera spēlētājus.

Vēl grūtāks variants - Malu kristāli. Ja TNT tomēr eksplodē secīgi, tad Edge Crystals detonē visi vienlaicīgi, kas teorētiski var pilnībā apturēt servera lietojumprogrammas darbību.

No Ŕī scenārija var izvairÄ«ties, tikai pilnÄ«bā aizliedzot Å”o bloku izmantoÅ”anu spēļu pasaulē. Piemēram, izmantojot spraudni Pasaules gvarde. LÅ«dzu, ņemiet vērā, ka Å”is spraudnis pats par sevi nedarbojas bez cita spraudņa Worldedit. Tāpēc vispirms instalējiet programmu WorldEdit un pēc tam WorldGuard.

Secinājums

Pareiza spēļu servera pārvaldÄ«ba nav viegls uzdevums. GrÅ«tÄ«bas un samazināta veiktspēja jÅ«s gaidÄ«s ik uz soļa, it Ä«paÅ”i, ja neņemat vērā paÅ”u spēles mehāniku. Visu nav iespējams paredzēt, jo spēlētāji dažkārt var bÅ«t ļoti radoÅ”i, mēģinot piespiest serveri darÄ«t kaut ko tādu, kam tas nebija paredzēts. Tikai saprātÄ«gs lÄ«dzsvars starp riskiem un noteiktajiem ierobežojumiem ļaus serverim darboties nepārtraukti un nesamazināt tā veiktspēju lÄ«dz kritiskajām vērtÄ«bām.

Karantīnas laikā daži no mūsu darbiniekiem palaida garām savus iecienītākos birojus un nolēma tos atjaunot Minecraft. Jums ir arī iespēja ierasties pie mums, neriskējot ar savu veselību un netērējot laiku ceļā.

Lai to izdarÄ«tu, mēs aicinām visus uz mÅ«su serveri minecraft.selectel.ru (klienta versija 1.15.2), kur tika atkārtoti izveidoti datu centri Tsvetochnaya-1 un Tsvetochnaya-2. Neaizmirstiet piekrist lejupielādēt papildu resursus, tie ir nepiecieÅ”ami dažu atraÅ”anās vietu pareizai attēloÅ”anai.

Jūs gaida uzdevumi, reklāmas kodi, Lieldienu olas un patīkama komunikācija.

Avots: www.habr.com

Pievieno komentāru