
Naisulat na namin ito sa aming blog , kung paano lumikha ng iyong sariling Minecraft server, ngunit limang taon na ang lumipas mula noon, at marami ang nagbago. Nagbabahagi kami ng mga kasalukuyang pamamaraan para sa paglikha at pag-optimize sa bahagi ng server ng sikat na larong ito.
Sa loob ng siyam na taong kasaysayan nito (nagbibilang mula sa petsa ng paglabas nito), ang Minecraft ay nakakuha ng napakalaking bilang ng mga tagahanga at detractors sa parehong mga kaswal na manlalaro at geeks. Ang simpleng konsepto ng isang cube-based na mundo ay umunlad mula sa simpleng entertainment tungo sa isang versatile medium para sa pakikisalamuha at paglikha ng iba't ibang real-world na mga bagay.
Bilang karagdagan sa pagbuo, ang laro ay nag-aalok ng kakayahang lumikha , na nagbibigay-daan sa iyong ipatupad ang mga ganap na algorithm sa loob ng Minecraft. Ang YouTube ay puno ng mga kahanga-hangang video kung saan ang mga tao, pagkatapos ng malaking pagsisikap at oras, ay lumikha ng isang kopya nito o ng elektronikong device na iyon o gumawa ng isang detalyadong replika. и mga istrukturang arkitektura. Ang lahat ay limitado lamang sa pamamagitan ng imahinasyon ng gamer at ang mga posibilidad ng game universe.

