Minecraft server optimering

Minecraft server optimering
På vores blog har vi allerede fortalt, hvordan du opretter din egen Minecraft-server, men der er gået 5 år siden da, og meget har ændret sig. Vi deler aktuelle måder at skabe og optimere serverdelen af ​​et så populært spil med dig.

I løbet af sin 9-årige historie (regnet fra udgivelsesdatoen) har Minecraft tjent et utroligt antal fans og hadere blandt både almindelige spillere og nørder. Det enkle koncept med en verden lavet af blokke har udviklet sig fra en simpel form for underholdning til et universelt medium til at kommunikere og skabe forskellige objekter fra den virkelige verden.

Udover konstruktion har spillet evnen til at skabe logik, som giver dig mulighed for at implementere fuldgyldige algoritmer inde i Minecraft. YouTube er fuld af meget imponerende videoer, hvor folk, der har gjort en enorm indsats og brugt en masse tid, har lavet en kopi af den eller den elektroniske enhed eller bygget en detaljeret kopi eksisterende и fiktive arkitektoniske strukturer. Alt er kun begrænset af gamerens fantasi og spiluniversets muligheder.


Men lad os ikke tale yderligere om, hvad spillerne præcist skaber, men lad os se på serverdelen af ​​applikationen og fremhæve de problemer (nogle gange meget komplekse), der kan opstå under drift under belastning. Lad os tage en reservation med det samme, at vi kun vil tale om Java Edition.

Typer af servere

Den enkleste mulighed er en server indbygget i spilklienten. Vi skabte en verden, trykkede på én knap, og serveren blev tilgængelig over det lokale netværk. Denne mulighed kan ikke modstå nogen alvorlig belastning, og derfor vil vi ikke engang overveje det.

Vanilje

Mojang Studios distribuerer serverdelen af ​​spillet som en Java-applikation gratis på den officielle hjemmeside. Dette giver dig mulighed for at skabe din egen dedikeret server og personlig verden, hvilket gør den tilgængelig for forbindelse fra hvor som helst på planeten. For dem, der gør dette for første gang, er der en fantastisk tutorial, tilgængelig på den tilsvarende gaming Wiki.

Denne tilgang har en alvorlig ulempe, nemlig manglen på out-of-the-box-kapaciteter til at forbinde plugins, der udvider serverens funktionalitet og tillader ikke kun at automatisere mange processer, men også at optimere ydeevnen. Derudover har den officielle server et ret stort RAM-forbrug for hver tilsluttet afspiller.

bukkit

En serverapplikation skabt af entusiaster baseret på Vanilla-versionen bukkit betydeligt udvidet spillets muligheder ved at understøtte plugins og mods (modifikationer). Det tillod ikke kun at tilføje nye blokke til gameplayet, men også at udføre forskellige manipulationer, der var utilgængelige for vaniljesoftware. Interessant nok krævede denne applikation betydeligt mindre hukommelse.

Det er ikke svært at installere Bukkit; de tilsvarende instruktioner er på ressourcen GamePedia. Men dette giver ingen mening, da Bukkit-teamet er gået i opløsning siden 2014, er projektudviklerne blevet ansatte i Mojang Studios, og depot forladt. Dermed er Bukkit reelt død, og det giver mening at være opmærksom på de næste to projekter.

SpigotMC

For at gøre livet lettere for plugin-udviklere var der behov for en API til at interagere med spilverdenen. Det er præcis det problem, skaberne løste. Studs, tager Bukkit-kernen og omarbejder den for at opnå bedre pålidelighed og ydeevne. Alligevel, Git repository projektet blev blokeret på grund af Digital Millennium Copyright Act (DMCA), og det er umuligt at downloade kildekoden derfra.

I øjeblikket udvikles og bruges SpigotMC aktivt. Det understøtter alle plugins oprettet til Bukkit, men er ikke bagudkompatibelt med det. For at komme uden om DMCA Takedown blev en elegant metode kaldet BuildTools opfundet. Dette værktøj eliminerer behovet for at distribuere en kompileret applikation og giver brugerne mulighed for at kompilere Spigot, CraftBukkit og Bukkit fra kildekoden. Alt dette gør DMCA-forbuddet ubrugeligt.

PaperMC

