Pag-optimize ng server ng Minecraft

Pag-optimize ng server ng Minecraft
Sa aming blog mayroon na kami sinabi, kung paano lumikha ng iyong sariling Minecraft server, ngunit 5 taon na ang lumipas mula noon at marami ang nagbago. Ibinabahagi namin sa iyo ang mga kasalukuyang paraan upang lumikha at ma-optimize ang bahagi ng server ng isang sikat na laro.

Sa loob ng 9 na taong kasaysayan nito (nagbibilang mula sa petsa ng paglabas), ang Minecraft ay nakakuha ng kamangha-manghang bilang ng mga tagahanga at mga haters sa parehong mga ordinaryong manlalaro at geeks. Ang simpleng konsepto ng isang mundong gawa sa mga bloke ay umunlad mula sa isang simpleng anyo ng entertainment tungo sa isang unibersal na daluyan para sa pakikipag-usap at paglikha ng iba't ibang mga bagay mula sa totoong mundo.

Bilang karagdagan sa pagbuo, ang laro ay may kakayahang lumikha lohika, na nagbibigay-daan sa iyong ipatupad ang mga ganap na algorithm sa loob ng Minecraft. Ang YouTube ay puno ng napakakahanga-hangang mga video kung saan ang mga tao, sa paggawa ng malaking pagsisikap at paggugol ng maraming oras, ay nakagawa ng kopya nito o ng elektronikong device na iyon o gumawa ng detalyadong kopya umiiral и kathang-isip mga istrukturang arkitektura. Ang lahat ay nalilimitahan lamang ng imahinasyon ng gamer at ang mga posibilidad ng gaming universe.


Ngunit huwag na nating pag-usapan kung ano ang eksaktong nilikha ng mga manlalaro, ngunit tingnan natin ang bahagi ng server ng application at i-highlight ang mga problema (kung minsan ay napakasalimuot) na maaaring lumitaw sa panahon ng operasyon sa ilalim ng pag-load. Magpareserba tayo kaagad na ang Java Edition lang ang pag-uusapan natin.

Mga uri ng mga server

Ang pinakasimpleng opsyon ay isang server na binuo sa client ng laro. Gumawa kami ng mundo, pinindot ang isang button, at naging accessible ang server sa lokal na network. Ang pagpipiliang ito ay hindi makatiis sa anumang seryosong pagkarga, at samakatuwid ay hindi namin ito isasaalang-alang.

vanilla

Ibinabahagi ng Mojang Studios ang bahagi ng server ng laro bilang isang Java application nang libre sa opisyal na website. Pinapayagan ka nitong lumikha ng iyong sarili nakalaang server at personal na mundo, ginagawa itong naa-access para sa koneksyon mula saanman sa planeta. Para sa mga taong gagawa nito sa unang pagkakataon, mayroong isang mahusay pagtuturo, available sa kaukulang gaming Wiki.

Ang diskarte na ito ay may isang malubhang disbentaha, lalo na ang kakulangan ng mga out-of-the-box na kakayahan upang kumonekta sa mga plugin na nagpapalawak ng pag-andar ng server at nagbibigay-daan hindi lamang upang i-automate ang maraming mga proseso, kundi pati na rin upang i-optimize ang pagganap. Bilang karagdagan, ang opisyal na server ay may medyo malaking pagkonsumo ng RAM para sa bawat konektadong manlalaro.

bukkit

Isang server application na nilikha ng mga mahilig batay sa bersyon ng Vanilla bukkit makabuluhang pinalawak ang mga kakayahan ng laro sa pamamagitan ng pagsuporta sa mga plugin at mods (mga pagbabago). Pinapayagan hindi lamang magdagdag ng mga bagong bloke sa gameplay, kundi pati na rin upang magsagawa ng iba't ibang mga manipulasyon na hindi naa-access sa vanilla software. Nang kawili-wili, ang application na ito ay nangangailangan ng mas kaunting memorya.

Ang pag-install ng Bukkit ay hindi mahirap; ang kaukulang mga tagubilin ay nasa mapagkukunan GamePedia. Ngunit ito ay walang katuturan, dahil mula noong 2014 ang koponan ng Bukkit ay nabuwag, ang mga developer ng proyekto ay naging mga empleyado ng Mojang Studios, at imbakan inabandona. Kaya, epektibong patay ang Bukkit, at makatuwirang bigyang-pansin ang susunod na dalawang proyekto.

SpigotMC

