Optimisering av Minecraft-servern

Optimisering av Minecraft-servern
I vĂ„r blogg har vi redan om hur de tillĂ€mpar teknologin för en ovanlig uppgift — att hitta fel i rubriker.) I slutĂ€ndan lyckades vi automatisera upp till 90 % av flödet beroende pĂ„ tjĂ€nsten., hur man skapar sin egen Minecraft-server, men mycket har förĂ€ndrats sedan dess. Vi delar med oss av aktuella metoder för att skapa och optimera serverdelen av detta populĂ€ra spel.

Under sin 9-Äriga historia (rÀknat frÄn releasedatumet) har Minecraft fÄtt en fantastisk mÀngd fans och kritiker, bÄde bland vanliga spelare och nördar. Den enkla idén med en vÀrld av block har förvandlats frÄn en vanlig underhÄllning till en universell plattform för kommunikation och skapande av olika objekt frÄn verkliga livet.

Förutom byggande finns det möjlighet att skapa logiska scheman, som gör att man kan genomföra kompletta algoritmer inom Minecraft. Det finns mÄnga imponerande videor pÄ YouTube dÀr mÀnniskor, efter att ha lagt ner enorma mÀngder tid och anstrÀngning, har skapat kopior av olika elektroniska enheter eller byggt detaljerade kopior av existerande och fiktiva arkitekturverk. Allt begrÀnsas bara av spelarens fantasi och speluniversums möjligheter.

Spela video

Men lÄt oss inte fortsÀtta diskutera vad spelarna skapar, utan istÀllet ta en titt pÄ serverdelen av applikationen och belysa de problem (ibland ganska komplexa) som kan uppstÄ under belastning. Vi mÄste ocksÄ nÀmna att vi bara kommer att fokusera pÄ Java Edition.

Typer av servrar

Det enklaste alternativet Àr servern inbyggd i spelklienten. Man skapar en vÀrld, trycker pÄ en knapp, och sÄ Àr servern tillgÀnglig via det lokala nÀtverket. Detta alternativ kan inte hantera nÄgon seriös belastning, sÄ vi kommer inte att betrakta det.

Vanilla

Mojang Studios distribuerar spelserverdelen som en Java-applikation gratis pÄ den officiella sajten. Detta gör det möjligt att skapa sin egen dedikerad server personliga vÀrld, vilket gör den tillgÀnglig för anslutning frÄn vilken plats som helst pÄ planeten. För dem som gör detta för första gÄngen finns det en utmÀrkt handledning, tillgÀnglig i den relevanta spel-Wiki.

Denna metod har en stor nackdel, nÀmligen avsaknaden av möjligheter "frÄn början" att ansluta plugins som utökar serverns funktionalitet och gör det möjligt att automatisera mÄnga processer samt optimera prestanda. Dessutom har den officiella servern en ganska hög minnesanvÀndning per ansluten spelare.

Bukkit

Skapat av entusiaster utifrÄn Vanilla-versionen av serverapplikationen Bukkit utökade avsevÀrt spelets möjligheter genom att stödja plugins och mods (modifieringar). Det gjorde det möjligt att inte bara lÀgga till nya block i spelet, utan ocksÄ utföra olika manipulationer som inte var tillgÀngliga i vaniljprogramvaran. Intressant nog krÀvde denna applikation betydligt mindre minne.

Att installera Bukkit Àr inte sÀrskilt svÄrt; det finns en motsvarande instruktion pÄ resursen GamePedia. Men detta Àr meningslöst eftersom Bukkit-laget upplöstes 2014, och projektutvecklarna blev anstÀllda pÄ Mojang Studios, och arkiv Àr övergivet. DÀrmed Àr Bukkit faktiskt död, och det Àr vettigt att uppmÀrksamma de tvÄ följande projekten.

SpigotMC

För att underlÀtta livet för pluginutvecklare fanns det ett behov av ett API för att interagera med spelvÀrlden. Det var exakt denna uppgift som skaparna av Spigot, tog utgÄngspunkt i Bukkit-kÀrnan och omarbetade den för att uppnÄ bÀttre pÄlitlighet och prestanda. Trots det Git-repository bannades projektet pÄ grund av lagen om upphovsrÀtt i den digitala tidsÄldern (DMCA), och det gÄr inte att ladda ner kÀllkoden dÀrifrÄn.

För nÀrvarande utvecklas SpigotMC aktivt och anvÀnds. Det stöder alla plugins som skapades för Bukkit, men det Àr inte bakÄtkompatibelt. För att kringgÄ DMCA-takedownförbudet uppfanns en elegant lösning kallad BuildTools. Det hÀr verktyget eliminerar behovet av distribution av den kompilerade applikationen och gör det möjligt för anvÀndare att kompilera Spigot, CraftBukkit och Bukkit frÄn kÀllkoden. Allt detta gör DMCA-förbudet meningslöst.

PaperMC

Det verkar som om allt Ă€r toppen, och Spigot blev ett utmĂ€rkt alternativ. Men vissa entusiaster ansĂ„g att detta var för lite, och de skapade sin egen Spigot-fork "pĂ„ steroider". PĂ„ projektets sida anges den största fördelen att “det Ă€r sjukt snabbt”. Det utvecklade communityt möjliggör snabb lösning av uppkomna frĂ„gor, och det utökade API:t gör det möjligt att skapa intressanta plugins. Att starta PaperMC kan göras med ett enkelt kommando, som anges i dokumentationen.

Med kompatibiliteten hos PaperMC Àr allt utmÀrkt, sÄ plugins skrivna för SpigotMC fungerar enkelt Àven pÄ PaperMC, men utan officiellt stöd. BakÄtkompatibilitet med SpigotMC finns ocksÄ. Nu nÀr vi har gÄtt igenom olika alternativ för att skapa en server, lÄt oss gÄ vidare till de prestandaproblem som kan uppstÄ.

Problem och lösningar

Det viktigaste att förstÄ Àr att allt som rör hanteringen av spelvÀrlden endast kommer att bearbetas av en enda berÀkningskÀrna pÄ den fysiska servern. SÄ om du plötsligt har en utmÀrkt server med ett dussin berÀkningskÀrnor, kommer endast en att vara belastad. De andra kommer att stÄ praktiskt taget stilla. SÄdan Àr applikationens arkitektur, och du kan inte förÀndra det. NÀr du vÀljer server bör du dÀrför fokusera mindre pÄ antalet kÀrnor och mer pÄ klockfrekvensen. Ju högre den Àr, desto bÀttre blir prestandan.

NÀr det gÀller mÀngden RAM bör man utgÄ frÄn följande parametrar:

  • det planerade antalet spelare;
  • det planerade antalet vĂ€rldar pĂ„ servern;
  • storleken pĂ„ varje vĂ€rld.

Man bör komma ihÄg att Java-appar alltid behöver en marginal av RAM. Om du rÀknar med ett minnesanvÀndande pÄ 8 gigabyte, bör du faktiskt ha 12. Siffrorna Àr ungefÀrliga, men essensen förblir densamma.

För att starta serverdelen rekommenderar vi att anvĂ€nda flaggorna som anges i artikeln Tuning the JVM – G1GC Garbage Collector Flags for Minecraft. Denna "svart magi" gör det möjligt för servern att korrekt konfigurera "skrĂ€pinsamlaren" och optimerar anvĂ€ndningen av RAM. Det Ă€r inte vĂ€rt att avsĂ€tta mer minne Ă€n vad servern verkligen förbrukar vid toppbelastning av spelare.

Blockkarta-generering

“Tror du verkligen att MĂ„nen existerar bara nĂ€r du tittar pĂ„ den?” (Albert Einstein)