Alt virkede fedt, og Spigot blev en god mulighed. Men dette var ikke nok for nogle entusiaster, og de skabte deres egen gaffel af Spigot "på steroider." På projektside den vigtigste fordel er, at "det er hurtigt dumt". Udviklede sig fællesskab giver dig mulighed for hurtigt at løse nye problemer, og den udvidede API giver dig mulighed for at oprette interessante plugins. Du kan starte PaperMC med en simpel kommando, givet i dokumentation.

PaperMC har fremragende kompatibilitet, så plugins skrevet til SpigotMC kan nemt fungere på PaperMC, men uden officiel support. Bagudkompatibilitet med SpigotMC er også til stede. Nu hvor vi har listet de forskellige muligheder for at oprette en server, lad os gå videre til de præstationsproblemer, der kan opstå.

Problemer og løsninger

Det vigtigste, du skal forstå, er, at alt relateret til behandling af spilverdenen kun vil blive behandlet på én computerkerne på den fysiske server. Så hvis du pludselig har en fremragende server med et dusin computerkerner, så vil kun én blive indlæst. Alle andre vil være praktisk talt ledige. Dette er applikationens arkitektur, og du kan ikke gøre noget ved det. Så når du vælger en server, skal du ikke være opmærksom på antallet af kerner, men på clockfrekvensen. Jo højere den er, jo bedre bliver ydeevnen.

Med hensyn til spørgsmålet om RAM-kapacitet bør vi gå ud fra følgende indikatorer:

  • planlagt antal spillere;
  • planlagt antal verdener på serveren;
  • størrelsen af ​​hver verden.

Det skal huskes, at en Java-applikation altid har brug for en reserve af RAM. Hvis du forventer et hukommelsesforbrug på 8 gigabyte, så skal du faktisk have 12. Tallene er relative, men essensen ændrer sig ikke.

For at starte serverdelen anbefaler vi at bruge de flag, der er angivet i artiklen Tuning af JVM – G1GC Garbage Collector Flags til Minecraft. Denne "sorte magi" gør det muligt for serveren at konfigurere "skraldesamleren" korrekt og optimere brugen af ​​RAM. Du bør ikke allokere mere hukommelse, end serveren faktisk bruger under den højeste tilstrømning af spillere.

Generering af et blokkort

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

Helt ny server. Så snart spilleren har oprettet forbindelse for første gang, dukker spilkarakteren op ved det generelle samlingspunkt (spawn). Dette er det eneste sted, hvor spilverdenen er prægenereret af serveren. I samme øjeblik ser klientdelen på indstillingerne, og nøgleparameteren er tegneafstanden. Det måles i bidder (kortområdet er 16×16 og 256 blokke højt) Hvor mange bidder der er angivet, er nøjagtigt hvor mange der vil blive anmodet om fra serveren.

Serveren gemmer et globalt kort over verden, og hvis der endnu ikke er genererede blokke i det på det tidspunkt, hvor spilkarakteren dukker op, genererer serveren dem dynamisk og gemmer dem. Dette kræver ikke kun store computerressourcer, men det øger også konstant størrelsen af ​​verdenskortet. På en af ​​de ældste anarkistiske servere 2b2t (2builders2tools) Størrelsen af ​​kortet har allerede overskredet 8 Tb, og verdens grænse er på omkring 30 millioner blokke. Der er tusindvis af historier forbundet med denne server, og den fortjener sin egen artikel i serien.

At skabe en verden omkring én spiller er ikke et problem. Generering af en verden omkring hundredvis af spillere vil forårsage mindre server-opbremsninger i kort tid, hvorefter belastningen vil falde. At generere en verden på klientgengivelsesafstand omkring tusind spillere er allerede i stand til at "droppe" serveren og smide alle klienter ud af den på grund af en timeout.

I serversoftwaren er der en værdi som f.eks TPS (Ticks per Server - ticks per second). Normalt er 1 urcyklus lig med 50 ms. (1 sekund af den virkelige verden er lig med 20 krydser af spilverdenen). Hvis behandlingen af ​​et flueben stiger til 60 sekunder, lukkes serverapplikationen og smider alle spillere ud.

Løsningen er at begrænse verden til bestemte koordinater og udføre foreløbig blokgenerering. Dermed fjerner vi behovet for dynamisk generering under spillet, og serveren skal kun læse et eksisterende kort. Begge problemer kan løses med et enkelt plugin Verdensgrænse.

Den nemmeste måde er at sætte verdensgrænsen i form af en cirkel i forhold til spawn-punktet (selvom du kan gøre det af enhver form) med én kommando:

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