Upang gawing mas madali ang buhay para sa mga developer ng plugin, nagkaroon ng pangangailangan para sa isang API upang makipag-ugnayan sa mundo ng laro. Ito mismo ang problema na nalutas ng mga tagalikha. pasak, kinuha ang Bukkit core at muling ginagawa ito upang makamit ang mas mahusay na pagiging maaasahan at pagganap. gayunpaman, Git repository na-block ang proyekto dahil sa Digital Millennium Copyright Act (DMCA), at imposibleng i-download ang source code mula doon.

Sa kasalukuyan, ang SpigotMC ay aktibong binuo at ginagamit. Sinusuportahan nito ang lahat ng mga plugin na nilikha para sa Bukkit, ngunit hindi pabalik na katugma dito. Upang makalibot sa DMCA Takedown, isang eleganteng paraan na tinatawag na BuildTools ang naimbento. Ang tool na ito ay nag-aalis ng pangangailangang ipamahagi ang isang pinagsama-samang application at pinapayagan ang mga user na i-compile ang Spigot, CraftBukkit at Bukkit mula sa source code. Ang lahat ng ito ay ginagawang walang silbi ang pagbabawal ng DMCA.

PaperMC

Ang lahat ay tila cool, at ang Spigot ay naging isang mahusay na pagpipilian. Ngunit hindi ito sapat para sa ilang mahilig, at gumawa sila ng sarili nilang tinidor ng Spigot "sa mga steroid." Naka-on pahina ng proyekto ang pangunahing bentahe ay na "Ito ay hangal mabilis". Umunlad pamayanan nagbibigay-daan sa iyong mabilis na lutasin ang mga umuusbong na isyu, at ang pinalawig na API ay nagbibigay-daan sa iyong lumikha ng mga kawili-wiling plugin. Maaari mong ilunsad ang PaperMC sa isang simpleng utos, ibinigay sa dokumentasyon.

Ang PaperMC ay may mahusay na compatibility, kaya ang mga plugin na isinulat para sa SpigotMC ay madaling gumana sa PaperMC, ngunit walang opisyal na suporta. Naroroon din ang backward compatibility sa SpigotMC. Ngayong nailista na natin ang iba't ibang opsyon para sa paggawa ng server, magpatuloy tayo sa mga isyu sa pagganap na maaaring lumitaw.

Problema at solusyon

Ang pangunahing bagay na kailangan mong maunawaan ay ang lahat ng bagay na nauugnay sa pagproseso ng mundo ng laro ay ipoproseso lamang sa isang computing core ng pisikal na server. Kaya't kung biglang mayroon kang isang mahusay na server na may isang dosenang mga core ng computing, kung gayon isa lamang ang mailo-load. Ang lahat ng iba ay halos walang ginagawa. Ito ang arkitektura ng application, at wala kang magagawa tungkol dito. Kaya kapag pumipili ng isang server, dapat mong bigyang pansin hindi ang bilang ng mga core, ngunit sa dalas ng orasan. Kung mas mataas ito, mas magiging mahusay ang pagganap.

Tungkol sa isyu ng kapasidad ng RAM, dapat tayong magpatuloy mula sa mga sumusunod na tagapagpahiwatig:

  • nakaplanong bilang ng mga manlalaro;
  • nakaplanong bilang ng mga mundo sa server;
  • ang laki ng bawat mundo.

Dapat tandaan na ang isang Java application ay palaging nangangailangan ng isang reserba ng RAM. Kung inaasahan mo ang pagkonsumo ng memorya ng 8 gigabytes, kung gayon kailangan mo talagang magkaroon ng 12. Ang mga numero ay kamag-anak, ngunit ang kakanyahan ay hindi nagbabago.

Upang simulan ang bahagi ng server, inirerekomenda namin ang paggamit ng mga flag na tinukoy sa artikulo Pag-tune ng JVM – G1GC Garbage Collector Flag para sa Minecraft. Ang "black magic" na ito ay nagpapahintulot sa server na i-configure nang tama ang "basura" at i-optimize ang paggamit ng RAM. Hindi ka dapat maglaan ng mas maraming memorya kaysa sa aktwal na ginagamit ng server sa panahon ng peak influx ng mga manlalaro.

Pagbuo ng block map

"Sa tingin mo ba ay umiiral lang ang buwan kapag tiningnan mo ito?" (Albert Einstein)

