Optimalizácia servera Minecraft

Optimalizácia servera Minecraft
Na našom blogu už máme povedal, ako si vytvoriť svoj vlastný Minecraft server, no odvtedy prešlo 5 rokov a veľa sa zmenilo. Zdieľame s vami aktuálne spôsoby, ako vytvoriť a optimalizovať serverovú časť takejto populárnej hry.

Počas svojej 9-ročnej histórie (počítajúc od dátumu vydania) si Minecraft získal úžasný počet fanúšikov a neprajníkov medzi bežnými hráčmi aj geekami. Jednoduchý koncept sveta z kociek sa z jednoduchej formy zábavy vyvinul v univerzálne médium na komunikáciu a vytváranie rôznych predmetov z reálneho sveta.

Okrem stavby má hra schopnosť vytvárať logika, ktoré vám umožňujú implementovať plnohodnotné algoritmy v Minecrafte. YouTube je plný veľmi pôsobivých videí, kde ľudia, ktorí vynaložili obrovské množstvo úsilia a strávili veľa času, vytvorili kópiu toho či onoho elektronického zariadenia alebo vytvorili podrobnú kópiu existujúce и vymyslený architektonických štruktúr. Všetko je obmedzené iba fantáziou hráča a možnosťami herného vesmíru.


Nehovorme však ďalej o tom, čo presne hráči vytvárajú, ale pozrime sa na serverovú časť aplikácie a upozorníme na problémy (niekedy veľmi zložité), ktoré môžu nastať počas prevádzky pri zaťažení. Okamžite si urobme rezerváciu, že budeme hovoriť iba o Java Edition.

Typy serverov

Najjednoduchšou možnosťou je server zabudovaný do herného klienta. Vytvorili sme svet, stlačili jedno tlačidlo a server sa stal dostupným cez lokálnu sieť. Táto možnosť nevydrží žiadne vážne zaťaženie, a preto ju ani nebudeme uvažovať.

Vanilka

Mojang Studios distribuuje serverovú časť hry ako Java aplikáciu zadarmo na oficiálnej webovej stránke. To vám umožní vytvoriť si vlastný dedikovaný server a osobný svet, vďaka čomu je prístupný pre pripojenie odkiaľkoľvek na planéte. Pre tých, ktorí to robia prvýkrát, je tu skvelé tutoriál, k dispozícii na príslušnej hernej Wiki.

Tento prístup má jednu vážnu nevýhodu, a to nedostatok hotových možností na pripojenie doplnkov, ktoré rozširujú funkčnosť servera a umožňujú nielen automatizovať mnohé procesy, ale aj optimalizovať výkon. Oficiálny server má navyše pomerne veľkú spotrebu RAM pre každého pripojeného hráča.

Bukkit

Serverová aplikácia vytvorená nadšencami na základe verzie Vanilla Bukkit výrazne rozšíril možnosti hry podporou pluginov a modov (úprav). Umožnil nielen pridávať nové bloky do hry, ale aj vykonávať rôzne manipulácie, ktoré boli pre vanilla softvér nedostupné. Zaujímavosťou je, že táto aplikácia vyžadovala podstatne menej pamäte.

Inštalácia Bukkit nie je náročná, príslušné pokyny sú v zdroji GamePedia. To však nedáva zmysel, keďže od roku 2014 sa tím Bukkit rozpadol, vývojári projektu sa stali zamestnancami Mojang Studios a Úložisko opustené. Bukkit je teda prakticky mŕtvy a má zmysel venovať pozornosť nasledujúcim dvom projektom.

SpigotMC

Na uľahčenie života vývojárom doplnkov bolo potrebné rozhranie API na interakciu s herným svetom. Presne tento problém tvorcovia vyriešili. čap, pričom jadro Bukkit sa prepracovalo na dosiahnutie lepšej spoľahlivosti a výkonu. napriek tomu Úložisko Git projekt bol zablokovaný v dôsledku zákona Digital Millennium Copyright Act (DMCA) a nie je možné odtiaľ stiahnuť zdrojový kód.

V súčasnosti sa SpigotMC aktívne vyvíja a používa. Podporuje všetky pluginy vytvorené pre Bukkit, ale nie je s ním spätne kompatibilný. Na obídenie DMCA Takedown bola vynájdená elegantná metóda s názvom BuildTools. Tento nástroj eliminuje potrebu distribúcie skompilovanej aplikácie a umožňuje používateľom kompilovať Spigot, CraftBukkit a Bukkit zo zdrojového kódu. To všetko robí zákaz DMCA zbytočným.

PaperMC

