Minecraft szerver optimalizálás

Minecraft szerver optimalizálás
A blogunkon már mondta, hogyan készíts saját Minecraft szervert, de azóta eltelt 5 év és sok minden változott. Megosztjuk Önnel a jelenlegi módszereket egy ilyen népszerű játék szerver részének létrehozására és optimalizálására.

9 éves története során (a megjelenés dátumától számítva) a Minecraft elképesztő számú rajongót és gyűlölködőt szerzett mind a hétköznapi játékosok, mind a geekek körében. A blokkokból álló világ egyszerű koncepciója a szórakozás egyszerű formájából egy univerzális médiummá fejlődött, amely lehetővé teszi a kommunikációt és a különféle tárgyak létrehozását a valós világból.

Az építkezésen kívül a játékban lehetőség van alkotásra is logika, amelyek lehetővé teszik teljes értékű algoritmusok megvalósítását a Minecrafton belül. A YouTube tele van nagyon lenyűgöző videókkal, amelyekben az emberek hatalmas erőfeszítések és sok idő eltöltése után másolatot készítettek erről vagy arról az elektronikus eszközről, vagy részletes másolatot készítettek. létező и kitalált építészeti szerkezetek. Mindennek csak a játékos fantáziája és a játékuniverzum lehetőségei szabnak határt.


De ne beszéljünk tovább arról, hogy pontosan mit hoznak létre a lejátszók, hanem nézzük meg az alkalmazás szerver részét, és emeljük ki a terhelés alatti működés során felmerülő (néha nagyon összetett) problémákat. Azonnal foglaljuk le, hogy csak a Java kiadásról fogunk beszélni.

A szerverek típusai

A legegyszerűbb lehetőség a játékkliensbe épített szerver. Létrehoztunk egy világot, megnyomtunk egy gombot, és a szerver elérhetővé vált a helyi hálózaton keresztül. Ez az opció nem bír el komoly terhelést, ezért nem is vesszük figyelembe.

Vanília

A Mojang Studios a játék szerver részét ingyenesen terjeszti Java alkalmazásként a hivatalos weboldalon. Ez lehetővé teszi saját létrehozását dedikált szerver és a személyes világ, így a bolygó bármely pontjáról elérhetővé válik. Azok számára, akik először csinálják ezt, nagyszerű lehetőség van oktatóanyag, elérhető a megfelelő játék-wikin.

Ennek a megközelítésnek van egy komoly hátránya, nevezetesen az, hogy hiányzik a készenléti képességek olyan bővítmények csatlakoztatására, amelyek bővítik a szerver funkcionalitását, és nemcsak számos folyamat automatizálását teszik lehetővé, hanem a teljesítmény optimalizálását is. Ezenkívül a hivatalos szerver meglehetősen nagy RAM-felhasználással rendelkezik minden csatlakoztatott lejátszóhoz.

bukkit

A Vanilla verzió alapján rajongók által készített szerveralkalmazás bukkit jelentősen kibővítette a játék képességeit a bővítmények és modok (módosítások) támogatásával. Nemcsak új blokkok hozzáadását tette lehetővé a játékmenethez, hanem különféle olyan manipulációk végrehajtását is lehetővé tette, amelyek a vanilla szoftver számára hozzáférhetetlenek voltak. Érdekes módon ez az alkalmazás lényegesen kevesebb memóriát igényelt.

A Bukkit telepítése nem nehéz, a megfelelő utasítások az erőforráson találhatók GamePedia. De ennek semmi értelme, hiszen 2014 óta a Bukkit csapat feloszlott, a projektfejlesztők a Mojang Studios munkatársai lettek, ill. adattár elhagyatott. Így a Bukkit gyakorlatilag halott, és érdemes odafigyelni a következő két projektre.

SpigotMC

A bővítményfejlesztők életének megkönnyítése érdekében szükség volt egy API-ra, amely interakcióba léphet a játékvilággal. Pontosan ezt a problémát oldották meg az alkotók. Csap, figyelembe véve a Bukkit magot, és átdolgozva a jobb megbízhatóság és teljesítmény érdekében. Mindazonáltal, Git repository a projektet a Digital Millennium Copyright Act (Digitális Évezred Szerzői Jogi Törvény) miatt blokkolták (DMCA), és onnan nem lehet letölteni a forráskódot.

Jelenleg a SpigotMC-t aktívan fejlesztik és használják. Támogatja az összes Bukkit számára létrehozott bővítményt, de visszafelé nem kompatibilis vele. A DMCA Takedown megkerülésére egy elegáns módszert találtak ki, a BuildTools-t. Ez az eszköz kiküszöböli a lefordított alkalmazás terjesztésének szükségességét, és lehetővé teszi a felhasználók számára a Spigot, CraftBukkit és Bukkit forráskódból történő fordítását. Mindez használhatatlanná teszi a DMCA tiltását.

PaperMC