Hvis spillerens karakter forsøger at krydse grænsen, vil han blive skubbet flere blokke tilbage. Hvis dette gøres flere gange inden for en begrænset tid, vil gerningsmanden blive tvunget teleporteret til spawn-punktet. Forgenerering af verden gøres endnu enklere med kommandoen:

/wb fill

Da denne handling potentielt kan påvirke spillere på serveren, skal du sørge for at bekræfte:

/wb confirm

I alt tog det cirka 5000 timer at generere en verden med en radius på 40 blokke (~2 milliarder blokke) på en Intel® Xeon® Gold 6240-processor. Hvis du derfor vil prægenerere et større kort, skal du være opmærksom på, at denne proces vil tage en anstændig mængde tid, og serverens TPS vil blive alvorligt reduceret. Husk også, at selv en radius på 5000 blokke vil kræve cirka 2 GB diskplads.

På trods af at den seneste version af pluginet blev udviklet til Minecraft version 1.14, blev det eksperimentelt fundet ud af, at det fungerer fantastisk på efterfølgende versioner. En komplet liste over kommandoer med forklaringer er tilgængelig på plugin-forummet.

Problemblokke

Der er et stort udvalg af blokke i Minecraft. Vi vil dog gerne henlede læsernes opmærksomhed på sådan en blok som TNT. Som navnet antyder, er denne blok et sprængstof (redaktørens bemærkning - dette er et spilelement fra den virtuelle verden, og dette element har intet med rigtige sprængstoffer). Dens ejendommelighed er sådan, at tyngdekraften i aktiveringsøjeblikket begynder at virke på den. Dette tvinger serveren til at beregne alle koordinater, hvis blokken i dette øjeblik begynder at falde.

Hvis der er flere TNT-blokke, forårsager detonationen af ​​en blok detonation og aktivering af tyngdekraften i naboblokke, hvilket spreder dem i alle retninger. Al denne smukke mekanik på serversiden ligner en masse operationer for at beregne banen for hver blok, samt interaktion med naboblokke. Opgaven er ekstremt ressourcekrævende, hvilket enhver let kan tjekke. Generer og detoner en terning fra TNT-blokke, der er mindst 30x30x30 i størrelse. Og hvis du troede, at du havde en god, kraftfuld gaming-computer, tog du meget fejl 😉

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

Minecraft server optimering
Et lignende "eksperiment" på en server med Intel® Xeon® Gold 6240 førte til et alvorligt TPS-fald og 80 % CPU-belastning under hele blokdetonationstiden. Derfor, hvis en spiller er i stand til at gøre dette, så vil præstationsproblemet påvirke alle spillere på serveren.

En endnu sværere mulighed - Kantkrystaller. Hvis TNT alligevel eksploderer sekventielt, så detonerer Edge Crystals alle på samme tid, hvilket i teorien fuldstændig kan stoppe driften af ​​serverapplikationen.

Dette scenarie kan kun undgås ved fuldstændigt at forbyde brugen af ​​disse blokke i spilverdenen. For eksempel ved hjælp af plugin Verdensvagt. Bemærk venligst, at dette plugin i sig selv ikke virker uden et andet plugin worldedit. Så installer WorldEdit først, og derefter WorldGuard.

Konklusion

Korrekt styring af en spilserver er ikke en nem opgave. Vanskeligheder og nedsat ydeevne vil vente på dig ved hver tur, især hvis du ikke tager selve gameplaymekanikken i betragtning. Det er umuligt at forudse alt, fordi spillere nogle gange kan være meget kreative i forsøget på at tvinge serveren til at gøre noget, som det ikke var beregnet til. Kun en rimelig balance mellem risici og etablerede restriktioner vil tillade serveren at fungere kontinuerligt og ikke reducere dens ydeevne til kritiske værdier.

Under karantæne savnede nogle af vores medarbejdere deres yndlingskontorer og besluttede at genskabe dem i Minecraft. Du har også en chance for at komme og besøge os uden at risikere dit helbred eller spilde tid på vejen.

For at gøre dette inviterer vi alle til vores server minecraft.selectel.ru (klientversion 1.15.2), hvor datacentrene Tsvetochnaya-1 og Tsvetochnaya-2 blev genskabt. Glem ikke at acceptere at downloade yderligere ressourcer, de er nødvendige for den korrekte visning af nogle steder.

Quests, kampagnekoder, påskeæg og behagelig kommunikation venter på dig.

Kilde: www.habr.com

Tilføj en kommentar