Ganap na bagong server. Sa sandaling matagumpay na kumonekta ang manlalaro sa unang pagkakataon, lalabas ang karakter ng laro sa pangkalahatang lugar ng pagtitipon (spawn). Ito ang tanging lugar kung saan ang mundo ng laro ay paunang binuo ng server. Kasabay nito, tinitingnan ng bahagi ng kliyente ang mga setting, at ang pangunahing parameter ay ang distansya ng pagguhit. Ito ay sinusukat sa mga tipak (ang lugar ng mapa ay 16×16 at 256 na bloke ang taas). Gaano karaming mga tipak ang ipinahiwatig doon ay eksakto kung ilan ang hihilingin mula sa server.

Ang server ay nag-iimbak ng isang pandaigdigang mapa ng mundo, at kung wala pang nabuong mga bloke dito sa punto ng paglitaw ng karakter ng laro, pagkatapos ay ang server ay dynamic na bumubuo ng mga ito at iniimbak ang mga ito. Hindi lamang ito nangangailangan ng malalaking mapagkukunan ng pag-compute, ngunit patuloy din nitong pinapataas ang laki ng mapa ng mundo. Sa isa sa mga pinakalumang server ng anarkista 2b2t (2builders2tools) Ang laki ng mapa ay lumampas na sa 8 Tb, at ang hangganan ng mundo ay nasa humigit-kumulang 30 milyong bloke. Mayroong libu-libong mga kuwento na nauugnay sa server na ito at nararapat ito sa sarili nitong artikulo sa serye.

Ang pagbuo ng mundo sa paligid ng isang manlalaro ay hindi isang problema. Ang pagbuo ng mundo sa paligid ng daan-daang mga manlalaro ay magdudulot ng maliliit na paghina ng server sa maikling panahon, pagkatapos nito ay bababa ang pagkarga. Ang pagbuo ng isang mundo sa distansya ng pag-render ng kliyente sa paligid ng isang libong mga manlalaro ay may kakayahang "i-drop" ang server at itapon ang lahat ng mga kliyente mula dito dahil sa isang timeout.

Sa software ng server mayroong isang halaga tulad ng TPS (Ticks bawat Server - ticks bawat segundo). Karaniwan, ang 1 clock cycle ay katumbas ng 50 ms. (1 segundo ng totoong mundo ay katumbas ng 20 ticks ng mundo ng laro). Kung ang pagproseso ng isang tik ay tumaas sa 60 segundo, ang server application ay isasara, na itatapon ang lahat ng mga manlalaro.

Ang solusyon ay limitahan ang mundo sa ilang partikular na coordinate at magsagawa ng paunang pagbuo ng block. Kaya, inaalis namin ang pangangailangan para sa dynamic na henerasyon sa panahon ng laro, at kakailanganin lamang ng server na magbasa ng isang umiiral na mapa. Ang parehong mga isyu ay maaaring malutas sa isang solong plugin WorldBorder.

Ang pinakamadaling paraan ay ang itakda ang hangganan ng mundo sa anyo ng isang bilog na nauugnay sa spawn point (bagaman maaari mo itong gawin sa anumang hugis) na may isang utos:

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

Kung ang player na karakter ay sumusubok na tumawid sa hangganan, siya ay itutulak pabalik ng ilang mga bloke. Kung ito ay ginawa ng ilang beses sa loob ng limitadong oras, ang nagkasala ay puwersahang i-teleport sa spawn point. Ang pre-generation ng mundo ay ginagawa nang mas simple, na may utos:

/wb fill

Dahil ang pagkilos na ito ay maaaring makaapekto sa mga manlalaro sa server, tiyaking kumpirmahin ang:

/wb confirm

Sa kabuuan, tumagal ng humigit-kumulang 5000 oras upang makabuo ng mundo na may radius na 40 block (~2 bilyong block) sa isang Intel® Xeon® Gold 6240 processor. Samakatuwid, kung gusto mong paunang bumuo ng mas malaking mapa, tandaan na ang prosesong ito ay aabutin ng isang disenteng dami ng oras , at ang server TPS ay seryosong mababawasan. Gayundin, tandaan na kahit na ang radius na 5000 block ay mangangailangan ng humigit-kumulang 2 GB ng disk space.

Sa kabila ng katotohanan na ang pinakabagong bersyon ng plugin ay binuo para sa Minecraft na bersyon 1.14, napag-alaman na ito ay gumagana nang mahusay sa mga susunod na bersyon. Available ang kumpletong listahan ng mga command na may mga paliwanag sa plugin forum.

Mga bloke ng problema