Minden klassznak tűnt, és a Spigot nagyszerű választássá vált. De ez nem volt elég néhány rajongónak, és létrehozták a saját Spigot villát „szteroidokon”. Tovább projekt oldala a legfontosabb előnye az, hogy „hülye gyorsan”. Fejlett közösség lehetővé teszi a felmerülő problémák gyors megoldását, a kiterjesztett API pedig érdekes bővítmények létrehozását teszi lehetővé. A PaperMC-t egyetlen egyszerű paranccsal indíthatja el dokumentáció.

A PaperMC kiváló kompatibilitással rendelkezik, így a SpigotMC-hez írt bővítmények könnyen működhetnek PaperMC-n, de hivatalos támogatás nélkül. Visszafelé kompatibilitás a SpigotMC-vel is jelen van. Most, hogy felsoroltuk a szerver létrehozásának különféle lehetőségeit, térjünk át az esetlegesen felmerülő teljesítményproblémákra.

Problémák és megoldások

A legfontosabb dolog, amit meg kell értened, hogy minden, ami a játékvilág feldolgozásával kapcsolatos, csak a fizikai szerver egyik számítási magján lesz feldolgozva. Tehát ha hirtelen van egy kiváló szervere egy tucat számítási maggal, akkor csak az egyik töltődik be. Az összes többi gyakorlatilag tétlen lesz. Ez az alkalmazás architektúrája, és nem tehetsz ellene semmit. A szerver kiválasztásánál tehát nem a magok számára, hanem az órajelre kell figyelni. Minél magasabb, annál jobb lesz a teljesítmény.

A RAM kapacitásának kérdésével kapcsolatban a következő mutatókból kell kiindulnunk:

  • tervezett játékosok száma;
  • tervezett világok száma a szerveren;
  • az egyes világok mérete.

Emlékeztetni kell arra, hogy egy Java-alkalmazásnak mindig szüksége van egy tartalék RAM-ra. Ha 8 gigabájt memóriafelhasználásra számítasz, akkor valójában 12-re van szükséged. A számok relatívak, de a lényeg nem változik.

A szerverrész elindításához javasoljuk a cikkben megadott jelzők használatát A JVM – G1GC szemétgyűjtő zászlók hangolása a Minecraft számára. Ez a „fekete mágia” lehetővé teszi a szerver számára, hogy megfelelően konfigurálja a „szemétgyűjtőt”, és optimalizálja a RAM használatát. Ne foglaljon le több memóriát, mint amennyit a szerver ténylegesen fogyaszt a játékosok beáramlásának csúcsa idején.

Blokktérkép generálása

– Tényleg azt hiszed, hogy a Hold csak akkor létezik, ha ránézel? (Albert Einstein)

Teljesen új szerver. Amint a játékos sikeresen csatlakozik az első alkalommal, a játék karaktere megjelenik az általános gyülekezőponton (spawn). Ez az egyetlen hely, ahol a játékvilágot előre generálja a szerver. Ugyanebben a pillanatban a kliens rész megnézi a beállításokat, és a kulcsparaméter a rajzolási távolság. Csonkban mérik (a térkép területe 16×16 és 256 blokk magas) Hány darab van feltüntetve, pontosan mennyit kérnek le a szervertől.

A szerver tárol egy globális világtérképet, és ha a játékkarakter megjelenésekor még nincsenek benne generált blokkok, akkor a szerver dinamikusan generálja és tárolja azokat. Ez nemcsak nagy számítási erőforrásokat igényel, hanem folyamatosan növeli a világtérkép méretét is. Az egyik legrégebbi anarchista szerveren 2b2t (2builders2tools) A térkép mérete már meghaladta a 8 Tb-t, a világ határa pedig 30 millió blokk körül van. Több ezer történet kapcsolódik ehhez a szerverhez, és megérdemel egy saját cikket a sorozatban.

Egy játékos körül világot generálni nem jelent problémát. A több száz játékos körüli világ generálása rövid időre kisebb szerverlelassulásokat okoz, ami után csökken a terhelés. Ezer játékos körüli kliens megjelenítési távolságra világot generálva már képes „ledobni” a szervert és az összes klienst kidobni onnan egy időkorlát miatt.

A szerverszoftverben van olyan érték, mint pl TPS (Kickek kiszolgálónként – kullancsok másodpercenként). Normális esetben 1 órajel 50 ms-nak felel meg. (1 másodperc a valós világból egyenlő 20 pipával a játék világában). Ha egy pipa feldolgozása 60 másodpercre nő, a szerver alkalmazás bezárul, és az összes játékost kidobja.

A megoldás az, hogy a világot bizonyos koordinátákra korlátozzuk, és előzetes blokkgenerálást hajtunk végre. Így eltávolítjuk a dinamikus generálás szükségességét a játék során, és a szervernek csak egy meglévő térképet kell olvasnia. Mindkét probléma megoldható egyetlen bővítménnyel Világhatár.

A világhatárt a legegyszerűbb a spawn ponthoz képest kör alakban beállítani (bár tetszőleges alakú lehet) egyetlen paranccsal:

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

