På bloggen vår har vi allerede
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
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
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
Å installere Bukkit er ikke vanskelig; de tilsvarende instruksjonene er på ressursen
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.
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å
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
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
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
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
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
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
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