Všetko sa zdalo v pohode a Spigot sa stal skvelou voľbou. Niektorým nadšencom to však nestačilo a vytvorili si vlastnú vidličku Spigot „na steroidoch“. Zapnuté stránka projektu kľúčovou výhodou je, že „je to hlúpe rýchlo“. Vyvinuté komunity umožňuje rýchlo vyriešiť vznikajúce problémy a rozšírené API umožňuje vytvárať zaujímavé doplnky. PaperMC môžete spustiť jedným jednoduchým príkazom uvedeným v dokumentáciu.

PaperMC má vynikajúcu kompatibilitu, takže pluginy napísané pre SpigotMC môžu jednoducho fungovať na PaperMC, ale bez oficiálnej podpory. Nechýba ani spätná kompatibilita so SpigotMC. Teraz, keď sme uviedli rôzne možnosti na vytvorenie servera, prejdime k problémom s výkonom, ktoré môžu nastať.

Problémy a riešenia

Hlavná vec, ktorú musíte pochopiť, je, že všetko, čo súvisí so spracovaním herného sveta, bude spracované iba na jednom výpočtovom jadre fyzického servera. Takže ak zrazu máte vynikajúci server s tuctom výpočtových jadier, načíta sa iba jedno. Všetky ostatné budú prakticky nečinné. Toto je architektúra aplikácie a nemôžete s tým nič robiť. Takže pri výbere servera by ste mali venovať pozornosť nie počtu jadier, ale frekvencii hodín. Čím je vyššia, tým lepší bude výkon.

Čo sa týka kapacity RAM, mali by sme 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 mať na pamäti, že Java aplikácia vždy potrebuje rezervu RAM. Ak očakávate spotrebu pamäte 8 gigabajtov, tak v skutočnosti potrebujete mať 12. Čísla sú relatívne, ale podstata sa nemení.

Na spustenie serverovej časti odporúčame použiť príznaky uvedené v článku Ladenie vlajok JVM – G1GC Garbage Collector Flags pre Minecraft. Táto „čierna mágia“ umožňuje serveru správne nakonfigurovať „zberač odpadu“ a optimalizovať využitie pamäte RAM. Nemali by ste alokovať viac pamäte, ako server skutočne spotrebuje počas špičkového prílevu hráčov.

Generovanie blokovej mapy

"Naozaj si myslíš, že mesiac existuje len vtedy, keď sa naň pozrieš?" (Albert Einstein)

Úplne nový server. Hneď ako sa hráč po prvýkrát úspešne pripojí, herná postava sa objaví na všeobecnom zhromaždisku (spawn). Toto je jediné miesto, kde je herný svet predgenerovaný serverom. Klientska časť si zároveň prezerá nastavenia a kľúčovým parametrom je vzdialenosť kreslenia. Meria sa v kúskoch (plocha mapy je 16×16 a 256 blokov vysoká) Koľko kúskov je tam uvedených, presne koľko ich bude server požadovať.

Server ukladá globálnu mapu sveta a ak v nej ešte nie sú vygenerované bloky v mieste vzhľadu hernej postavy, tak ich server dynamicky vygeneruje a uloží. Vyžaduje si to nielen veľké výpočtové zdroje, ale neustále zväčšuje aj veľkosť mapy sveta. Na jednom z najstarších anarchistických serverov 2b2t (2builders2tools) Veľkosť mapy už presiahla 8 Tb a hranica sveta je približne 30 miliónov blokov. S týmto serverom sú spojené tisíce príbehov a zaslúži si vlastný článok v sérii.

Vygenerovať svet okolo jedného hráča nie je problém. Generovanie sveta okolo stoviek hráčov spôsobí na krátky čas menšie spomalenia servera, po ktorých sa záťaž zníži. Generovanie sveta vo vzdialenosti klientského vykresľovania okolo tisícky hráčov je už schopné „zhodiť“ server a vyhodiť z neho všetkých klientov z dôvodu časového limitu.

V serverovom softvéri je hodnota ako napr TPS (Ticks per Server – ticks per second). Normálne sa 1 cyklus hodín rovná 50 ms. (1 sekunda reálneho sveta sa rovná 20 tikom herného sveta). Ak sa spracovanie jedného tiku zvýši na 60 sekúnd, serverová aplikácia sa zatvorí a vyhodí všetkých hráčov.

Riešením je obmedziť svet na určité súradnice a vykonať predbežné generovanie blokov. Odstránime tak potrebu dynamického generovania počas hry a server bude musieť čítať iba existujúcu mapu. Oba problémy je možné vyriešiť jedným pluginom WorldBorder.

