Dina blog urang kami geus
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
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
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
Masang Bukkit henteu sesah; petunjuk anu aya dina sumberna
SpigotMC
Pikeun ngagampangkeun kahirupan pikeun pamekar plugin, peryogi API pikeun berinteraksi sareng dunya kaulinan. Ieu persis masalah anu direngsekeun ku panyipta.
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
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
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
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
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
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
"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
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