
Bizning blogimizda allaqachon mavjud , o'zingizning Minecraft serveringizni qanday yaratishingiz mumkin, ammo o'sha paytdan beri 5 yil o'tdi va ko'p narsa o'zgardi. Biz siz bilan bunday mashhur o'yinning server qismini yaratish va optimallashtirishning joriy usullarini baham ko'ramiz.
O'zining 9 yillik tarixi davomida (chiqarish sanasidan boshlab) Minecraft oddiy o'yinchilar va geekslar orasida hayratlanarli sonli muxlislar va nafratlarni qozondi. Bloklardan yasalgan dunyoning oddiy tushunchasi o'yin-kulgining oddiy shaklidan real dunyodan turli xil ob'ektlarni muloqot qilish va yaratish uchun universal vositaga aylandi.
Qurilishdan tashqari, o'yin yaratish qobiliyatiga ega , bu sizga Minecraft ichida to'liq huquqli algoritmlarni amalga oshirish imkonini beradi. YouTube juda ta'sirli videolarga to'la bo'lib, odamlar juda ko'p kuch sarflab, ko'p vaqt sarflab, u yoki bu elektron qurilmaning nusxasini yaratgan yoki batafsil nusxasini yaratgan. и me'moriy tuzilmalar. Hamma narsa faqat o'yinchining tasavvuri va o'yin olamining imkoniyatlari bilan cheklangan.

