Minecraft serveroptimalisering

Minecraft serveroptimalisering
På bloggen vår har vi allerede fortalte, hvordan lage din egen Minecraft-server, men 5 år har gått siden da og mye har endret seg. Vi deler nåværende måter å lage og optimalisere serverdelen av et så populært spill med deg.

I løpet av sin 9-årige historie (regnet fra utgivelsesdatoen), har Minecraft tjent et utrolig antall fans og hatere blant både vanlige spillere og nerder. Det enkle konseptet med en verden laget av blokker har utviklet seg fra en enkel form for underholdning til et universelt medium for å kommunisere og skape ulike objekter fra den virkelige verden.

I tillegg til konstruksjon har spillet muligheten til å skape logikk, som lar deg implementere fullverdige algoritmer inne i Minecraft. YouTube er fullt av veldig imponerende videoer der folk, etter å ha lagt ned en enorm innsats og brukt mye tid, har laget en kopi av denne eller den elektroniske enheten eller bygget en detaljert kopi eksisterende и fiktiv arkitektoniske strukturer. Alt begrenses kun av spillerens fantasi og mulighetene i spilluniverset.


Men la oss ikke snakke videre om nøyaktig hva spillerne lager, men la oss se på serverdelen av applikasjonen og fremheve problemene (noen ganger svært komplekse) som kan oppstå under drift under belastning. La oss ta en reservasjon med en gang at vi bare vil snakke om Java Edition.

Typer servere

Det enkleste alternativet er en server innebygd i spillklienten. Vi skapte en verden, trykket på én knapp, og serveren ble tilgjengelig over det lokale nettverket. Dette alternativet tåler ikke noen alvorlig belastning, og derfor vil vi ikke engang vurdere det.

vanilje

Mojang Studios distribuerer serverdelen av spillet som en Java-applikasjon gratis på den offisielle hjemmesiden. Dette lar deg lage din egen dedikert server og personlig verden, noe som gjør den tilgjengelig for tilkobling fra hvor som helst på planeten. For de som gjør dette for første gang, er det en flott opplæringen, tilgjengelig på den tilsvarende gaming Wiki.

Denne tilnærmingen har en alvorlig ulempe, nemlig mangelen på ferdige muligheter for å koble til plugins som utvider funksjonaliteten til serveren og tillater ikke bare å automatisere mange prosesser, men også å optimere ytelsen. I tillegg har den offisielle serveren et ganske stort RAM-forbruk for hver tilkoblet spiller.

bukkit

En serverapplikasjon laget av entusiaster basert på Vanilla-versjonen bukkit utvidet spillets muligheter betydelig ved å støtte plugins og modifikasjoner (modifikasjoner). Det tillot ikke bare å legge til nye blokker til spillingen, men også å utføre forskjellige manipulasjoner som var utilgjengelige for vaniljeprogramvare. Interessant nok krevde denne applikasjonen betydelig mindre minne.

Å installere Bukkit er ikke vanskelig; de tilsvarende instruksjonene er på ressursen GamePedia. Men dette gir ingen mening, siden Bukkit-teamet har oppløst siden 2014, har prosjektutviklerne blitt ansatte i Mojang Studios, og oppbevaringssted forlatt. Dermed er Bukkit i realiteten død, og det er fornuftig å ta hensyn til de to neste prosjektene.

SpigotMC

For å gjøre livet enklere for plugin-utviklere, var det behov for en API for å samhandle med spillverdenen. Dette er akkurat problemet som skaperne løste. Stuss, tar Bukkit-kjernen og omarbeider den for å oppnå bedre pålitelighet og ytelse. Likevel, Git repository prosjektet ble blokkert på grunn av Digital Millennium Copyright Act (DMCA), og det er umulig å laste ned kildekoden derfra.

For tiden er SpigotMC aktivt utviklet og brukt. Den støtter alle plugins laget for Bukkit, men er ikke bakoverkompatibel med den. For å komme rundt DMCA Takedown ble en elegant metode kalt BuildTools oppfunnet. Dette verktøyet eliminerer behovet for å distribuere en kompilert applikasjon og lar brukere kompilere Spigot, CraftBukkit og Bukkit fra kildekoden. Alt dette gjør DMCA-forbudet ubrukelig.

PaperMC