Najjednoduchším spôsobom je nastaviť hranicu sveta vo forme kruhu vzhľadom na bod spawn (aj keď ho môžete vytvoriť v akomkoľvek tvare) jedným príkazom:

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

Ak sa postava hráča pokúsi prekročiť hranicu, bude zatlačená o niekoľko blokov späť. Ak to urobíte niekoľkokrát v obmedzenom čase, páchateľ bude násilne teleportovaný do spawn pointu. Predgenerovanie sveta sa robí ešte jednoduchšie pomocou príkazu:

/wb fill

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

/wb confirm

Celkovo trvalo vygenerovanie sveta s polomerom 5000 blokov (~40 miliárd blokov) na procesore Intel® Xeon® Gold 2 približne 6240 hodiny. Ak teda chcete vopred vygenerovať väčšiu mapu, uvedomte si, že tento proces bude trvať pomerne dlho a server TPS bude vážne znížený. Pamätajte tiež, že aj polomer 5000 blokov bude vyžadovať približne 2 GB miesta na disku.

Napriek tomu, že najnovšia verzia doplnku bola vyvinutá pre Minecraft verziu 1.14, experimentálne sa zistilo, že funguje skvele aj v ďalších verziách. K dispozícii je úplný zoznam príkazov s vysvetleniami na fóre doplnkov.

Problémové bloky

V Minecrafte je veľké množstvo blokov. Chceli by sme však čitateľov upozorniť na taký blok, akým je TNT. Ako už názov napovedá, tento blok je výbušnina (poznámka redakcie - ide o herný predmet virtuálneho sveta a tento predmet nemá nič so skutočnými výbušninami). Jeho zvláštnosťou je, že v momente aktivácie naň začne pôsobiť gravitačná sila. To prinúti server vypočítať všetky súradnice, ak v tomto okamihu blok začne padať.

Ak existuje niekoľko blokov TNT, potom detonácia jedného bloku spôsobí detonáciu a aktiváciu gravitácie v susedných blokoch, ktorá ich rozptýli do všetkých smerov. Celá táto krásna mechanika na strane servera vyzerá ako veľa operácií na výpočet trajektórie každého bloku, ako aj interakcia so susednými blokmi. Úloha je mimoriadne náročná na zdroje, čo môže každý ľahko skontrolovať. Vytvorte a odpáľte kocku z blokov TNT, ktorá má veľkosť aspoň 30x30x30. A ak ste si mysleli, že máte dobrý a výkonný herný počítač, tak ste sa veľmi 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 celého času detonácie bloku. Ak to teda niektorý hráč dokáže, problém s výkonom ovplyvní všetkých hráčov na serveri.

Ešte ťažšia možnosť - Okrajové kryštály. Ak TNT napriek tomu exploduje postupne, potom Edge Crystals detonujú všetky súčasne, čo teoreticky môže úplne zastaviť činnosť serverovej aplikácie.

Tomuto scenáru sa dá vyhnúť len úplným zákazom používania týchto blokov v hernom svete. Napríklad pomocou pluginu WorldGuard. Upozorňujeme, že tento plugin sám o sebe nefunguje bez iného pluginu WorldEdit. Takže najprv nainštalujte WorldEdit a potom WorldGuard.

Záver

Správna správa herného servera nie je ľahká úloha. Ťažkosti a znížený výkon vás budú čakať na každom kroku, najmä ak neberiete do úvahy samotné herné mechanizmy. Nie je možné predvídať všetko, pretože hráči môžu byť niekedy veľmi kreatívni v snahe prinútiť server, aby urobil niečo, na čo nebol určený. Iba primeraná rovnováha medzi rizikami a stanovenými obmedzeniami umožní serveru nepretržitú prevádzku a nezníži jeho výkon na kritické hodnoty.

Počas karantény niektorí naši zamestnanci zmeškali svoje obľúbené kancelárie a rozhodli sa ich znovu vytvoriť v Minecrafte. Máte tiež možnosť prísť nás navštíviť bez toho, aby ste riskovali svoje zdravie alebo strácali čas na cestách.

Za týmto účelom pozývame všetkých na náš server minecraft.selectel.ru (klientska verzia 1.15.2), kde boli znovu vytvorené dátové centrá Tsvetochnaja-1 a Tsvetochnaja-2. Nezabudnite súhlasiť so stiahnutím ďalších zdrojov, sú potrebné pre správne zobrazenie niektorých miest.

Čakajú na vás úlohy, propagačné kódy, veľkonočné vajíčka a príjemná komunikácia.

Zdroj: hab.com

Pridať komentár