Ammo keling, o'yinchilar aynan nimani yaratishi haqida gapirmaylik, lekin dasturning server qismini ko'rib chiqamiz va yuk ostida ishlash paytida yuzaga kelishi mumkin bo'lgan muammolarni (ba'zan juda murakkab) ta'kidlaymiz. Keling, darhol band qilaylik, biz faqat Java nashri haqida gaplashamiz.
Serverlar turlari
Eng oddiy variant - o'yin mijoziga o'rnatilgan server. Biz dunyo yaratdik, bitta tugmani bosdik va serverga mahalliy tarmoq orqali kirish mumkin bo'ldi. Ushbu parametr hech qanday jiddiy yukga bardosh bera olmaydi va shuning uchun biz buni hisobga olmaymiz.
Vanilla
Mojang Studios o'yinning server qismini Java ilovasi sifatida bepul tarqatmoqda . Bu sizga o'zingizni yaratishga imkon beradi va shaxsiy dunyo, bu uni sayyoramizning istalgan nuqtasidan ulanishga imkon beradi. Buni birinchi marta qilayotganlar uchun ajoyib narsa bor , tegishli oʻyin Wiki’da mavjud.
Ushbu yondashuv bitta jiddiy kamchilikka ega, ya'ni serverning funksionalligini kengaytiradigan va nafaqat ko'plab jarayonlarni avtomatlashtirish, balki ishlashni optimallashtirish imkonini beruvchi plaginlarni ulash uchun tayyor imkoniyatlarning yo'qligi. Bundan tashqari, rasmiy server har bir ulangan o'yinchi uchun juda katta RAM iste'moliga ega.
bukkit
Vanilla versiyasi asosida ishqibozlar tomonidan yaratilgan server ilovasi plaginlar va modlarni (modifikatsiyalarni) qo'llab-quvvatlash orqali o'yin imkoniyatlarini sezilarli darajada kengaytirdi. Bu nafaqat o'yinga yangi bloklarni qo'shish, balki vanil dasturiy ta'minoti uchun mavjud bo'lmagan turli xil manipulyatsiyalarni amalga oshirish imkonini berdi. Qizig'i shundaki, bu dastur sezilarli darajada kamroq xotira talab qildi.
Bukkitni o'rnatish qiyin emas, tegishli ko'rsatmalar manbada . Ammo buning ma'nosi yo'q, chunki 2014 yildan beri Bukkit jamoasi tarqalib ketgan, loyiha ishlab chiquvchilari Mojang Studios xodimlariga aylanishgan va tashlab ketilgan. Shunday qilib, Bukkit samarali o'lik va keyingi ikkita loyihaga e'tibor berish mantiqan.
SpigotMC
Plagin ishlab chiquvchilari hayotini osonlashtirish uchun o'yin dunyosi bilan o'zaro aloqada bo'lish uchun API kerak edi. Aynan shu muammoni ijodkorlar hal qilishdi. , Bukkit yadrosini olib, ishonchliligi va ishlashini yaxshilash uchun uni qayta ishlash. Shunga qaramasdan, loyiha Raqamli Mingyillik mualliflik huquqi to'g'risidagi qonun tufayli bloklangan (), va u erdan manba kodini yuklab olish mumkin emas.
Hozirgi vaqtda SpigotMC faol ishlab chiqilmoqda va foydalanilmoqda. Bu Bukkit uchun yaratilgan barcha plaginlarni qo'llab-quvvatlaydi, lekin u bilan orqaga qarab mos kelmaydi. DMCA olib tashlashni aylanib o'tish uchun BuildTools deb nomlangan oqlangan usul ixtiro qilindi. Ushbu vosita kompilyatsiya qilingan dasturni tarqatish zaruratini yo'q qiladi va foydalanuvchilarga Spigot, CraftBukkit va Bukkitni manba kodidan kompilyatsiya qilish imkonini beradi. Bularning barchasi DMCA taqiqini foydasiz qiladi.
PaperMC
Hamma narsa ajoyib bo'lib tuyuldi va Spigot ajoyib variantga aylandi. Ammo bu ba'zi ishqibozlar uchun etarli emas edi va ular "steroidlarda" o'zlarining Spigot vilkalarini yaratdilar. Yoniq asosiy afzalligi "Bu ahmoq tez". Ishlab chiqilgan paydo bo'lgan muammolarni tezda hal qilish imkonini beradi va kengaytirilgan API qiziqarli plaginlarni yaratishga imkon beradi. PaperMC-ni bitta oddiy buyruq bilan ishga tushirishingiz mumkin .
PaperMC mukammal muvofiqlikka ega, shuning uchun SpigotMC uchun yozilgan plaginlar PaperMC-da osongina ishlashi mumkin, ammo rasmiy yordamisiz. SpigotMC bilan orqaga qarab muvofiqlik ham mavjud. Endi biz server yaratishning turli variantlarini sanab o'tganimizdan so'ng, paydo bo'lishi mumkin bo'lgan ishlash muammolariga o'tamiz.
Muammolar va yechimlar
Siz tushunishingiz kerak bo'lgan asosiy narsa shundaki, o'yin dunyosini qayta ishlash bilan bog'liq barcha narsalar faqat jismoniy serverning bitta hisoblash yadrosida qayta ishlanadi. Agar to'satdan sizda o'nlab hisoblash yadrolari bo'lgan ajoyib server bo'lsa, unda faqat bittasi yuklanadi. Qolganlarning hammasi deyarli ishlamay qoladi. Bu ilovaning arxitekturasi va bu haqda hech narsa qila olmaysiz. Shuning uchun serverni tanlashda siz yadrolar soniga emas, balki soat chastotasiga e'tibor berishingiz kerak. U qanchalik baland bo'lsa, ishlash shunchalik yaxshi bo'ladi.
Operativ xotira hajmi masalasiga kelsak, biz quyidagi ko'rsatkichlardan kelib chiqishimiz kerak:
- rejalashtirilgan o'yinchilar soni;
- serverdagi olamlarning rejalashtirilgan soni;
- har bir dunyoning o'lchami.
Shuni esda tutish kerakki, Java dasturi har doim RAM zaxirasiga muhtoj. Agar siz 8 gigabayt xotira iste'molini kutsangiz, unda siz aslida 12 ga ega bo'lishingiz kerak. Raqamlar nisbiy, ammo mohiyati o'zgarmaydi.
Server qismini ishga tushirish uchun maqolada ko'rsatilgan bayroqlardan foydalanishni tavsiya etamiz . Ushbu "qora sehr" serverga "axlat yig'uvchi" ni to'g'ri sozlash va RAMdan foydalanishni optimallashtirish imkonini beradi. Siz o'yinchilarning eng yuqori oqimi paytida server iste'mol qilganidan ko'proq xotira ajratmasligingiz kerak.
Blok xaritasini yaratish
"Siz haqiqatan ham oyni faqat unga qaraganingizda mavjud deb o'ylaysizmi?" (Albert Eynshteyn)
Mutlaqo yangi server. O'yinchi birinchi marta muvaffaqiyatli ulanishi bilanoq, o'yin belgisi umumiy yig'ilish nuqtasida paydo bo'ladi (umurtqa). Bu o'yin dunyosi server tomonidan oldindan yaratilgan yagona joy. Shu bilan birga, mijoz qismi sozlamalarga qaraydi va asosiy parametr - chizilgan masofa. U bo'laklarda o'lchanadi (xarita maydoni 16×16 va balandligi 256 blok).U yerda qancha bo'lak ko'rsatilgan bo'lsa, serverdan aynan qanchasi so'raladi.
Server dunyoning global xaritasini saqlaydi va agar o'yin xarakterining paydo bo'lish nuqtasida hali yaratilgan bloklar bo'lmasa, server ularni dinamik ravishda yaratadi va saqlaydi. Bu nafaqat katta hisoblash resurslarini talab qiladi, balki dunyo xaritasining hajmini ham doimiy ravishda oshiradi. Eng qadimgi anarxist serverlardan birida (2builders2tools) Xaritaning hajmi allaqachon 8 Tb dan oshdi va dunyo chegarasi taxminan 30 million blokni tashkil etadi. Ushbu server bilan bog'liq minglab hikoyalar mavjud va u seriyadagi o'z maqolasiga loyiqdir.
Bitta o'yinchi atrofida dunyoni yaratish muammo emas. Yuzlab o'yinchilar atrofida dunyoni yaratish qisqa vaqt ichida serverning kichik sekinlashuviga olib keladi, shundan so'ng yuk kamayadi. Taxminan ming o'yinchiga mo'ljallangan mijoz masofasida dunyoni yaratish allaqachon serverni "tashlab qo'yish" va barcha mijozlarni kutish vaqti tufayli undan chiqarib yuborishga qodir.
Server dasturida kabi qiymat mavjud TPS (Server uchun belgi - soniyada belgi). Odatda, 1 takt sikli 50 ms ga teng. (Haqiqiy dunyoning 1 soniyasi o'yin dunyosining 20 ta Shomiliga teng). Agar bitta belgini qayta ishlash 60 soniyagacha oshsa, server ilovasi yopilib, barcha o'yinchilarni chiqarib yuboradi.
Yechim dunyoni ma'lum koordinatalar bilan cheklash va dastlabki blok yaratishni amalga oshirishdir. Shunday qilib, biz o'yin davomida dinamik avlodga bo'lgan ehtiyojni olib tashlaymiz va server faqat mavjud xaritani o'qishi kerak bo'ladi. Ikkala muammoni bitta plagin yordamida hal qilish mumkin .
Eng oson yo'li - bitta buyruq bilan dunyo chegarasini urug'lanish nuqtasiga nisbatan doira shaklida o'rnatish (garchi siz uni har qanday shaklda qilishingiz mumkin):
/wb set <радиус в блоках> spawnAgar o'yinchi belgi chegarani kesib o'tishga harakat qilsa, u bir necha blokdan orqaga suriladi. Agar bu cheklangan vaqt ichida bir necha marta bajarilsa, huquqbuzar zo'rlik bilan tug'ilish nuqtasiga teleportatsiya qilinadi. Dunyoni oldindan yaratish buyrug'i bilan yanada sodda tarzda amalga oshiriladi:
/wb fillBu amal serverdagi oʻyinchilarga taʼsir qilishi mumkinligi sababli, quyidagilarni tasdiqlang:
/wb confirmIntel® Xeon® Gold 5000 protsessorida radiusi 40 blok (~2 milliard blok) bo‘lgan dunyoni yaratish uchun jami 6240 soat vaqt ketdi.Shuning uchun, agar siz oldindan kattaroq xarita yaratmoqchi bo‘lsangiz, shuni yodda tutingki, bu jarayon munosib vaqt talab etadi va server TPS jiddiy kamayadi. Shuni ham yodda tutingki, hatto 5000 blok radiusi ham taxminan 2 GB disk maydoni talab qiladi.
Plaginning so'nggi versiyasi Minecraft 1.14 versiyasi uchun ishlab chiqilganiga qaramay, u keyingi versiyalarda ajoyib ishlashi eksperimental ravishda aniqlandi. Tushuntirishlar bilan buyruqlarning to'liq ro'yxati mavjud .
Muammoli bloklar
Minecraft-da juda ko'p turli xil bloklar mavjud. Biroq, biz o'quvchilarning e'tiborini bunday blokga qaratmoqchimiz TNT. Nomidan ko'rinib turibdiki, bu blok portlovchi moddadir (muharrir eslatmasi - bu virtual olamning o'yin elementi va bu elementda haqiqiy portlovchi moddalar mavjud emas). Uning o'ziga xosligi shundaki, faollashgan paytda tortishish kuchi unga ta'sir qila boshlaydi. Bu serverni barcha koordinatalarni hisoblashga majbur qiladi, agar hozirgi vaqtda blok tusha boshlasa.
Agar bir nechta TNT bloklari mavjud bo'lsa, unda bitta blokning portlashi portlash va qo'shni bloklarda tortishish kuchini faollashtirib, ularni har tomonga tarqatadi. Server tomonidagi bu go'zal mexanikaning barchasi har bir blokning traektoriyasini hisoblash uchun juda ko'p operatsiyalarga o'xshaydi, shuningdek qo'shni bloklar bilan o'zaro ta'sir qiladi. Vazifa juda ko'p resurs talab qiladi, uni har kim osongina tekshirishi mumkin. TNT bloklaridan kamida 30x30x30 o'lchamdagi kub hosil qiling va portlating. Va agar sizda yaxshi, kuchli o'yin kompyuteringiz bor deb o'ylasangiz, juda yanglishdingiz 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Intel® Xeon® Gold 6240 bilan serverdagi shunga o'xshash "tajriba" butun blok portlash vaqtida jiddiy TPS pasayishiga va protsessorning 80% yuklanishiga olib keldi. Shuning uchun, agar biron bir o'yinchi buni qila olsa, unda ishlash muammosi serverdagi barcha o'yinchilarga ta'sir qiladi.
Bundan ham qiyin variant - Yon kristallar. Agar TNT baribir ketma-ket portlasa, u holda Edge kristallari bir vaqtning o'zida portlaydi, bu nazariy jihatdan server ilovasining ishlashini to'liq to'xtatishi mumkin.
Ushbu stsenariyni faqat o'yin dunyosida ushbu bloklardan foydalanishni butunlay taqiqlash orqali oldini olish mumkin. Masalan, plagin yordamida . E'tibor bering, ushbu plagin o'z-o'zidan boshqa plaginsiz ishlamaydi . Shunday qilib, avval WorldEdit, keyin esa WorldGuard-ni o'rnating.
xulosa
O'yin serverini to'g'ri boshqarish oson ish emas. Qiyinchiliklar va ishlashning pasayishi sizni har qadamda kutadi, ayniqsa o'yin mexanikasini hisobga olmasangiz. Hamma narsani oldindan ko'rishning iloji yo'q, chunki o'yinchilar ba'zan serverni mo'ljallanmagan narsani qilishga majburlashda juda ijodiy bo'lishlari mumkin. Faqat xavflar va belgilangan cheklovlar o'rtasidagi oqilona muvozanat serverning uzluksiz ishlashiga imkon beradi va uning ishlashini muhim qiymatlarga tushirmaydi.
Karantin paytida ba'zi xodimlarimiz sevimli ofislarini sog'inib qolishdi va ularni Minecraft ichida qayta yaratishga qaror qilishdi. Sog'lig'ingizni xavf ostiga qo'ymasdan va yo'lda vaqtni boy bermasdan bizga tashrif buyurish imkoniyati ham bor.
Buning uchun barchani serverimizga taklif qilamiz minecraft.selectel.ru (mijoz versiyasi 1.15.2), bu erda Tsvetochnaya-1 va Tsvetochnaya-2 ma'lumotlar markazlari qayta yaratilgan. Qo'shimcha resurslarni yuklab olishga rozi bo'lishni unutmang, ular ba'zi joylarni to'g'ri ko'rsatish uchun zarurdir.
Sizni kvestlar, reklama kodlari, Pasxa tuxumlari va yoqimli muloqot kutmoqda.
Manba: www.habr.com
