Optimalizácia servera Minecraft

Optimalizácia servera Minecraft
Na našom blogu sme už rozprávali, ako vytvoriť svoj server Minecraft, avšak odvtedy uplynulo 5 rokov a veľa sa zmenilo. Zdieľame s vami aktuálne spôsoby vytvárania a optimalizácie serverovej časti tejto populárnej hry.

Počas svojej 9-ročnej histórie (ak počítame od dátumu vydania) Minecraft získal ohromné množstvo fanúšikov aj kritikov, ako medzi bežnými hráčmi, tak i geekmi. Jednoduchá koncepcia sveta z kociek sa z obyčajnej zábavy premenila na univerzálne prostredie pre komunikáciu a vytváranie rôznych objektov z reálneho sveta.

Okrem stavania, hra ponúka možnosť vytvárať logické schémy, ktoré umožňujú realizovať plnohodnotné algoritmy vnútri Minecraftu. Na YouTube je množstvo veľmi pôsobivých videí, kde ľudia, vynaložením obrovského množstva energie a času, vytvorili kópiu toho-ktorého elektronického zariadenia alebo podrobne zrekonštruovali existujúce a vymyslené architektonické diela. Všetko sa obmedzuje len na fantáziu hráča a možnosti herného vesmíru.

Prehrajte video

Ale nebudeme sa zbytočne rozprávať o tom, čo presne hráči vytvárajú, a pozrime sa na serverovú časť aplikácie a osvetlíme problémy (niekedy dosť zložité), ktoré môžu vzniknúť počas prevádzky pod záťažou. Hneď na začiatku si vyjasníme, že debatovať budeme iba o Java Edition.

Typy serverov

Najjednoduchšou voľbou je server zabudovaný do klienta hry. Vytvorili ste svet, stlačili ste jedno tlačidlo a server bol dostupný cez lokálnu sieť. Takáto možnosť nevydrží žiadne vážne zaťaženie, a preto ju nebudeme ani zvažovať.

Vanilka

Spoločnosť Mojang Studios distribuuje serverovú časť hry vo forme Java aplikácie zadarmo na oficiálnych stránkach. To umožňuje vytvoriť si vlastný vyhradený server a osobný svet, ktorý je dostupný na pripojenie z akejkoľvek časti planéty. Pre tých, ktorí to robia prvýkrát, je k dispozícii skvelý tutoriál, ktorý je dostupný v príslušnej hernej Wiki.

Tento prístup má jednu vážnu nevýhodu, a to je — nedostatok možností pripojiť plug-iny, ktoré rozširujú funkčnosť servera a umožňujú nielen automatizovať mnohé procesy, ale aj optimalizovať výkon. Okrem toho oficiálny server spotrebuje pomerne veľa pamäte RAM na každého pripojeného hráča.

Bukkit

Serverová aplikácia vytvorená nadšencami na báze verzie Vanilla Bukkit výrazne rozširovala možnosti hry vďaka podpore plug-inov a modov (modifikácií). Umožnilo to nielen pridávať do herného procesu nové bloky, ale aj vykonávať rôzne manipulácie, ktoré neboli dostupné vo vanilkovom softvéri. Zaujímavé je, že táto aplikácia vyžadovala omnoho menej pamäte.

Nainštalovať Bukkit nie je žiadny problém, príslušný návod je na zdroji GamePedia. Ale to vôbec nedáva zmysel, keďže od roku 2014 sa tím Bukkit rozpadol, vývojári projektu sa stali zamestnancami Mojang Studios, a repozitár bol opustený. Tým pádom je Bukkit fakticky mŕtvy, a má zmysel zamerať sa na dva nasledujúce projekty.

SpigotMC

Pre zjednodušenie života vývojárov plug-inov potrebovali API na interakciu s herným svetom. Presne tento cieľ splnili tvorcovia Spigot, pričom vychádzali z jadra Bukkit a prepracovali ho na dosiahnutie lepšej spoľahlivosti a výkonu. Napriek tomu, Git-repozitár projekt bol zablokovaný v súlade so Zákonom o autorských právach v digitálnom veku (DMCA), a nie je možné stiahnuť zdrojové kódy.

V súčasnosti sa SpigotMC aktívne vyvíja a používa. Podporuje všetky plug-iny vytvorené pre Bukkit, avšak nie je späť kompatibilný. Aby sa obídenie zákazu DMCA Takedown, bolo vyvinuté elegantné riešenie nazvané BuildTools. Tento nástroj eliminuje potrebu distribúcie skompilovanej aplikácie a umožňuje používateľom vykonať kompiláciu Spigot, CraftBukkit a Bukkit zo zdrojového kódu. To všetko robí zákaz DMCA zbytočným.

PaperMC