Alt virket kult, og Spigot ble et flott alternativ. Men dette var ikke nok for noen entusiaster, og de skapte sin egen gaffel av Spigot "på steroider." På prosjektsiden den viktigste fordelen er at "det er fort dumt". Utviklet samfunnet lar deg raskt løse nye problemer, og den utvidede API lar deg lage interessante plugins. Du kan starte PaperMC med én enkel kommando, gitt inn dokumentasjon.

PaperMC har utmerket kompatibilitet, så plugins skrevet for SpigotMC kan enkelt fungere på PaperMC, men uten offisiell støtte. Bakoverkompatibilitet med SpigotMC er også til stede. Nå som vi har listet opp de ulike alternativene for å lage en server, la oss gå videre til ytelsesproblemene som kan oppstå.

Problemer og løsninger

Det viktigste du trenger å forstå er at alt relatert til prosessering av spillverdenen kun vil bli behandlet på én datakjerne på den fysiske serveren. Så hvis du plutselig har en utmerket server med et dusin datakjerner, vil bare én bli lastet. Alle andre vil være praktisk talt inaktive. Dette er arkitekturen til applikasjonen, og det er ingenting du kan gjøre med det. Så når du velger en server, bør du ikke ta hensyn til antall kjerner, men til klokkefrekvensen. Jo høyere den er, desto bedre blir ytelsen.

Når det gjelder spørsmålet om RAM-kapasitet, bør vi gå ut fra følgende indikatorer:

  • planlagt antall spillere;
  • planlagt antall verdener på serveren;
  • størrelsen på hver verden.

Det bør huskes at en Java-applikasjon alltid trenger en reserve av RAM. Hvis du forventer et minneforbruk på 8 gigabyte, så må du faktisk ha 12. Tallene er relative, men essensen endres ikke.

For å starte serverdelen anbefaler vi å bruke flaggene spesifisert i artikkelen Stille inn JVM – G1GC søppelsamlerflagg for Minecraft. Denne "svarte magien" lar serveren konfigurere "søppelsamleren" riktig og optimalisere bruken av RAM. Du bør ikke tildele mer minne enn serveren faktisk bruker under den høyeste tilstrømningen av spillere.

Generer et blokkkart

"Tror du virkelig at månen bare eksisterer når du ser på den?" (Albert Einstein)

Helt ny server. Så snart spilleren kobler seg til for første gang, dukker spillkarakteren opp på det generelle samlingspunktet (spawn). Dette er det eneste stedet der spillverdenen er forhåndsgenerert av serveren. I samme øyeblikk ser klientdelen på innstillingene, og nøkkelparameteren er tegneavstanden. Det måles i biter (kartområdet er 16×16 og 256 blokker høyt) Hvor mange biter som er angitt er nøyaktig hvor mange som vil bli forespurt fra serveren.

Serveren lagrer et globalt kart over verden, og hvis det ikke er noen genererte blokker i det ennå på tidspunktet for utseendet til spillkarakteren, genererer serveren dem dynamisk og lagrer dem. Ikke bare krever dette store dataressurser, men det øker også hele tiden størrelsen på verdenskartet. På en av de eldste anarkistiske serverne 2b2t (2builders2tools) Størrelsen på kartet har allerede passert 8 Tb, og verdens grense er på rundt 30 millioner blokker. Det er tusenvis av historier knyttet til denne serveren, og den fortjener sin egen artikkel i serien.

Det er ikke noe problem å skape en verden rundt én spiller. Å generere en verden rundt hundrevis av spillere vil føre til mindre servernedsettelser i en kort periode, hvoretter belastningen vil avta. Å generere en verden med klientgjengivelsesavstand rundt tusen spillere er allerede i stand til å "slippe" serveren og kaste alle klienter ut av den på grunn av en timeout.

I serverprogramvaren er det en verdi som f.eks TPS (Ticks per Server - ticks per second). Normalt er 1 klokkesyklus lik 50 ms. (1 sekund av den virkelige verden er lik 20 tikker av spillverdenen). Hvis behandlingen av en hake øker til 60 sekunder, vil serverapplikasjonen bli lukket, og alle spillere blir kastet ut.

Løsningen er å begrense verden til visse koordinater og utføre foreløpig blokkgenerering. Dermed fjerner vi behovet for dynamisk generering under spillet, og serveren trenger kun å lese et eksisterende kart. Begge problemene kan løses med én enkelt plugin Verdensgrense.

Den enkleste måten er å sette verdensgrensen i form av en sirkel i forhold til gytepunktet (selv om du kan gjøre det av hvilken som helst form) med én kommando:

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