Ha a játékos karakter megpróbálja átlépni a határt, több blokkal hátrébb kerül. Ha ezt korlátozott időn belül többször is megteszik, az elkövető erőszakkal teleportálódik a spawn pontra. A világ előgenerálása még egyszerűbben, a következő paranccsal történik:

/wb fill

Mivel ez a művelet hatással lehet a szerveren lévő játékosokra, mindenképpen erősítse meg:

/wb confirm

Összesen körülbelül 5000 órát vett igénybe egy 40 blokk (~2 milliárd blokk) sugarú világ létrehozása Intel® Xeon® Gold 6240 processzoron. Ezért ha nagyobb térképet szeretne előgenerálni, vegye figyelembe, hogy ez a folyamat megfelelő mennyiségű időt vesz igénybe, és a szerver TPS-e jelentősen csökkenni fog. Ne feledje, hogy még 5000 blokk sugara is körülbelül 2 GB lemezterületet igényel.

Annak ellenére, hogy a beépülő modul legújabb verzióját a Minecraft 1.14-es verziójához fejlesztették ki, kísérletileg kiderült, hogy a következő verziókban kiválóan működik. A parancsok teljes listája magyarázatokkal elérhető a plugin fórumon.

Probléma blokkok

A Minecraftban sokféle blokk található. Szeretnénk azonban felhívni az olvasók figyelmét egy olyan blokkra, mint pl TNT. Ahogy a neve is sugallja, ez a blokk egy robbanóanyag (a szerkesztő megjegyzése - ez a virtuális világ játékeleme, és ebben az elemben nincs semmi valódi robbanóanyag). Sajátossága, hogy az aktiválás pillanatában a gravitációs erő hatni kezd rá. Ez arra kényszeríti a szervert, hogy kiszámolja az összes koordinátát, ha ebben a pillanatban a blokk esni kezd.

Ha több TNT blokk van, akkor egy blokk felrobbantása detonációt és a gravitáció aktiválását okozza a szomszédos blokkokban, szétszórva azokat minden irányba. Mindez a gyönyörű mechanika a szerver oldalon úgy néz ki, mint egy csomó művelet az egyes blokkok pályájának kiszámításához, valamint a szomszédos blokkokkal való interakcióhoz. A feladat rendkívül erőforrás-igényes, amit bárki könnyedén ellenőrizhet. Legalább 30x30x30 méretű kockát hozzon létre és robbantsa fel TNT blokkokból. És ha azt hitted, hogy jó, erős játékgéped van, akkor nagyon tévedtél 😉

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

Minecraft szerver optimalizálás
Egy Intel® Xeon® Gold 6240-es szerveren végzett hasonló „kísérlet” komoly TPS-csökkenéshez és 80%-os CPU-terheléshez vezetett a teljes blokkrobbanási idő alatt. Ezért, ha bármelyik játékos képes erre, akkor a teljesítményprobléma a szerveren lévő összes játékost érinti.

Még keményebb lehetőség - Edge Crystals. Ha a TNT ennek ellenére egymás után felrobban, akkor az Edge Crystals egyszerre robban fel, ami elméletileg teljesen leállíthatja a szerveralkalmazás működését.

Ez a forgatókönyv csak úgy kerülhető el, ha teljesen betiltjuk ezeknek a blokkoknak a használatát a játékvilágban. Például a plugin használatával Világőr. Kérjük, vegye figyelembe, hogy ez a beépülő modul önmagában nem működik másik bővítmény nélkül WorldEdit. Tehát először telepítse a WorldEdit, majd a WorldGuard programot.

Következtetés

A játékszerver megfelelő kezelése nem egyszerű feladat. Nehézségek és csökkent teljesítmény vár rád minden alkalommal, különösen, ha nem veszi figyelembe magát a játékmenet mechanikáját. Lehetetlen mindent előre látni, mert a játékosok néha nagyon kreatívak lehetnek, amikor megpróbálják rákényszeríteni a szervert, hogy olyasmit tegyen, amire nem szánták. Csak a kockázatok és a megállapított korlátozások közötti ésszerű egyensúly teszi lehetővé a szerver folyamatos működését, és nem csökkenti teljesítményét kritikus értékekre.

A karantén alatt néhány alkalmazottunk kihagyta kedvenc irodáit, és úgy döntött, hogy újrateremti őket a Minecraftban. Lehetősége van arra is, hogy egészségének kockáztatása vagy az úton töltött idő elvesztése nélkül eljöjjön hozzánk.

Ennek érdekében mindenkit meghívunk szerverünkre minecraft.selectel.ru (ügyfélverzió 1.15.2), ahol a Tsvetochnaya-1 és Tsvetochnaya-2 adatközpontokat újra létrehozták. Ne felejtsen el beleegyezni a további források letöltésébe, ezek bizonyos helyek helyes megjelenítéséhez szükségesek.

Küldetések, promóciós kódok, húsvéti tojások és kellemes kommunikáció vár rád.

Forrás: will.com

Hozzászólás