Zdalo by sa, že všetko je skvelé, a Spigot sa stal vynikajúcou voľbou. Ale niektorým nadšencom to prišlo málo, a tak vytvorili svoj vlastný fork Spigot „na steroidoch“. Na stránke projektu kľúčovom prínose je uvedené, že „je to hlúpo rýchle“. Rozvinutá komunita umožňuje rýchlo riešiť vznikajúce problémy a rozšírené API umožňuje vytvárať zaujímavé pluginy. Spustiť PaperMC môžete jedným jednoduchým príkazom uvedeným v dokumenácie.

S kompatibilitou je na PaperMC všetko v poriadku, takže pluginy napísané pre SpigotMC budú ľahko fungovať aj na PaperMC, ale bez oficiálnej podpory. Spätná kompatibilita so SpigotMC je tiež prítomná. Teraz, keď sme vymenovali rôzne možnosti vytvorenia servera, prejdeme k otázkam výkonu, ktoré sa môžu vyskytnúť.

Problémy a riešenia

Hlavná vec, ktorú treba chápať, je, že všetko, čo súvisí so spracovaním herného sveta, bude spracovávané iba na jednom výpočtovom jadre fyzického servera. Takže ak máte skvelý server s desiatkami výpočtových jadier, bude zaťažené iba jedno. Všetky ostatné budú prakticky nečinné. Taká je architektúra aplikácie a s tým nič neurobíte. Preto pri výbere servera by ste sa mali sústrediť nie na počet jadier, ale na taktnú frekvenciu. Čím bude vyššia, tým lepší bude výkon.

Čo sa týka otázky objemu operačnej pamäte, tu by ste mali vychádzať z nasledujúcich ukazovateľov:

  • plánovaný počet hráčov;
  • plánovaný počet svetov na serveri;
  • veľkosť každého sveta.

Treba pamätať na to, že Java aplikácie vždy potrebujú rezervu v operačnej pamäti. Ak počítate s použitím pamäte na úrovni 8 gigabajtov, v skutočnosti by ste mali mať 12. Čísla sú orientačné, ale podstata sa nemení.

Pre spustenie serverovej časti odporúčame využiť vlajky uvedené v článku Tuning the JVM – G1GC Garbage Collector Flags for Minecraft. Táto "čierna mágia" umožňuje serveru správne nastaviť "garbage collector" a optimalizovať využitie operačnej pamäte. Nenechávajte pridelenú pamäť vyššiu, než skutočne server potrebuje pri špičkovom zaťažení hráčov.

Generácia mapy blokov

„Naozaj si myslíte, že Mesiac existuje len vtedy, keď naň pozeráte?“ (Albert Einstein)

Úplne nový server. Keď sa hráč prvýkrát úspešne pripojí, herná postava sa objaví na spoločnej zbernej ploche (spawne). Je to jediné miesto, kde je herný svet predgenerovaný serverom. V tom momente sa klientská časť pozrie do nastavení, pričom kľúčovým parametrom je vzdialenosť vykresľovania. Meria sa v chunk-och (oblasť mapy 16×16 a výškou 256 blokov). Koľko chunk-ov tam je uvedených, toľko ich bude požiadaneé od servera.

Na serveri sa nachádza globálna mapa sveta, a ak v nej ešte nie sú vygenerované bloky v bode objavenia hernej postavy, server ich dynamicky generuje a uchováva. Požiadavka na veľké výpočtové zdroje nielenže neustále zvyšuje veľkosť mapy sveta. 2b2t (2builders2tools) Veľkosť mapy už presiahla 8 TB a hranica sveta prechádza na úrovni 30 miliónov blokov. Tento server je spojený s tisíckami príbehov a zaslúži si samostatnú sériu článkov.

Generovanie sveta okolo jedného hráča nie je problém. Generovanie sveta okolo sto hráčov spôsobí krátkodobé menšie spomalenie servera, po čom sa zaťaženie zníži. Generovanie sveta na vzdialenosť vykresľovania klienta okolo tisíca hráčov už môže "zhodiť" server a vyhodiť všetkých klientov kvôli time-outu.

V serverovom softvéri existuje taká hodnota ako TPS (Ticks per Server — takty za sekundu). Štandardne 1 takt zodpovedá 50 ms (1 sekunda reálneho sveta zodpovedá 20 taktov herného sveta). Ak spracovanie jedného taktu narastie na 60 sekúnd, serverová aplikácia sa uzavrie, pričom vyhodí všetkých hráčov.

Riešením je obmedziť svet konkrétnymi súradnicami a vykonať predbežnú generáciu blokov. Tým sa odstráni potreba dynamickej generácie počas hry a serverovi stačí načítať už existujúcu mapu. Obe otázky sa riešia jedným jediným pluginom WorldBorder.

