A blogunkon már
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
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
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
A Bukkit telepítése nem nehéz, a megfelelő utasítások az erőforráson találhatók
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.
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
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
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
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
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ő
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
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
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