Na našem blogu již máme
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
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
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
Instalace Bukkitu není obtížná, odpovídající pokyny jsou na zdroji
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.
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
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
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ů
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
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
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
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
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