Najjednoduchšie je nastaviť hranicu sveta ako kruh okolo bodu spawnu (aj keď možno nastaviť akýkoľvek tvar) jedným príkazom:

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

Ak sa herná postava pokúsi prekročiť hranicu, bude odhodená o niekoľko blokov späť. Ak to urobí niekoľkokrát za obmedzený čas, porušovateľ bude nútene teleportovaný na respawnovací bod. Predbežná generácia sveta sa vykonáva ešte jednoduchšie, príkazom:

/wb fill

Keďže táto akcia môže potenciálne ovplyvniť hráčov na serveri, nezabudnite potvrdiť vykonanie:

/wb confirm

Celkovo trvalo generovanie sveta s polomerom 5000 blokov (~40 miliárd blokov) približne 2 hodiny na procesore Intel® Xeon® Gold 6240. Preto, ak chcete spustiť pre-generáciu väčšej mapy, vezmite do úvahy, že tento proces zaberie značné množstvo času, a TPS servera bude vážne znížené. Okrem toho pamätajte, že aj polomer 5000 blokov si vyžaduje približne 2 GB miesta na diskovom úložisku.

Aj keď bola posledná verzia pluginu vyvinutá pre verziu Minecraft 1.14, experimentálne sa zistilo, že perfektne funguje aj na neskorších verziách. Kompletný zoznam príkazov s vysvetleniami je k dispozícii na fóre pluginu.

Problémové bloky

Druhov blokov v Minecraft je ohromné množstvo. Avšak chceme upriamiť pozornosť čitateľov na taký blok, ako je TNT. Ako vyplýva z názvu, tento blok predstavuje výbušninu (poznámka redakcie - ide o herný predmet virtuálneho sveta a nemá nič spoločné so skutočnými výbušninami). Jeho špecifikou je, že v momente aktivácie naň začína pôsobiť sila gravitácie. To núti server vypočítať všetky koordináty, ak tento blok začne padať.

Ak je viac blokov TNT, detonácia jedného bloku spôsobí detonáciu a aktivovanie gravitácie u susedných blokov, rozptyľujúc ich všetkými smermi. Celá táto efektná mechanika na strane servera vyzerá ako množstvo operácií na výpočet trajektórií každého bloku, ako aj interakcií s susednými blokmi. Úloha je extrémne náročná na zdroje, čo si môže overiť každý. Vygenerujte a odpálte kocku z blokov TNT, veľkosti aspoň 30x30x30. A ak ste si mysleli, že máte dobrý výkonný herný počítač, veľmi ste sa mýlili 😉

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

Optimalizácia servera Minecraft
Podobný „experiment“ na serveri s Intel® Xeon® Gold 6240 viedol k vážnemu „poklesu“ TPS a 80% zaťaženiu CPU počas celej doby detonácie blokov. To znamená, že ak niekto z hráčov dokáže niečo podobné, problém s výkonom postihne všetkých hráčov na serveri.

Ešte prísnejšia varianta — Kryštály Krajiny. Ak TNT predsa len exploduje postupne, Kryštály Krajiny detonujú všetky naraz, čo teoreticky môže celkom zastaviť fungovanie serverovej aplikácie.

Tomuto scenáru sa možno vyhnúť iba úplným zákazom používania týchto blokov vo svete. Napríklad prostredníctvom pluginu WorldGuard. Upozorňujeme, že samotný tento plugin nefunguje bez iného pluginu WorldEdit. Takže najprv nainštalujte WorldEdit a potom WorldGuard.

Záver

Rozumné riadenie herného servera nie je jednoduchá úloha. Ťažkosti a zníženie výkonu vás budú čakať na každom kroku, najmä ak neberiete do úvahy samotnú mechaniku herného procesu. Predpokladať všetko je nemožné, pretože hráči bývajú niekedy veľmi vynaliezaví vo svojich pokusoch prinútiť server vykonať to, na čo nebol určený. Iba rozumná rovnováha medzi rizikami a nastavenými obmedzeniami umožní serveru fungovať bez prerušenia a udržať si výkon na prijateľných hodnotách.

Na karanténe sa niektorí naši zamestnanci posťažovali na svoje obľúbené kancelárie a rozhodli sa ich zrekonštruovať v Minecraft. Aj vy máte šancu prísť k nám na návštevu, bez rizika o svoje zdravie a bez straty času na cestu.

Na to pozývame všetkých záujemcov na náš server minecraft.selectel.ru (klientská verzia 1.15.2), kde sú zrekonštruované dátové centrá Kvety-1 a Kvety-2. Nezabudnite súhlasiť so stiahnutím ďalších zdrojov, sú potrebné na správne zobrazenie niektorých lokalít.

Čakajú vás questy, promo kódy, „veľkonočné vajíčka“ a príjemná konverzácia.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster