optimasi server Minecraft

optimasi server Minecraft
Dina blog urang kami geus bébéja, kumaha carana nyieun server Minecraft sorangan, tapi 5 taun geus kaliwat saprak lajeng tur loba geus robah. Kami ngabagikeun sareng anjeun cara ayeuna pikeun nyiptakeun sareng ngaoptimalkeun bagian server tina kaulinan anu populer.

Sapanjang sajarahna 9 taun (cacah ti tanggal sékrési), Minecraft parantos kéngingkeun jumlah fans sareng haters anu luar biasa diantara pamaén biasa sareng geeks. Konsep saderhana tina dunya anu didamel tina blok parantos mekar tina bentuk hiburan anu sederhana janten medium universal pikeun komunikasi sareng nyiptakeun rupa-rupa objék tina dunya nyata.

Salian konstruksi, kaulinan miboga kamampuh nyieun logika, nu ngidinan Anjeun pikeun nerapkeun algoritma full-fledged jero Minecraft. YouTube pinuh ku pidéo anu pikaresepeun pisan dimana jalma-jalma, saatos usaha anu ageung sareng nyéépkeun waktos, nyiptakeun salinan alat éléktronik ieu atanapi éta atanapi ngadamel salinan anu lengkep. aya и fiksimini struktur arsitéktur. Sagalana diwatesan ngan ku imajinasi gamer urang jeung kemungkinan alam semesta kaulinan.


Tapi hayu urang ngobrol salajengna ngeunaan naon kahayang pamaén nyieun, tapi hayu urang nempo bagian server aplikasi tur nyorot masalah (sakapeung pisan kompléks) nu bisa timbul salila operasi dina beban. Hayu urang ngadamel reservasi langsung yén urang ngan bakal ngobrol ngeunaan Java Edition.

Jinis server

Pilihan pangbasajanna nyaéta server diwangun kana klien kaulinan. Kami nyiptakeun dunya, mencét hiji tombol, sareng server janten tiasa diaksés dina jaringan lokal. Pilihan ieu henteu tiasa tahan beban anu serius, sareng ku kituna urang moal nganggap éta.

vanili

Mojang Studios ngadistribusikaeun bagian server game salaku aplikasi Java haratis dina situs wéb resmi. Ieu ngidinan Anjeun pikeun nyieun sorangan dedicated server sareng dunya pribadi, sahingga tiasa diaksés pikeun sambungan ti mana waé pangeusina. Pikeun maranéhanana anu ngalakonan ieu pikeun kahiji kalina, aya hébat tutorial, sadia dina Wiki kaulinan pakait.

Pendekatan ieu ngagaduhan hiji kalemahan anu serius, nyaéta kurangna kamampuan out-of-the-box pikeun nyambungkeun plugins anu ngalegaan fungsionalitas server sareng ngamungkinkeun henteu ngan ukur ngajadikeun otomatis seueur prosés, tapi ogé pikeun ngaoptimalkeun kinerja. Sajaba ti éta, server resmi ngabogaan konsumsi RAM cukup badag pikeun tiap pamuter disambungkeun.

bukkit

Hiji aplikasi server dijieun ku peminat dumasar kana versi Vanilla bukkit sacara signifikan ngalegaan kamampuan kaulinan ku ngadukung plugins sareng mods (modifikasi). Diidinan henteu ngan ukur nambihan blok anyar kana midangkeun, tapi ogé ngalaksanakeun rupa-rupa manipulasi anu teu tiasa diaksés ku parangkat lunak vanili. Narikna, aplikasi ieu merlukeun memori nyata kirang.

Masang Bukkit henteu sesah; petunjuk anu aya dina sumberna GamePedia. Tapi ieu teu asup akal, ti saprak 2014 tim Bukkit bubar, pamekar proyék parantos janten karyawan Mojang Studios, sareng gudang ditinggalkeun. Ku kituna, Bukkit éféktif maot, sarta ngajadikeun rasa nengetan dua proyék salajengna.

SpigotMC

Pikeun ngagampangkeun kahirupan pikeun pamekar plugin, peryogi API pikeun berinteraksi sareng dunya kaulinan. Ieu persis masalah anu direngsekeun ku panyipta. spigot, nyandak inti Bukkit sareng ngerjakeun deui pikeun ngahontal réliabilitas sareng kinerja anu langkung saé. Sanajan kitu, Repository Git proyék ieu diblokir alatan Digital Millennium Copyright Act (DMCA), sarta mustahil pikeun ngundeur kodeu sumber ti dinya.

Ayeuna, SpigotMC aktip dikembangkeun sareng dianggo. Ieu ngarojong sagala plugins dijieun pikeun Bukkit, tapi teu mundur cocog sareng eta. Pikeun ngurilingan DMCA Takedown, metode anu elegan anu disebut BuildTools diciptakeun. Alat ieu ngaleungitkeun kabutuhan pikeun ngadistribusikaeun aplikasi anu disusun sareng ngamungkinkeun para pangguna pikeun nyusun Spigot, CraftBukkit sareng Bukkit tina kode sumber. Sadaya ieu ngajadikeun larangan DMCA henteu aya gunana.

PaperMC

Sagalana seemed tiis, sarta Spigot jadi pilihan hébat. Tapi ieu henteu cekap pikeun sababaraha peminat, sareng aranjeunna nyiptakeun garpu Spigot sorangan "dina stéroid." Dina kaca proyék Kauntungannana konci éta "Éta bodo gancang". Dimekarkeun masarakat ngidinan Anjeun pikeun gancang ngabéréskeun masalah munculna, sarta API nambahan ngidinan Anjeun pikeun nyieun plugins metot. Anjeun tiasa ngaluncurkeun PaperMC kalayan hiji paréntah saderhana, dipasihkeun dina dokuméntasi.

PaperMC boga kasaluyuan alus teuing, jadi plugins ditulis pikeun SpigotMC bisa kalayan gampang dianggo dina PaperMC, tapi tanpa rojongan resmi. Kasaluyuan mundur sareng SpigotMC ogé hadir. Ayeuna urang parantos daptar sababaraha pilihan pikeun nyiptakeun server, hayu urang teraskeun kana masalah kinerja anu tiasa timbul.

Masalah jeung Solusi

Hal utama anu anjeun kedah ngartos nyaéta yén sadaya anu aya hubunganana sareng ngolah dunya kaulinan bakal diolah ngan dina hiji inti komputasi tina server fisik. Janten upami ujug-ujug anjeun gaduh server anu saé kalayan belasan inti komputasi, teras ngan ukur hiji anu bakal dimuat. Sadaya anu sanés bakal ampir dianggurkeun. Ieu mangrupikeun arsitéktur aplikasi, sareng teu aya anu anjeun tiasa laksanakeun. Janten nalika milih server, anjeun kedah nengetan henteu kana jumlah inti, tapi kana frékuénsi jam. Nu leuwih luhur éta, nu hadé kinerja bakal.

Ngeunaan masalah kapasitas RAM, urang kedah neraskeun tina indikator ieu:

  • jumlah rencanana pamaén;
  • jumlah rencanana dunya dina server;
  • ukuran unggal dunya.

Perlu diinget yén aplikasi Java salawasna peryogi cadangan RAM. Lamun nyangka konsumsi memori 8 gigabyte, mangka anjeun sabenerna kudu boga 12. Jumlah anu relatif, tapi panggih teu robah.

Pikeun ngamimitian bagian server, kami nyarankeun ngagunakeun bandéra anu dijelaskeun dina tulisan Tuning JVM - G1GC Garbage Collector Bandéra pikeun Minecraft. Ieu "sihir hideung" ngamungkinkeun server bener ngonpigurasikeun "pengumpul sampah" na ngaoptimalkeun pamakéan RAM. Anjeun teu kudu allocate leuwih memori ti server sabenerna meakeun salila panyaluran puncak pamaén.