Mayroong maraming iba't ibang mga bloke sa Minecraft. Gayunpaman, nais naming iguhit ang atensyon ng mga mambabasa sa isang bloke tulad ng TNT. Gaya ng ipinahihiwatig ng pangalan, ang bloke na ito ay isang paputok (tala ng editor - ito ay isang item ng laro ng virtual na mundo at ang item na ito ay walang mga tunay na pampasabog). Ang kakaiba nito ay tulad na sa sandali ng pag-activate ang puwersa ng grabidad ay nagsisimulang kumilos dito. Pinipilit nito ang server na kalkulahin ang lahat ng mga coordinate kung sa sandaling ito ay magsisimulang mahulog ang block.

Kung mayroong maraming mga bloke ng TNT, kung gayon ang pagsabog ng isang bloke ay nagiging sanhi ng pagsabog at ang pag-activate ng grabidad sa mga kalapit na bloke, na nakakalat sa kanila sa lahat ng direksyon. Ang lahat ng magagandang mekanika na ito sa gilid ng server ay mukhang maraming mga operasyon upang makalkula ang tilapon ng bawat bloke, pati na rin ang pakikipag-ugnayan sa mga kalapit na bloke. Ang gawain ay lubhang masinsinang mapagkukunan, na madaling suriin ng sinuman. Bumuo at magpasabog ng kubo mula sa mga bloke ng TNT na hindi bababa sa 30x30x30 ang laki. At kung naisip mo na mayroon kang isang mahusay, malakas na gaming computer, nagkakamali ka 😉

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

Pag-optimize ng server ng Minecraft
Ang isang katulad na "eksperimento" sa isang server na may Intel® Xeon® Gold 6240 ay humantong sa isang malubhang pagbaba ng TPS at 80% na pag-load ng CPU sa buong oras ng pagsabog ng bloke. Samakatuwid, kung magagawa ito ng sinumang manlalaro, ang problema sa pagganap ay makakaapekto sa lahat ng mga manlalaro sa server.

Isang mas mahirap na opsyon - Mga Kristal sa Gilid. Kung ang TNT gayunpaman ay sumabog nang sunud-sunod, ang mga Edge Crystal ay sumasabog nang sabay-sabay, na sa teorya ay maaaring ganap na ihinto ang pagpapatakbo ng application ng server.

Maiiwasan lang ang sitwasyong ito sa pamamagitan ng ganap na pagbabawal sa paggamit ng mga block na ito sa mundo ng laro. Halimbawa, gamit ang plugin WorldGuard. Pakitandaan na ang plugin na ito mismo ay hindi gagana nang walang isa pang plugin WorldEdit. Kaya i-install muna ang WorldEdit, at pagkatapos ay WorldGuard.

Konklusyon

Ang wastong pamamahala sa isang server ng laro ay hindi isang madaling gawain. Ang mga paghihirap at pagbaba ng pagganap ay maghihintay sa iyo sa bawat pagliko, lalo na kung hindi mo isinasaalang-alang ang mga mekanika ng gameplay mismo. Imposibleng mahulaan ang lahat, dahil ang mga manlalaro ay maaaring maging malikhain kung minsan sa pagsisikap na pilitin ang server na gawin ang isang bagay na hindi ito nilayon. Ang makatwirang balanse lamang sa pagitan ng mga panganib at itinatag na mga paghihigpit ang magbibigay-daan sa server na patuloy na gumana at hindi bawasan ang pagganap nito sa mga kritikal na halaga.

Sa panahon ng quarantine, na-miss ng ilan sa aming mga empleyado ang kanilang mga paboritong opisina at nagpasyang likhain muli ang mga ito sa loob ng Minecraft. May pagkakataon ka ring bumisita sa amin nang hindi nalalagay sa panganib ang iyong kalusugan o nag-aaksaya ng oras sa kalsada.

Upang gawin ito, iniimbitahan namin ang lahat sa aming server minecraft.selectel.ru (bersyon ng kliyente 1.15.2), kung saan ang mga sentro ng data na Tsvetochnaya-1 at Tsvetochnaya-2 ay muling nilikha. Huwag kalimutang sumang-ayon na mag-download ng mga karagdagang mapagkukunan, kinakailangan ang mga ito para sa tamang pagpapakita ng ilang lokasyon.

Naghihintay sa iyo ang mga paghahanap, mga code na pang-promosyon, mga itlog ng Pasko ng Pagkabuhay at kaaya-ayang komunikasyon.

Pinagmulan: www.habr.com

Magdagdag ng komento