Helt ny server. SĂ„ snart en spelare lyckas ansluta för första gĂ„ngen, dyker spelkaraktĂ€ren upp pĂ„ en gemensam samlingspunkt (spawn). Detta Ă€r den enda plats dĂ€r spelvĂ€rlden förförs genereras av servern. Vid denna tidpunkt kollar klientdelen instĂ€llningarna, och en viktig parameter Ă€r renderingsavstĂ„ndet. Det mĂ€ts i chunks (en kartaomrĂ„de pĂ„ 16×16 och 256 block hög). SĂ„ mĂ„nga chunks som anges dĂ€r kommer att begĂ€ras frĂ„n servern.

PÄ servern lagras en global vÀrldskarta, och om det inte finns nÄgra genererade block vid spelkaraktÀrens spawnpunkt sÄ genererar servern dem dynamiskt och sparar dem. Det krÀver inte bara stora berÀkningsresurser, utan ökar ocksÄ stÀndigt storleken pÄ vÀrldskartan. PÄ en av de Àldsta anarkistiska servrarna 2b2t (2builders2tools) har storleken pÄ kartan redan överstigit 8 Tb, och vÀrldens grÀns gÄr vid 30 miljoner block. Denna server Àr kopplad till tusentals historier och förtjÀnar en egen artikel i en artikelserie.

Generering av vÀrlden runt en spelare Àr inget problem. Att generera vÀrlden runt hundra spelare kommer att orsaka en kortvarig mjukvarubroms pÄ servern, och efter det kommer belastningen att minska. Att generera vÀrlden pÄ renderingens rÀckvidd runt tusen spelare kan redan "falla" servern och avbryta alla klienter pÄ grund av timeout.

I serverprogramvaran finns ett vĂ€rde som kallas TPS (Ticks per Server — takter per sekund). Standard Ă€r 1 takt lika med 50 ms. (1 sekund i den verkliga vĂ€rlden motsvarar 20 takter i spelvĂ€rlden). Om bearbetningen av en takt ökar till 60 sekunder kommer serverapplikationen att stĂ€ngas ner, vilket kommer att leda till att alla spelare kastas ut.

Lösningen Àr att begrÀnsa vÀrlden till specifika koordinater och utföra förhandsgenerering av block. PÄ sÄ vis tar vi bort behovet av dynamisk generering under spelets gÄng, och servern behöver bara lÀsa den redan existerande kartan. BÄda frÄgorna löses med en enda plugin. WorldBorder.

Det Àr enklast att sÀtta vÀrldens grÀns som en cirkel runt spawnpunkten (Àven om den kan göras i vilken form som helst) med ett enkelt kommando:

/wb set <раЮоус ĐČ Đ±Đ»ĐŸĐșах> spawn

Om spelkaraktÀren försöker korsa grÀnsen kommer de att skickas tillbaka nÄgra block. Om detta görs flera gÄnger under en begrÀnsad tid, kommer förövaren att tvingas teleporteras till spawnpunkten. Förhandsgenereringen av vÀrlden utförs Ànnu enklare med kommandot:

/wb fill

Eftersom denna ÄtgÀrd potentiellt kan pÄverka spelare som Àr pÄ servern, glöm inte att bekrÀfta utförandet:

/wb confirm

Totalt sett tog det ungefÀr 2 timmar att generera en vÀrld med en radie pÄ 5000 block (~40 miljarder block) pÄ en IntelŸ XeonŸ Gold 6240-processor. SÄ om du vill starta en pregenerering av en större karta, kom ihÄg att denna process kommer att ta en avsevÀrd tid och TPS för servern kommer att minskas avsevÀrt. Dessutom, kom ihÄg att Àven en radie pÄ 5000 block kommer att krÀva cirka 2 GB diskutrymme.