Ngahasilkeun peta blok

"Naha anjeun leres-leres nganggap bulan ngan ukur aya nalika anjeun ningali éta?" (Albert Einstein)

server lengkep anyar. Pas pamuter junun ngahubungkeun pikeun kahiji kalina, karakter kaulinan mucunghul dina titik gathering umum (spawn). Ieu hiji-hijina tempat dimana dunya kaulinan tos dihasilkeun ku server. Dina waktos anu sami, bagian klien ningali setélan, sareng parameter konci nyaéta jarak gambar. Ieu diukur dina sakumpulan (wewengkon peta nyaeta 16 × 16 jeung 256 blok tinggi). Sabaraha sakumpulan dituduhkeun aya persis sabaraha bakal dipénta ti server.

Server nyimpen peta global dunya, sareng upami teu aya blok anu dibangkitkeun dina éta dina titik penampilan karakter kaulinan, maka server sacara dinamis ngahasilkeun aranjeunna sareng nyimpenana. Ieu mah ngan saukur merlukeun sumberdaya komputasi badag, tapi ogé terus ngaronjatkeun ukuran peta dunya. Dina salah sahiji server anarkis pangkolotna 2b2t (2builders2tools) Ukuran peta parantos langkung ti 8 Tb, sareng wates dunya sakitar 30 juta blok. Aya rébuan carita pakait sareng server ieu sarta pantes artikel sorangan dina séri.

Ngahasilkeun dunya sabudeureun hiji pamuter teu masalah. Ngahasilkeun dunya sabudeureun ratusan pamaén bakal ngabalukarkeun slowdowns server minor keur waktu anu singget, nu satutasna beban bakal ngurangan. Ngahasilkeun dunya dina jarak rendering klien sakitar sarébu pamaén parantos tiasa "muterkeun" server sareng ngalungkeun sadaya klien kaluar tina éta kusabab waktosna.

Dina parangkat lunak server aya nilai sapertos TPS (Ticks per Server - ticks per detik). Biasana, 1 siklus jam sarua jeung 50 mdet. (1 detik tina dunya nyata sarua jeung 20 ticks dunya kaulinan). Lamun ngolah hiji keletik naek ka 60 detik, aplikasi server bakal ditutup, buang kaluar kabeh pamaén.

Solusina nyaéta ngawates dunya kana koordinat anu tangtu sareng ngalaksanakeun generasi blok awal. Ku kituna, urang nyabut kabutuhan generasi dinamis salila game, sarta server ngan bakal perlu maca peta aya. Duanana masalah tiasa direngsekeun ku hiji plugin tunggal Wates Dunya.

Cara panggampangna nyaéta nyetél wates dunya dina bentuk bunderan relatif ka titik spawn (sanaos anjeun tiasa ngadamel bentuk naon waé) kalayan hiji paréntah:

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

Lamun karakter pamuter nyoba meuntas wates, anjeunna bakal kadorong deui sababaraha blok. Lamun ieu dipigawé sababaraha kali dina jangka waktu nu kawates, palaku bakal maksa teleported ka titik spawn. Pra-generasi dunya dilakukeun langkung saderhana, kalayan paréntah:

/wb fill

Kusabab aksi ieu berpotensi mangaruhan pamaén dina server, pastikeun pikeun mastikeun:

/wb confirm

Total, butuh waktu kurang leuwih 5000 jam pikeun ngahasilkeun dunya kalayan radius 40 blok (~ 2 milyar blok) dina prosésor Intel® Xeon® Gold 6240. Ku alatan éta, upami anjeun hoyong pra-ngahasilkeun peta anu langkung ageung, perhatikeun yén prosés ieu bakal butuh jumlah santun waktu , sarta TPS server bakal ngurangan serius. Ogé, émut yén sanajan radius 5000 blok bakal peryogi kirang langkung 2 GB rohangan disk.

Najan kanyataan yén versi panganyarna tina plugin nu dikembangkeun pikeun Minecraft versi 1.14, ieu sacara ékspériméntal kapanggih yén gawéna hébat dina versi saterusna. Daptar lengkep paréntah sareng panjelasan sayogi dina forum plugin.

Blok masalah

Aya rupa-rupa blok di Minecraft. Nanging, urang hoyong narik perhatian pamiarsa kana blok sapertos kitu TNT. Sakumaha ngaranna nunjukkeun, blok ieu mangrupa ngabeledug (catetan redaktur - ieu mangrupikeun barang kaulinan tina dunya maya sareng barang ieu teu aya sareng bahan peledak nyata). Peculiarity nyaeta saperti dina momen aktivasina gaya gravitasi mimiti meta dina eta. Ieu maksakeun server pikeun ngitung sadaya koordinat upami dina momen ieu blok mimiti ragrag.

Upami aya sababaraha blok TNT, maka detonasi hiji blok nyababkeun detonasi sareng aktivasina gravitasi di blok tatangga, paburencay ka sadaya arah. Sadaya mékanika anu indah ieu di sisi server sigana seueur operasi pikeun ngitung lintasan unggal blok, ogé interaksi sareng blok tatangga. Tugasna pisan-intensif sumberdaya, anu tiasa dicek ku saha waé. Ngahasilkeun sareng ngabeledugkeun kubus tina blok TNT anu ukuranna sahenteuna 30x30x30. Sareng upami anjeun ngira yén anjeun gaduh komputer kaulinan anu saé, kuat, anjeun salah pisan 😉

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

optimasi server Minecraft
"Percobaan" anu sami dina server sareng Intel® Xeon® Gold 6240 nyababkeun turunna TPS anu serius sareng 80% beban CPU salami waktos detonasi blok. Ku alatan éta, lamun sagala pamaén bisa ngalakukeun ieu, masalah kinerja bakal mangaruhan sakabéh pamaén dina server.

Pilihan anu langkung hese - Kristal Ujung. Upami TNT tetep ngabeledug sacara berurutan, maka Kristal Tepi ngabeledug sadayana dina waktos anu sami, anu dina téori tiasa ngeureunkeun operasi aplikasi server.

Skenario ieu ngan bisa dihindari ku sagemblengna larangan pamakéan blok ieu di dunya kaulinan. Contona, ngagunakeun plugin nu WorldGuard. Punten dicatet yén plugin ieu nyalira henteu tiasa dianggo tanpa plugin anu sanés DunyaEdit. Janten pasang heula WorldEdit, teras WorldGuard.

kacindekan

Bener ngatur hiji server kaulinan teu hiji tugas gampang. Kasesahan sareng panurunan kinerja bakal ngantosan anjeun dina unggal péngkolan, khususna upami anjeun henteu nganggap mékanika midangkeun sorangan. Mustahil pikeun ngaramalkeun sadayana, sabab pamaén sakapeung tiasa kreatif pisan dina nyobian maksa server pikeun ngalakukeun hiji hal anu henteu dituju. Ngan kasaimbangan lumrah antara resiko jeung larangan ngadegkeun bakal ngidinan server pikeun beroperasi terus jeung teu ngurangan kinerja na kana nilai kritis.

Salila karantina, sababaraha karyawan urang sono ka kantor karesepna sareng mutuskeun pikeun nyiptakeun deui di Minecraft. Anjeun oge boga kasempetan pikeun datangna kadatangan kami tanpa risking kaséhatan Anjeun atawa wasting waktu di jalan.

Jang ngalampahkeun ieu, urang ngajak dulur ka server kami minecraft.selectel.ru (Vérsi klien 1.15.2), dimana pusat data Tsvetochnaya-1 sareng Tsvetochnaya-2 didamel deui. Ulah poho pikeun satuju pikeun ngundeur sumberdaya tambahan, aranjeunna diperlukeun pikeun tampilan bener sababaraha lokasi.

Pencarian, kode promosi, endog Easter sareng komunikasi anu pikaresepeun ngantosan anjeun.

sumber: www.habr.com

Tambahkeun komentar