Hvis spillerkarakteren prøver å krysse grensen, vil han bli skjøvet tilbake flere blokker. Hvis dette gjøres flere ganger innen en begrenset tid, vil lovbryteren bli tvunget teleportert til spawn-punktet. Forhåndsgenerering av verden gjøres enda enklere, med kommandoen:

/wb fill

Siden denne handlingen potensielt kan påvirke spillere på serveren, sørg for å bekrefte:

/wb confirm

Totalt tok det omtrent 5000 timer å generere en verden med en radius på 40 blokker (~2 milliarder blokker) på en Intel® Xeon® Gold 6240-prosessor. Derfor, hvis du ønsker å forhåndsgenerere et større kart, vær oppmerksom på at denne prosessen vil ta anstendig tid, og serverens TPS vil bli alvorlig redusert. Husk også at selv en radius på 5000 blokker vil kreve omtrent 2 GB diskplass.

Til tross for at den siste versjonen av pluginet ble utviklet for Minecraft versjon 1.14, ble det eksperimentelt funnet ut at det fungerer utmerket på påfølgende versjoner. En komplett liste over kommandoer med forklaringer er tilgjengelig på plugin-forumet.

Problemblokker

Det er et stort utvalg av blokker i Minecraft. Vi vil imidlertid gjøre leserne oppmerksomme på en slik blokk som TNT. Som navnet antyder, er denne blokken et eksplosiv (redaktørens merknad - dette er et spillelement fra den virtuelle verden, og dette elementet har ingenting med ekte eksplosiver). Dens særegenhet er slik at i aktiveringsøyeblikket begynner tyngdekraften å virke på den. Dette tvinger serveren til å beregne alle koordinater hvis blokken i dette øyeblikket begynner å falle.

Hvis det er flere TNT-blokker, forårsaker detonasjonen av en blokk detonasjon og aktivering av tyngdekraften i naboblokker, og sprer dem i alle retninger. All denne vakre mekanikken på serversiden ser ut som mange operasjoner for å beregne banen til hver blokk, samt interaksjon med naboblokker. Oppgaven er ekstremt ressurskrevende, som alle enkelt kan sjekke. Generer og detoner en kube fra TNT-blokker som er minst 30x30x30 i størrelse. Og hvis du trodde at du hadde en god, kraftig spilldatamaskin, tok du veldig feil 😉

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

Minecraft serveroptimalisering
Et lignende "eksperiment" på en server med Intel® Xeon® Gold 6240 førte til et alvorlig TPS-fall og 80 % CPU-belastning under hele blokkdetonasjonstiden. Derfor, hvis en spiller er i stand til å gjøre dette, vil ytelsesproblemet påvirke alle spillere på serveren.

Et enda tøffere alternativ - Kantkrystaller. Hvis TNT likevel eksploderer sekvensielt, detonerer Edge Crystals alle samtidig, noe som i teorien kan stoppe driften av serverapplikasjonen fullstendig.

Dette scenariet kan bare unngås ved å fullstendig forby bruken av disse blokkene i spillverdenen. For eksempel ved å bruke plugin Verdensvakt. Vær oppmerksom på at denne plugin i seg selv ikke fungerer uten en annen plugin WorldEdit. Så installer WorldEdit først, og deretter WorldGuard.

Konklusjon

Riktig administrasjon av en spillserver er ikke en lett oppgave. Vanskeligheter og redusert ytelse vil vente deg ved hver sving, spesielt hvis du ikke tar hensyn til selve spillmekanikken. Det er umulig å forutse alt, fordi spillere noen ganger kan være veldig kreative når de prøver å tvinge serveren til å gjøre noe den ikke var ment for. Bare en rimelig balanse mellom risiko og etablerte restriksjoner vil tillate serveren å operere kontinuerlig og ikke redusere ytelsen til kritiske verdier.

Under karantene savnet noen av våre ansatte favorittkontorene sine og bestemte seg for å gjenskape dem inne i Minecraft. Du har også en sjanse til å besøke oss uten å risikere helsen eller kaste bort tid på veien.

For å gjøre dette inviterer vi alle til serveren vår minecraft.selectel.ru (klientversjon 1.15.2), hvor datasentrene Tsvetochnaya-1 og Tsvetochnaya-2 ble gjenskapt. Ikke glem å godta å laste ned tilleggsressurser, de er nødvendige for riktig visning av enkelte steder.

Oppdrag, kampanjekoder, påskeegg og hyggelig kommunikasjon venter på deg.

Kilde: www.habr.com

Legg til en kommentar