Trots att den senaste versionen av pluginen utvecklades för Minecraft version 1.14, har det visat sig genom praktiska tester att den fungerar utmÀrkt Àven pÄ senare versioner. En fullstÀndig lista över kommandon med förklaringar Àr tillgÀnglig pÄ pluginens forum.

Problematiska block

Det finns mÄnga olika typer av block i Minecraft. Men vi vill sÀrskilt uppmÀrksamma lÀsarna pÄ ett block som heter TNT. Som namnet antyder, Àr detta block en explosiv substans (redaktionsnotering - detta Àr ett spelobjekt i den virtuella vÀrlden och har inget att göra med verkliga sprÀngÀmnen). Dess sÀrskildhet Àr att nÀr det aktiveras börjar gravitationskraften verka pÄ det. Detta fÄr servern att berÀkna alla koordinater, om blocket börjar falla vid det tillfÀllet.

Om det finns flera TNT-block, sĂ„ fĂ„r detonationen av ett block Ă€ven de nĂ€rliggande blocken att detonera och gravitationen aktiveras, vilket sprider dem Ă„t alla hĂ„ll. Hela denna vackra mekanik pĂ„ serversidan ser ut som mĂ„nga operationer för att berĂ€kna banan för varje block och interaktion med grannblock. Uppgiften Ă€r extremt resurskrĂ€vande, vilket vem som helst kan bekrĂ€fta. Generera och sprĂ€ng en kub av TNT-block som Ă€r Ă„tminstone 30x30x30 stor. Och om du trodde att du hade en bra kraftfull spel dator, sĂ„ har du fel 😉

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

Optimisering av Minecraft-servern
Ett sÄdant "experiment" pÄ en server med IntelŸ XeonŸ Gold 6240 ledde till en allvarlig "sÀnkning" av TPS och 80% processorbelastning under hela detonationen av blocken. DÀrför, om nÄgon av spelarna lyckas genomföra nÄgot liknande, sÄ kommer prestandaproblemet att pÄverka alla spelare som Àr pÄ servern.

Ett Ă€nnu hĂ„rdare alternativ Ă€r Ändkristaller. Om TNT exploderar sekventiellt, sĂ„ detonerar Ändkristallerna alla samtidigt, vilket teoretiskt kan stoppa serverapplikationens funktion helt.

Detta scenario kan undvikas endast genom att helt förbjuda anvÀndningen av dessa block i spelvÀrlden. Till exempel med hjÀlp av pluginet WorldGuard. Observera att detta plugin i sig inte fungerar utan ett annat plugin WorldEdit. SÄ installera först WorldEdit och sedan WorldGuard.

Slutsats

Att hantera en spelserver pÄ rÀtt sÀtt Àr ingen lÀtt uppgift. SvÄrigheter och nedgÄng i prestanda kommer att vÀnta pÄ varje steg, sÀrskilt om man inte tar hÀnsyn till sjÀlva spelmekaniken. Det Àr omöjligt att förutse allt, eftersom spelare ibland kan vara mycket kreativa i sina försök att tvinga servern att utföra funktioner som den inte var avsedd för. Endast en förnuftig balans mellan risker och satta begrÀnsningar kommer att göra att servern kan fungera kontinuerligt utan att sÀnka sin prestanda till kritiska nivÄer.

Under karantÀnen saknade nÄgra av vÄra anstÀllda sina Àlskade kontor och beslutade att Äterskapa dem inom Minecraft. Ni har ocksÄ chansen att hÀlsa pÄ oss utan att riskera er hÀlsa och utan att slösa tid pÄ resan.

Vi inbjuder alla intresserade till vÄr server minecraft.selectel.ru (klientversion 1.15.2), dÀr datacenterna Blomstra-1 och Blomstra-2 har Äterskapats. Glöm inte att godkÀnna nedladdning av ytterligare resurser, de Àr nödvÀndiga för korrekt visning av vissa platser.

Du kan se fram emot quests, rabattkoder, "pÄskÀgg" och trevligt umgÀnge.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster