Біздің блогымызда қазірдің өзінде бар
Өзінің 9 жылдық тарихында (шығару күнінен бастап есептегенде) Minecraft қарапайым ойыншылар мен гейктер арасында көптеген жанкүйерлер мен жек көретіндерге ие болды. Блоктардан жасалған дүниенің қарапайым концепциясы ойын-сауықтың қарапайым түрінен нақты әлемнен әртүрлі объектілерді қарым-қатынас жасау және жасау үшін әмбебап ортаға айналды.
Құрылыстан басқа, ойынның жасау мүмкіндігі бар
Бірақ ойыншылар нақты не жасайтыны туралы бұдан әрі айтпай-ақ қояйық, бірақ қосымшаның серверлік бөлігін қарастырайық және жүктеме кезінде жұмыс кезінде туындауы мүмкін мәселелерді (кейде өте күрделі) бөліп көрейік. Біз тек Java басылымы туралы сөйлесетінімізді бірден ескертейік.
Серверлердің түрлері
Ең қарапайым опция - ойын клиентіне орнатылған сервер. Біз әлем құрдық, бір түймені басып, сервер жергілікті желі арқылы қолжетімді болды. Бұл опция кез-келген ауыр жүктемеге төтеп бере алмайды, сондықтан біз оны қарастырмаймыз.
ваниль
Mojang Studios ойынның серверлік бөлігін Java қолданбасы ретінде тегін таратады
Бұл тәсілдің бір елеулі кемшілігі бар, атап айтқанда сервердің функционалдығын кеңейтетін және көптеген процестерді автоматтандыруға ғана емес, сонымен қатар өнімділікті оңтайландыруға мүмкіндік беретін плагиндерді қосуға арналған қордан тыс мүмкіндіктердің болмауы. Сонымен қатар, ресми серверде әрбір қосылған ойнатқыш үшін жеткілікті үлкен RAM тұтынуы бар.
Буккит
Ваниль нұсқасына негізделген энтузиастар жасаған серверлік қолданба
Bukkit орнату қиын емес, тиісті нұсқаулар ресурста бар
SpigotMC
Плагин әзірлеушілерінің өмірін жеңілдету үшін ойын әлемімен әрекеттесу үшін API қажет болды. Дәл осы мәселені жасаушылар шешті.
Қазіргі уақытта SpigotMC белсенді түрде әзірленуде және қолданылады. Ол Bukkit үшін жасалған барлық плагиндерді қолдайды, бірақ онымен кері үйлесімді емес. DMCA жоюды айналып өту үшін BuildTools деп аталатын талғампаз әдіс ойлап табылды. Бұл құрал құрастырылған қолданбаны тарату қажеттілігін болдырмайды және пайдаланушыларға бастапқы кодтан Spigot, CraftBukkit және Bukkit құрастыруға мүмкіндік береді. Мұның бәрі DMCA тыйымын пайдасыз етеді.
PaperMC
Барлығы керемет болып көрінді, ал Spigot тамаша нұсқа болды. Бірақ бұл кейбір энтузиастар үшін жеткіліксіз болды және олар «стероидтарда» өздерінің Spigot шанышқысын жасады. Қосулы
PaperMC тамаша үйлесімділікке ие, сондықтан SpigotMC үшін жазылған плагиндер PaperMC-де оңай жұмыс істей алады, бірақ ресми қолдаусыз. SpigotMC-пен кері үйлесімділік те бар. Енді біз серверді құрудың әртүрлі нұсқаларын тізімдегеннен кейін, туындауы мүмкін өнімділік мәселелеріне көшейік.
Мәселелер мен шешімдер
Ең бастысы, ойын әлемін өңдеуге қатысты барлық нәрсе физикалық сервердің бір есептеуіш ядросында ғана өңделетінін түсіну керек. Егер кенеттен сізде ондаған есептеуіш ядролары бар тамаша сервер болса, тек біреуі ғана жүктеледі. Барлық қалғандары іс жүзінде бос болады. Бұл қолданбаның архитектурасы және бұл туралы ештеңе істей алмайсыз. Сондықтан серверді таңдағанда, ядролардың санына емес, тактілік жиілігіне назар аудару керек. Ол неғұрлым жоғары болса, өнімділік соғұрлым жақсы болады.
ЖЖҚ сыйымдылығы мәселесіне келетін болсақ, біз келесі көрсеткіштерден шығуымыз керек:
- ойыншылардың жоспарланған саны;
- сервердегі әлемдердің жоспарланған саны;
- әр дүниенің өлшемі.
Java қолданбасы әрқашан жедел жадтың резервін қажет ететінін есте ұстаған жөн. Егер сіз 8 гигабайт жадты тұтынуды күтсеңіз, онда сізде 12 болуы керек. Сандар салыстырмалы, бірақ мәні өзгермейді.
Сервер бөлігін бастау үшін мақалада көрсетілген жалаушаларды пайдалануды ұсынамыз
Блок картасын құру
«Сіз шынымен айға қараған кезде ғана бар деп ойлайсыз ба?» (Альберт Эйнштейн)
Толығымен жаңа сервер. Ойыншы бірінші рет сәтті қосыла салысымен ойын кейіпкері жалпы жиналу нүктесінде (уылдырық) пайда болады. Бұл сервер ойын әлемін алдын ала жасайтын жалғыз орын. Дәл сол сәтте клиент бөлігі параметрлерге қарайды, ал негізгі параметр - сызу қашықтығы. Ол бөліктермен өлшенеді (карта аумағы 16×16 және биіктігі 256 блок) Қанша бөлік көрсетілген болса, серверден нақты қанша бөлік сұралады.
Сервер дүние жүзінің жаһандық картасын сақтайды және егер ойын кейіпкерінің пайда болу нүктесінде әлі құрастырылған блоктар болмаса, сервер оларды динамикалық түрде жасайды және сақтайды. Бұл үлкен есептеу ресурстарын қажет етіп қана қоймайды, сонымен қатар әлем картасының көлемін үнемі ұлғайтады. Ең көне анархистік серверлердің бірінде
Бір ойыншының айналасында әлем құру проблема емес. Жүздеген ойыншылардың айналасындағы әлемді құру сервердің аз уақытқа баяулауына әкеледі, содан кейін жүктеме азаяды. Мыңға жуық ойыншыны көрсететін қашықтықтағы клиенттік әлемді құру серверді «түсіруге» және күту уақытына байланысты барлық клиенттерді одан шығаруға қабілетті.
Сервер бағдарламалық құралында сияқты мән бар TPS (Ticks per Server – секундына кенелер). Әдетте, 1 тактілік цикл 50 мс-ке тең. (Шын дүниенің 1 секунды ойын әлемінің 20 кенесіне тең). Егер бір белгіні өңдеу 60 секундқа дейін артса, серверлік қолданба жабылып, барлық ойыншыларды шығарып тастайды.
Шешім - әлемді белгілі бір координаттармен шектеу және блоктың алдын ала генерациясын орындау. Осылайша, біз ойын барысында динамикалық генерациялау қажеттілігін алып тастаймыз және серверге тек бар картаны оқу қажет болады. Екі мәселені бір плагинмен шешуге болады
Ең оңай жолы - бір пәрменмен әлемдік шекараны уылдырық шашатын нүктеге қатысты шеңбер түрінде орнату (бірақ оны кез келген пішінде жасауға болады):
/wb set <радиус в блоках> spawn
Егер ойыншы кейіпкер шекараны кесіп өтпек болса, ол бірнеше блокқа артқа итеріледі. Егер бұл шектеулі уақыт ішінде бірнеше рет жасалса, қылмыскер уылдырық шашатын жерге мәжбүрлі түрде телепортацияланады. Дүниенің алдын-ала жасалуы пәрменмен оңайырақ орындалады:
/wb fill
Бұл әрекет сервердегі ойыншыларға әсер етуі мүмкін болғандықтан, растауды ұмытпаңыз:
/wb confirm
Intel® Xeon® Gold 5000 процессорында 40 блок (~2 миллиард блок) радиусы бар әлемді құру үшін барлығы шамамен 6240 сағат қажет болды. Сондықтан, үлкенірек картаны алдын ала жасағыңыз келсе, мынаны ескеріңіз. бұл процесс лайықты уақытты алады және TPS сервері айтарлықтай қысқарады. Сондай-ақ, тіпті 5000 блок радиусы шамамен 2 ГБ дискілік кеңістікті қажет ететінін есте сақтаңыз.
Плагиннің соңғы нұсқасы Minecraft 1.14 нұсқасы үшін әзірленгеніне қарамастан, оның кейінгі нұсқаларда жақсы жұмыс істейтіні эксперименталды түрде анықталды. Түсіндірмелері бар командалардың толық тізімі қол жетімді
Проблемалық блоктар
Minecraft-та көптеген блоктар бар. Дегенмен, біз оқырмандардың назарын осындай блокқа аударғымыз келеді TNT. Аты айтып тұрғандай, бұл блок жарылғыш зат (редактордың ескертпесі - бұл виртуалды әлемнің ойын элементі және бұл затта нақты жарылғыш заттар жоқ). Оның ерекшелігі, белсендіру сәтінде оған ауырлық күші әсер ете бастайды. Бұл серверді барлық координаттарды есептеуге мәжбүр етеді, егер осы сәтте блок құлай бастаса.
Егер бірнеше тротил блоктары болса, онда бір блоктың детонациясы детонацияны тудырады және көрші блоктарда ауырлық күшін белсендіреді, оларды барлық бағытта шашыратады. Сервер жағындағы осы әдемі механиканың барлығы әр блоктың траекториясын есептеуге арналған көптеген операцияларға, сондай-ақ көрші блоктармен өзара әрекеттесуге ұқсайды. Тапсырма өте ресурсты қажет етеді, оны кез келген адам оңай тексере алады. Өлшемі кемінде 30x30x30 болатын TNT блоктарынан текшені жасаңыз және жарыңыз. Ал егер сізде жақсы, қуатты ойын компьютері бар деп ойласаңыз, қатты қателедіңіз😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt
Intel® Xeon® Gold 6240 жүйесі бар сервердегі ұқсас «тәжірибе» блоктың детонациясының бүкіл уақытында елеулі TPS төмендеуіне және процессордың 80% жүктемесіне әкелді. Сондықтан, егер кез келген ойыншы мұны істей алатын болса, өнімділік мәселесі сервердегі барлық ойыншыларға әсер етеді.
Одан да қиын нұсқа - Жиектер кристалдары. Егер TNT соған қарамастан дәйекті түрде жарылып кетсе, онда Edge Crystals барлығы бір уақытта жарылып кетеді, бұл теорияда сервер қосымшасының жұмысын толығымен тоқтата алады.
Бұл сценарийді ойын әлемінде осы блоктарды пайдалануға толығымен тыйым салу арқылы ғана болдырмауға болады. Мысалы, плагинді пайдалану
қорытынды
Ойын серверін дұрыс басқару оңай жұмыс емес. Қиындықтар мен өнімділіктің төмендеуі сізді әр қадамда күтеді, әсіресе геймплей механикасын есепке алмасаңыз. Барлығын болжау мүмкін емес, өйткені ойыншылар кейде серверді ол арналмаған нәрсені жасауға мәжбүрлеуге тырысып, өте креативті болуы мүмкін. Тәуекелдер мен белгіленген шектеулер арасындағы ақылға қонымды теңгерім ғана серверге үздіксіз жұмыс істеуге және оның өнімділігін маңызды мәндерге дейін төмендетпеуге мүмкіндік береді.
Карантин кезінде кейбір қызметкерлеріміз сүйікті кеңселерін сағынып, Minecraft ішінде қайта құруды ұйғарды. Сондай-ақ, денсаулығыңызға қауіп төндірмей, жолда уақытыңызды жоғалтпай бізге келуге мүмкіндігіңіз бар.
Ол үшін барлығын серверімізге шақырамыз minecraft.selectel.ru (клиент нұсқасы 1.15.2), мұнда Цветочная-1 және Цветочная-2 деректер орталықтары қайта құрылды. Қосымша ресурстарды жүктеп алуға келісім беруді ұмытпаңыз, олар кейбір орындарды дұрыс көрсету үшін қажет.
Сізді квесттер, жарнамалық кодтар, Пасха жұмыртқалары және жағымды қарым-қатынас күтеді.
Ақпарат көзі: www.habr.com