Ngunit nang walang karagdagang talakayan kung ano ang eksaktong nililikha ng mga manlalaro, titingnan natin ang bahagi ng server ng application at i-highlight ang mga isyu (kung minsan ay medyo kumplikado) na maaaring lumitaw sa panahon ng operasyon sa ilalim ng pagkarga. Linawin natin sa simula na ang Java Edition lang ang tatalakayin natin.
Mga uri ng mga server
Ang pinakasimpleng opsyon ay isang server na binuo sa client ng laro. Lumikha ng mundo, pindutin ang isang pindutan, at magagamit ang server sa lokal na network. Hindi kakayanin ng opsyong ito ang anumang seryosong pag-load, kaya hindi na namin ito isasaalang-alang.
vanilla
Ang Mojang Studios ay namamahagi ng bahagi ng server-side ng laro bilang isang Java application nang libre. Pinapayagan ka nitong lumikha ng iyong sarili at personal na mundo, ginagawa itong naa-access mula saanman sa planeta. Para sa mga gumawa nito sa unang pagkakataon, mayroong isang mahusay , na makukuha sa kaukulang larong Wiki.
Ang diskarte na ito ay may isang seryosong disbentaha: ang kakulangan ng out-of-the-box na suporta para sa mga plugin na nagpapalawak sa functionality ng server at nagbibigay-daan hindi lamang sa automation ng maraming proseso kundi pati na rin sa pag-optimize ng performance. Higit pa rito, ang opisyal na server ay gumagamit ng malaking halaga ng RAM sa bawat konektadong manlalaro.
bukkit
Isang server application na ginawa ng mga mahilig batay sa vanilla version makabuluhang pinalawak ang mga kakayahan ng laro sa pamamagitan ng suporta para sa mga plugin at mod. Pinayagan nito hindi lamang ang pagdaragdag ng mga bagong elemento ng gameplay kundi pati na rin ang iba't ibang manipulasyon na hindi magagamit sa vanilla software. Nang kawili-wili, ang application na ito ay nangangailangan ng mas kaunting memorya.
Ang pag-install ng Bukkit ay hindi partikular na mahirap, ang kaukulang mga tagubilin ay magagamit sa mapagkukunan . Ngunit hindi ito makatwiran, dahil ang koponan ng Bukkit ay na-disband noong 2014, ang mga developer ng proyekto ay naging mga empleyado ng Mojang Studios, at inabandona. Kaya, epektibong patay na si Bukkit, at makatuwirang ibaling ang ating atensyon sa susunod na dalawang proyekto.
SpigotMC
Upang gawing mas madali ang buhay para sa mga developer ng plugin, nagkaroon ng pangangailangan para sa isang API para sa pakikipag-ugnayan sa mundo ng laro. Ito mismo ang problemang nalutas ng mga tagalikha. , ginagawa ang Bukkit core bilang batayan at muling ginagawa ito upang makamit ang mas mahusay na pagiging maaasahan at pagganap. gayunpaman, Na-block ang proyekto dahil sa Digital Millennium Copyright Act (), at imposibleng i-download ang mga source code mula doon.
Ang SpigotMC ay kasalukuyang aktibong binuo at ginagamit. Sinusuportahan nito ang lahat ng mga plugin na nilikha para sa Bukkit, ngunit hindi ito tugma sa likod. Upang iwasan ang DMCA Takedown ban, binuo ang isang eleganteng workaround na tinatawag na BuildTools. Inalis ng tool na ito ang pangangailangang ipamahagi ang isang pinagsama-samang application at pinapayagan ang mga user na i-compile ang Spigot, CraftBukkit, at Bukkit mula sa source code. Ginagawa nitong walang silbi ang pagbabawal ng DMCA.
PaperMC
Tila ang lahat ay mahusay, at ang Spigot ay isang mahusay na pagpipilian. Ngunit ang ilang mga mahilig ay hindi nasiyahan doon, kaya lumikha sila ng kanilang sariling tinidor ng Spigot "sa mga steroid." Ang pangunahing bentahe ay nakasaad na "Ito ay hangal na mabilis". Binuo Binibigyang-daan ka nitong mabilis na malutas ang mga isyu na lumitaw, at pinapayagan ka ng pinalawak na API na lumikha ng mga kawili-wiling plugin. Maaaring ilunsad ang PaperMC gamit ang isang simpleng command, tulad ng ipinapakita sa .
Ang PaperMC ay may mahusay na compatibility, kaya ang mga plugin na isinulat para sa SpigotMC ay madaling gagana sa PaperMC, ngunit walang opisyal na suporta. Magagamit din ang backward compatibility sa SpigotMC. Ngayong nasaklaw na natin ang iba't ibang opsyon sa paggawa ng server, magpatuloy tayo sa mga isyu sa pagganap na maaaring lumitaw.
Problema at solusyon
Ang pangunahing bagay na dapat maunawaan ay ang lahat ng bagay na nauugnay sa pagproseso ng mundo ng laro ay hahawakan ng isang core lamang sa pisikal na server. Kaya, kahit na mayroon kang isang kamangha-manghang server na may isang dosenang mga core, isa lamang ang mailo-load. Ang natitira ay talagang magiging idle. Ito ang katangian ng arkitektura ng application, at wala kang magagawa tungkol dito. Kaya, kapag pumipili ng isang server, bigyang-pansin hindi ang bilang ng mga core, ngunit sa bilis ng orasan. Kung mas mataas ang bilis ng orasan, mas mahusay ang pagganap.
Kung tungkol sa tanong ng dami ng RAM, ang mga sumusunod na tagapagpahiwatig ay dapat isaalang-alang:
- nakaplanong bilang ng mga manlalaro;
- nakaplanong bilang ng mga mundo sa server;
- ang laki ng bawat mundo.
Mahalagang tandaan na ang isang Java application ay palaging nangangailangan ng ilang RAM. Kung umaasa ka ng 8 gigabytes ng memorya, kakailanganin mo talaga ng 12. Ang mga numerong ito ay arbitrary, ngunit ang esensya ay nananatiling pareho.
Upang ilunsad ang bahagi ng server, inirerekomenda namin ang paggamit ng mga flag na tinukoy sa artikulo. Ang "black magic" na ito ay nagbibigay-daan sa server na maayos na i-configure ang garbage collector nito at i-optimize ang paggamit ng RAM. Iwasan ang paglalaan ng mas maraming memory kaysa sa aktwal na ginagamit ng server sa panahon ng peak load ng player.
Pagbuo ng block map
"Sa tingin mo ba ay umiiral lang ang buwan kapag tiningnan mo ito?" (Albert Einstein)
Isang ganap na bagong server. Sa sandaling matagumpay na kumonekta ang isang manlalaro sa unang pagkakataon, lalabas ang karakter ng laro sa isang karaniwang rally point (spawn point). Ito ang tanging lugar kung saan ang mundo ng laro ay paunang binuo ng server. Sa puntong ito, sinusuri ng panig ng kliyente ang mga setting, at ang pangunahing parameter ay ang distansya ng draw. Ito ay sinusukat sa mga tipak (isang 16x16 na lugar ng mapa na may taas na 256 na bloke). Ang bilang ng mga chunks na tinukoy doon ay eksakto kung ilan ang hihilingin mula sa server.
Ang server ay nag-iimbak ng pandaigdigang mapa ng mundo, at kung hindi pa ito naglalaman ng mga nabuong bloke sa spawn point ng player na character, dynamic na bubuo ang mga ito at iniimbak ng server. Hindi lamang ito nangangailangan ng makabuluhang mapagkukunan ng pag-compute, ngunit patuloy din nitong pinapataas ang laki ng mapa ng mundo. Sa isa sa mga pinakalumang server ng anarkiya (2builders2tools) Ang laki ng mapa ay lumampas na sa 8 TB, at ang hangganan ng mundo ay nasa 30 milyong bloke. Ang server na ito ay nauugnay sa libu-libong kwento at nararapat 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 manlalaro ay magdudulot ng maliit na server lag sa maikling panahon, pagkatapos nito ay bababa ang load. Ang pagbuo ng mundo sa loob ng draw distance ng kliyente sa paligid ng libu-libong manlalaro ay maaaring mag-crash sa server at maging sanhi ng pag-time out ng lahat ng kliyente.
Sa server software mayroong isang halaga bilang TPS (Ticks bawat Server—ticks bawat segundo). Ang isang tik ay karaniwang katumbas ng 50 ms. (Ang isang segundo sa totoong mundo ay katumbas ng 20 ticks sa mundo ng laro.) Kung ang oras ng pagproseso para sa isang tik ay umabot sa 60 segundo, ang server application ay magsasara, na sisipain ang lahat ng mga manlalaro.
Ang solusyon ay limitahan ang mundo sa mga partikular na coordinate at pre-generate na mga bloke. Inaalis nito ang pangangailangan para sa dynamic na henerasyon sa panahon ng gameplay, at kakailanganin lamang ng server na basahin ang umiiral na mapa. Ang parehong mga isyu ay malulutas sa isang solong plugin. .
Ang pinakamadaling paraan ay ang itakda ang hangganan ng mundo bilang isang bilog na nauugnay sa spawn point (bagaman maaari mo itong gawing anumang hugis) gamit ang isang utos:
/wb set <радиус в блоках> spawnKung ang isang player na karakter ay sumubok na tumawid sa isang hangganan, sila ay itutulak pabalik ng ilang mga bloke. Kung nangyari ito nang maraming beses sa loob ng limitadong oras, ang nagkasala ay puwersahang i-teleport sa kanilang spawn point. Ang paunang pagbuo ng mundo ay mas simple, gamit ang command:
/wb fillDahil ang pagkilos na ito ay maaaring makaapekto sa mga manlalaro na kasalukuyang nasa server, mangyaring tiyaking kumpirmahin ang pagpapatupad:
/wb confirmSa kabuuan, ang pagbuo ng isang mundo na may 5000-block radius (~40 bilyong block) ay tumagal ng humigit-kumulang 2 oras sa isang Intel® Xeon® Gold 6240 processor. Samakatuwid, kung gusto mong mag-pre-generate ng mas malaking mapa, tandaan na ang prosesong ito ay aabutin ng mahabang panahon, at ang TPS ng server ay makabuluhang mababawasan. Gayundin, tandaan na kahit na ang 5000-block na radius ay mangangailangan ng humigit-kumulang 2 GB ng disk space.
Bagama't ang pinakabagong bersyon ng plugin ay binuo para sa Minecraft na bersyon 1.14, ipinakita ng karanasan na perpekto rin itong gumagana sa mga susunod na bersyon. Available ang isang buong listahan ng mga command na may mga paliwanag. .
Mga bloke ng problema
Mayroong isang malaking iba't ibang mga bloke sa Minecraft. Gayunpaman, nais naming iguhit ang atensyon ng mga mambabasa sa isang bloke na tinatawag TNTGaya ng ipinahihiwatig ng pangalan, ang bloke na ito ay isang paputok. (Tala ng editor: Ito ay isang item ng laro para sa virtual na mundo at walang kinalaman sa mga totoong BB)Ang kakaiba nito ay kapag naisaaktibo, ang gravity ay nagsisimulang kumilos dito. Pinipilit nito ang server na muling kalkulahin ang lahat ng mga coordinate kung ang block ay magsisimulang mahulog sa sandaling iyon.
Kung mayroong maramihang mga bloke ng TNT, ang pagpapasabog ng isang bloke ay nagti-trigger ng pagpapasabog at gravity activation ng mga katabing bloke, na nakakalat sa mga ito sa lahat ng direksyon. Ang buong server-side mechanic na ito ay binubuo ng maraming mga operasyon upang kalkulahin ang tilapon ng bawat bloke, pati na rin ang mga pakikipag-ugnayan sa mga kalapit na bloke. Ito ay isang napakaraming mapagkukunan na gawain, dahil kahit sino ay madaling ma-verify. Bumuo at magpasabog ng isang kubo ng mga bloke ng TNT, hindi bababa sa 30x30x30 ang laki. At kung naisip mo na mayroon kang isang mahusay, malakas na computer sa paglalaro, lubos kang nagkakamali.
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Ang isang katulad na "eksperimento" sa isang server na may Intel® Xeon® Gold 6240 ay nagresulta sa isang makabuluhang pagbaba ng TPS at 80% na pag-load ng CPU para sa buong tagal ng block detonation. Samakatuwid, kung ang sinumang manlalaro ay namamahala upang maisagawa ito, ang isyu sa pagganap ay makakaapekto sa lahat ng mga manlalaro sa server.
Ang isang mas mahirap na opsyon ay - End CrystalsKung sunud-sunod na sumasabog ang TNT, ang mga End Crystal ay sabay-sabay na sasabog, na sa teorya ay maaaring huminto sa paggana ng server application.
Maiiwasan lang ang sitwasyong ito sa pamamagitan ng ganap na pag-disable sa paggamit ng mga block na ito sa mundo ng laro. Halimbawa, gamit ang isang plugin Pakitandaan na ang plugin na ito ay hindi gumagana sa sarili nitong walang isa pang plugin. Kaya, i-install muna ang WorldEdit, at pagkatapos ay WorldGuard.
Konklusyon
Ang wastong pamamahala ng server ng laro ay hindi madaling gawain. Ang mga paghihirap at pagkasira ng pagganap ay magtatago sa bawat pagliko, lalo na nang hindi isinasaalang-alang ang mga mekanika ng gameplay mismo. Imposibleng mahulaan ang lahat, dahil ang mga manlalaro ay minsan ay napaka-imbento sa kanilang mga pagtatangka na pilitin ang server na gawin ang mga gawain na hindi ito idinisenyo. Ang isang makatwirang balanse lamang sa pagitan ng mga panganib at itinatag na mga limitasyon ang magtitiyak na ang server ay mananatiling gumagana nang hindi bumababa sa mga kritikal na antas.
Sa panahon ng quarantine, na-miss ng ilan sa aming mga empleyado ang kanilang mga minamahal na opisina at nagpasya na muling likhain ang mga ito sa loob ng Minecraft. May pagkakataon ka ring bumisita sa amin nang hindi nanganganib sa iyong kalusugan o nag-aaksaya ng oras sa paglalakbay.
Para dito, iniimbitahan namin ang lahat sa aming server. minecraft.selectel.ru (bersyon ng kliyente 1.15.2), na muling nililikha ang mga sentro ng data ng Tsvetochnaya-1 at Tsvetochnaya-2. Tiyaking 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, promo code, Easter egg, at masayang pag-uusap.
Pinagmulan: www.habr.com
