
I vÄr blogg har vi redan , 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 , 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 och arkitekturverk. Allt begrÀnsas bara av spelarens fantasi och speluniversums möjligheter.

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 . Detta gör det möjligt att skapa sin egen 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 , 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 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 . Men detta Àr meningslöst eftersom Bukkit-laget upplöstes 2014, och projektutvecklarna blev anstÀllda pÄ Mojang Studios, och À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 , tog utgÄngspunkt i Bukkit-kÀrnan och omarbetade den för att uppnÄ bÀttre pÄlitlighet och prestanda. Trots det bannades projektet pÄ grund av lagen om upphovsrÀtt i den digitala tidsÄldern (), 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Ă„ anges den största fördelen att âdet Ă€r sjukt snabbtâ. Det utvecklade 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 .
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 . 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 (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. .
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 <ŃаЎОŃŃ ĐČ Đ±Đ»ĐŸĐșаŃ
> spawnOm 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 fillEftersom denna ÄtgÀrd potentiellt kan pÄverka spelare som Àr pÄ servern, glöm inte att bekrÀfta utförandet:
/wb confirmTotalt 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 .
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 
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 . Observera att detta plugin i sig inte fungerar utan ett annat plugin . 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
