Optimalizace serveru Minecraft

Optimalizace serveru Minecraft
Na našem blogu již máme řekla, jak si vytvořit svůj vlastní Minecraft server, ale od té doby uplynulo 5 let a mnohé se změnilo. Sdílíme s vámi aktuální způsoby, jak vytvořit a optimalizovat serverovou část tak populární hry.

Za svou 9letou historii (počítáno od data vydání) si Minecraft vysloužil úžasné množství fanoušků a haterů mezi běžnými hráči i geeky. Jednoduchý koncept světa z kostek se vyvinul z jednoduché formy zábavy v univerzální médium pro komunikaci a vytváření různých objektů z reálného světa.

Kromě stavby má hra schopnost tvořit logika, které vám umožňují implementovat plnohodnotné algoritmy v Minecraftu. YouTube je plný velmi působivých videí, kde lidé, kteří vynaložili obrovské množství úsilí a strávili spoustu času, vytvořili kopii toho či onoho elektronického zařízení nebo vytvořili podrobnou kopii existující и smyšlený architektonických struktur. Vše je omezeno pouze fantazií hráče a možnostmi herního vesmíru.


Ale nemluvme dále o tom, co přesně hráči vytvářejí, ale podívejme se na serverovou část aplikace a upozorněme na problémy (někdy velmi složité), které mohou nastat při provozu pod zátěží. Udělejme si hned rezervaci, že budeme mluvit pouze o Java Edition.

Typy serverů

Nejjednodušší možností je server zabudovaný do herního klienta. Vytvořili jsme svět, stiskli jedno tlačítko a server se stal dostupným přes lokální síť. Tato možnost nevydrží žádné vážné zatížení, a proto o ní ani neuvažujeme.

Vanilla

Mojang Studios distribuuje serverovou část hry jako Java aplikaci zdarma na oficiálních stránkách. To vám umožní vytvořit si vlastní dedikovaný server a osobní svět, díky čemuž je přístupný pro připojení odkudkoli na planetě. Pro ty, kteří to dělají poprvé, je tu skvělé tutorial, k dispozici na odpovídající herní Wiki.

Tento přístup má jednu vážnou nevýhodu, a to nedostatek předem připravených možností pro připojení pluginů, které rozšiřují funkčnost serveru a umožňují nejen automatizovat mnoho procesů, ale také optimalizovat výkon. Oficiální server má navíc poměrně velkou spotřebu RAM pro každého připojeného hráče.

bukkit

Serverová aplikace vytvořená nadšenci na základě verze Vanilla bukkit výrazně rozšířil možnosti hry podporou pluginů a modů (úprav). Umožňoval nejen přidávat nové bloky do hry, ale také provádět různé manipulace, které byly pro vanilla software nepřístupné. Zajímavé je, že tato aplikace vyžadovala podstatně méně paměti.

Instalace Bukkitu není obtížná, odpovídající pokyny jsou na zdroji GamePedia. Ale to nedává smysl, protože od roku 2014 se tým Bukkit rozpadl, vývojáři projektu se stali zaměstnanci Mojang Studios a úložiště opuštěný. Bukkit je tedy fakticky mrtvý a má smysl věnovat pozornost dalším dvěma projektům.

SpigotMC

Aby se vývojářům pluginů usnadnil život, bylo potřeba rozhraní API pro interakci s herním světem. Právě tento problém tvůrci vyřešili. Čep, vezme jádro Bukkit a přepracuje ho tak, aby bylo dosaženo lepší spolehlivosti a výkonu. Nicméně, Git úložiště projekt byl zablokován kvůli zákonu Digital Millennium Copyright Act (DMCA) a není možné odtud stáhnout zdrojový kód.

V současné době je SpigotMC aktivně vyvíjen a používán. Podporuje všechny pluginy vytvořené pro Bukkit, ale není s ním zpětně kompatibilní. Aby bylo možné obejít DMCA Takedown, byla vynalezena elegantní metoda nazvaná BuildTools. Tento nástroj eliminuje potřebu distribuovat zkompilovanou aplikaci a umožňuje uživatelům kompilovat Spigot, CraftBukkit a Bukkit ze zdrojového kódu. To vše dělá zákaz DMCA zbytečným.

PaperMC

Všechno vypadalo v pohodě a Spigot se stal skvělou volbou. Některým nadšencům to ale nestačilo a vytvořili si vlastní vidličku Spigot „na steroidech“. Na stránka projektu klíčovou výhodou je, že „je to hloupě rychlé“. Rozvinutý společenství umožňuje rychle řešit vznikající problémy a rozšířené API umožňuje vytvářet zajímavé pluginy. PaperMC můžete spustit jedním jednoduchým příkazem uvedeným v dokumentace.

PaperMC má vynikající kompatibilitu, takže pluginy napsané pro SpigotMC mohou snadno fungovat na PaperMC, ale bez oficiální podpory. Nechybí ani zpětná kompatibilita se SpigotMC. Nyní, když jsme uvedli různé možnosti pro vytvoření serveru, přejděme k problémům s výkonem, které mohou nastat.

Problémy a řešení

Hlavní věc, kterou musíte pochopit, je, že vše, co souvisí se zpracováním herního světa, bude zpracováváno pouze na jednom výpočetním jádru fyzického serveru. Pokud tedy najednou máte vynikající server s tuctem výpočetních jader, načte se pouze jedno. Všechny ostatní budou prakticky nečinné. Toto je architektura aplikace a nemůžete s tím nic dělat. Při výběru serveru byste tedy neměli věnovat pozornost počtu jader, ale frekvenci hodin. Čím vyšší je, tím lepší bude výkon.

V otázce kapacity RAM bychom měli vycházet z následujících ukazatelů:

  • plánovaný počet hráčů;
  • plánovaný počet světů na serveru;
  • velikost každého světa.

Je třeba si uvědomit, že Java aplikace vždy potřebuje rezervu RAM. Pokud očekáváte spotřebu paměti 8 gigabajtů, pak jich ve skutečnosti potřebujete mít 12. Čísla jsou relativní, ale podstata se nemění.

Pro spuštění serverové části doporučujeme použít příznaky uvedené v článku Ladění příznaků JVM – G1GC Garbage Collector Flags pro Minecraft. Tato „černá magie“ umožňuje serveru správně nakonfigurovat „sběrač odpadu“ a optimalizovat využití paměti RAM. Během špičkového přílivu hráčů byste neměli přidělovat více paměti, než server skutečně spotřebuje.

Generování blokové mapy

"Opravdu si myslíš, že Měsíc existuje, jen když se na něj díváš?" (Albert Einstein)

Zcela nový server. Jakmile se hráč poprvé úspěšně připojí, herní postava se objeví na hlavním shromažďovacím místě (spawn). Toto je jediné místo, kde je herní svět předgenerován serverem. Klientská část se zároveň podívá na nastavení a klíčovým parametrem je vzdálenost výkresu. Měří se v blocích (plocha mapy je 16×16 a 256 bloků vysoká).

Server ukládá globální mapu světa, a pokud v ní v místě výskytu herní postavy ještě nejsou vygenerované bloky, tak je server dynamicky generuje a ukládá. Nejen, že to vyžaduje velké výpočetní zdroje, ale také to neustále zvětšuje velikost mapy světa. Na jednom z nejstarších anarchistických serverů 2b2t (2builders2tools) Velikost mapy již přesáhla 8 Tb a hranice světa je kolem 30 milionů bloků. S tímto serverem jsou spojeny tisíce příběhů a zaslouží si vlastní článek v seriálu.

Vygenerovat svět kolem jednoho hráče není problém. Generování světa kolem stovek hráčů způsobí na krátkou dobu menší zpomalení serveru, po kterém se zátěž sníží. Generování světa na klientskou vykreslovací vzdálenost kolem tisíce hráčů je již schopné „zahodit“ server a vyhodit z něj všechny klienty kvůli vypršení časového limitu.

V serverovém softwaru existuje hodnota jako např TPS (Ticks per Server – ticks za sekundu). Normálně se 1 hodinový cyklus rovná 50 ms. (1 sekunda reálného světa se rovná 20 tikům herního světa). Pokud se zpracování jednoho tiku prodlouží na 60 sekund, serverová aplikace se zavře a vyhodí všechny hráče.

Řešením je omezit svět na určité souřadnice a provést předběžné generování bloku. Odstraníme tak potřebu dynamického generování během hry a server bude muset číst pouze existující mapu. Oba problémy lze vyřešit jediným pluginem WorldBorder.

Nejjednodušší způsob je nastavit hranici světa ve formě kruhu vzhledem k bodu spawn (ačkoli jej můžete vytvořit v jakémkoli tvaru) jedním příkazem:

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

Pokud se hráčská postava pokusí překročit hranici, bude zatlačena o několik bloků zpět. Pokud to uděláte několikrát během omezeného času, bude pachatel násilně teleportován do spawn pointu. Předgenerování světa se provádí ještě jednodušeji pomocí příkazu:

/wb fill

Protože tato akce může potenciálně ovlivnit hráče na serveru, nezapomeňte potvrdit:

/wb confirm

Celkem trvalo přibližně 5000 hodiny vygenerování světa o poloměru 40 bloků (~2 miliard bloků) na procesoru Intel® Xeon® Gold 6240. Pokud tedy chcete předem vygenerovat větší mapu, uvědomte si, že tento proces zabere slušné množství času a server TPS bude vážně snížen. Pamatujte také, že i poloměr 5000 bloků bude vyžadovat přibližně 2 GB místa na disku.

Navzdory skutečnosti, že nejnovější verze pluginu byla vyvinuta pro Minecraft verze 1.14, bylo experimentálně zjištěno, že funguje skvěle na následujících verzích. K dispozici je úplný seznam příkazů s vysvětlením na fóru pluginů.

Problémové bloky

V Minecraftu je velké množství různých bloků. Rádi bychom však čtenáře upozornili na takový blok jako je TNT. Jak název napovídá, tento blok je výbušnina (pozn. redakce - jedná se o herní předmět virtuálního světa a tento předmět nemá nic se skutečnými výbušninami). Jeho zvláštnost je taková, že v okamžiku aktivace na něj začne působit gravitační síla. To přinutí server vypočítat všechny souřadnice, pokud v tomto okamžiku blok začne padat.

Pokud existuje několik bloků TNT, pak detonace jednoho bloku způsobí detonaci a aktivaci gravitace v sousedních blocích, které je rozptýlí do všech směrů. Celá tato krásná mechanika na straně serveru vypadá jako spousta operací pro výpočet trajektorie každého bloku a také interakce se sousedními bloky. Úkol je extrémně náročný na zdroje, což může každý snadno zkontrolovat. Vygenerujte a odpalte krychli z TNT bloků o velikosti alespoň 30x30x30. A pokud jste si mysleli, že máte dobrý a výkonný herní počítač, byli jste na velkém omylu 😉

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

Optimalizace serveru Minecraft
Podobný „experiment“ na serveru s Intel® Xeon® Gold 6240 vedl k vážnému poklesu TPS a 80% zatížení CPU během celé doby detonace bloku. Pokud to tedy některý hráč dokáže, problém s výkonem ovlivní všechny hráče na serveru.

Ještě tvrdší varianta - Okrajové krystaly. Pokud TNT přesto exploduje postupně, pak Edge Crystals detonují všechny současně, což teoreticky může zcela zastavit provoz serverové aplikace.

Tomuto scénáři se lze vyhnout pouze úplným zákazem používání těchto bloků v herním světě. Například pomocí pluginu WorldGuard. Upozorňujeme, že tento plugin sám o sobě nefunguje bez dalšího pluginu Worldedit. Nejprve tedy nainstalujte WorldEdit a poté WorldGuard.

Závěr

Správná správa herního serveru není snadný úkol. Potíže a pokles výkonu na vás budou čekat na každém kroku, zvláště pokud neberete v úvahu samotné herní mechanismy. Není možné předvídat vše, protože hráči mohou být někdy velmi kreativní ve snaze donutit server udělat něco, k čemu nebyl určen. Pouze rozumná rovnováha mezi riziky a zavedenými omezeními umožní serveru pracovat nepřetržitě a nesnižovat jeho výkon na kritické hodnoty.

Během karantény se některým našim zaměstnancům stýskalo po jejich oblíbených kancelářích a rozhodli se je znovu vytvořit v Minecraftu. Máte také možnost nás navštívit, aniž byste riskovali své zdraví nebo ztráceli čas na cestách.

K tomu zveme všechny na náš server minecraft.selectel.ru (klientská verze 1.15.2), kde byla znovu vytvořena datová centra Cvetochnaja-1 a Cvetochnaja-2. Nezapomeňte souhlasit se stažením dalších zdrojů, jsou nezbytné pro správné zobrazení některých míst.

Čekají vás questy, propagační kódy, kraslice a příjemná komunikace.

Zdroj: www.habr.com

Přidat komentář