Minecraft серверін оңтайландыру

Minecraft серверін оңтайландыру
Біздің блогымызда қазірдің өзінде бар деді, өзіңіздің Minecraft серверіңізді қалай жасауға болады, бірақ содан бері 5 жыл өтті және көп нәрсе өзгерді. Біз сіздермен осындай танымал ойынның серверлік бөлігін жасау және оңтайландырудың қазіргі әдістерімен бөлісеміз.

Өзінің 9 жылдық тарихында (шығару күнінен бастап есептегенде) Minecraft қарапайым ойыншылар мен гейктер арасында көптеген жанкүйерлер мен жек көретіндерге ие болды. Блоктардан жасалған дүниенің қарапайым концепциясы ойын-сауықтың қарапайым түрінен нақты әлемнен әртүрлі объектілерді қарым-қатынас жасау және жасау үшін әмбебап ортаға айналды.

Құрылыстан басқа, ойынның жасау мүмкіндігі бар логика, бұл сізге Minecraft ішінде толыққанды алгоритмдерді енгізуге мүмкіндік береді. YouTube өте әсерлі бейнелерге толы, онда адамдар көп күш жұмсап, көп уақыт жұмсай отырып, осы немесе басқа электрондық құрылғының көшірмесін жасаған немесе егжей-тегжейлі көшірмесін жасаған. бар и ойдан шығарылған сәулет құрылымдары. Барлығы тек ойыншының қиялымен және ойын әлемінің мүмкіндіктерімен шектеледі.


Бірақ ойыншылар нақты не жасайтыны туралы бұдан әрі айтпай-ақ қояйық, бірақ қосымшаның серверлік бөлігін қарастырайық және жүктеме кезінде жұмыс кезінде туындауы мүмкін мәселелерді (кейде өте күрделі) бөліп көрейік. Біз тек Java басылымы туралы сөйлесетінімізді бірден ескертейік.

Серверлердің түрлері

Ең қарапайым опция - ойын клиентіне орнатылған сервер. Біз әлем құрдық, бір түймені басып, сервер жергілікті желі арқылы қолжетімді болды. Бұл опция кез-келген ауыр жүктемеге төтеп бере алмайды, сондықтан біз оны қарастырмаймыз.

ваниль

Mojang Studios ойынның серверлік бөлігін Java қолданбасы ретінде тегін таратады ресми сайтында. Бұл өзіңізді құруға мүмкіндік береді арнайы сервер және жеке әлем, бұл оны планетаның кез келген нүктесінен қосылуға қол жетімді етеді. Мұны бірінші рет жасап жатқандар үшін керемет нәрсе бар оқу құралы, сәйкес ойын Wiki сайтында қолжетімді.

Бұл тәсілдің бір елеулі кемшілігі бар, атап айтқанда сервердің функционалдығын кеңейтетін және көптеген процестерді автоматтандыруға ғана емес, сонымен қатар өнімділікті оңтайландыруға мүмкіндік беретін плагиндерді қосуға арналған қордан тыс мүмкіндіктердің болмауы. Сонымен қатар, ресми серверде әрбір қосылған ойнатқыш үшін жеткілікті үлкен RAM тұтынуы бар.

Буккит

Ваниль нұсқасына негізделген энтузиастар жасаған серверлік қолданба Буккит плагиндер мен модификацияларды (модификацияларды) қолдау арқылы ойын мүмкіндіктерін айтарлықтай кеңейтті. Бұл геймплейге жаңа блоктарды қосуға ғана емес, сонымен қатар ванильді бағдарламалық қамтамасыз ету үшін қол жетімсіз әртүрлі манипуляцияларды жасауға мүмкіндік берді. Бір қызығы, бұл қолданба айтарлықтай аз жадты қажет етеді.

Bukkit орнату қиын емес, тиісті нұсқаулар ресурста бар GamePedia. Бірақ бұл мағынасыз, өйткені 2014 жылдан бастап Bukkit командасы тарады, жобаны әзірлеушілер Mojang Studios қызметкерлері болды және репозиторий тастап кеткен. Осылайша, Буккит тиімді түрде өлді және келесі екі жобаға назар аударудың мағынасы бар.

SpigotMC

Плагин әзірлеушілерінің өмірін жеңілдету үшін ойын әлемімен әрекеттесу үшін API қажет болды. Дәл осы мәселені жасаушылар шешті. Spigot, Bukkit өзегін алып, сенімділік пен өнімділікті жақсарту үшін оны қайта өңдеу. Дегенмен, Git репозиторийі жоба «Цифрлық мыңжылдық авторлық құқық» заңына байланысты бұғатталды (DMCA), және ол жерден бастапқы кодты жүктеп алу мүмкін емес.

Қазіргі уақытта SpigotMC белсенді түрде әзірленуде және қолданылады. Ол Bukkit үшін жасалған барлық плагиндерді қолдайды, бірақ онымен кері үйлесімді емес. DMCA жоюды айналып өту үшін BuildTools деп аталатын талғампаз әдіс ойлап табылды. Бұл құрал құрастырылған қолданбаны тарату қажеттілігін болдырмайды және пайдаланушыларға бастапқы кодтан Spigot, CraftBukkit және Bukkit құрастыруға мүмкіндік береді. Мұның бәрі DMCA тыйымын пайдасыз етеді.

PaperMC

Барлығы керемет болып көрінді, ал Spigot тамаша нұсқа болды. Бірақ бұл кейбір энтузиастар үшін жеткіліксіз болды және олар «стероидтарда» өздерінің Spigot шанышқысын жасады. Қосулы жоба беті басты артықшылығы - «Бұл ақымақ жылдам». Дамыған қауымдастық пайда болған мәселелерді жылдам шешуге мүмкіндік береді, ал кеңейтілген API қызықты плагиндерді жасауға мүмкіндік береді. PaperMC-де берілген бір қарапайым пәрменмен іске қосуға болады құжаттама.

PaperMC тамаша үйлесімділікке ие, сондықтан SpigotMC үшін жазылған плагиндер PaperMC-де оңай жұмыс істей алады, бірақ ресми қолдаусыз. SpigotMC-пен кері үйлесімділік те бар. Енді біз серверді құрудың әртүрлі нұсқаларын тізімдегеннен кейін, туындауы мүмкін өнімділік мәселелеріне көшейік.

Мәселелер мен шешімдер

Ең бастысы, ойын әлемін өңдеуге қатысты барлық нәрсе физикалық сервердің бір есептеуіш ядросында ғана өңделетінін түсіну керек. Егер кенеттен сізде ондаған есептеуіш ядролары бар тамаша сервер болса, тек біреуі ғана жүктеледі. Барлық қалғандары іс жүзінде бос болады. Бұл қолданбаның архитектурасы және бұл туралы ештеңе істей алмайсыз. Сондықтан серверді таңдағанда, ядролардың санына емес, тактілік жиілігіне назар аудару керек. Ол неғұрлым жоғары болса, өнімділік соғұрлым жақсы болады.

ЖЖҚ сыйымдылығы мәселесіне келетін болсақ, біз келесі көрсеткіштерден шығуымыз керек:

  • ойыншылардың жоспарланған саны;
  • сервердегі әлемдердің жоспарланған саны;
  • әр дүниенің өлшемі.

Java қолданбасы әрқашан жедел жадтың резервін қажет ететінін есте ұстаған жөн. Егер сіз 8 гигабайт жадты тұтынуды күтсеңіз, онда сізде 12 болуы керек. Сандар салыстырмалы, бірақ мәні өзгермейді.

Сервер бөлігін бастау үшін мақалада көрсетілген жалаушаларды пайдалануды ұсынамыз Minecraft үшін JVM – G1GC қоқыс жинаушы жалауларын баптау. Бұл «қара магия» серверге «қоқыс жинағышты» дұрыс конфигурациялауға және жедел жадты пайдалануды оңтайландыруға мүмкіндік береді. Ойыншылардың ең жоғары ағыны кезінде сервер нақты тұтынатын жадты көбірек бөлмеу керек.

Блок картасын құру

«Сіз шынымен айға қараған кезде ғана бар деп ойлайсыз ба?» (Альберт Эйнштейн)

Толығымен жаңа сервер. Ойыншы бірінші рет сәтті қосыла салысымен ойын кейіпкері жалпы жиналу нүктесінде (уылдырық) пайда болады. Бұл сервер ойын әлемін алдын ала жасайтын жалғыз орын. Дәл сол сәтте клиент бөлігі параметрлерге қарайды, ал негізгі параметр - сызу қашықтығы. Ол бөліктермен өлшенеді (карта аумағы 16×16 және биіктігі 256 блок) Қанша бөлік көрсетілген болса, серверден нақты қанша бөлік сұралады.

Сервер дүние жүзінің жаһандық картасын сақтайды және егер ойын кейіпкерінің пайда болу нүктесінде әлі құрастырылған блоктар болмаса, сервер оларды динамикалық түрде жасайды және сақтайды. Бұл үлкен есептеу ресурстарын қажет етіп қана қоймайды, сонымен қатар әлем картасының көлемін үнемі ұлғайтады. Ең көне анархистік серверлердің бірінде 2b2т (2builders2tools) Картаның өлшемі қазірдің өзінде 8 Тб-тан асты, ал әлемнің шекарасы шамамен 30 миллион блокты құрайды. Бұл сервермен байланысты мыңдаған әңгімелер бар және ол сериядағы өз мақаласына лайық.

Бір ойыншының айналасында әлем құру проблема емес. Жүздеген ойыншылардың айналасындағы әлемді құру сервердің аз уақытқа баяулауына әкеледі, содан кейін жүктеме азаяды. Мыңға жуық ойыншыны көрсететін қашықтықтағы клиенттік әлемді құру серверді «түсіруге» және күту уақытына байланысты барлық клиенттерді одан шығаруға қабілетті.

Сервер бағдарламалық құралында сияқты мән бар TPS (Ticks per Server – секундына кенелер). Әдетте, 1 тактілік цикл 50 мс-ке тең. (Шын дүниенің 1 секунды ойын әлемінің 20 кенесіне тең). Егер бір белгіні өңдеу 60 секундқа дейін артса, серверлік қолданба жабылып, барлық ойыншыларды шығарып тастайды.

Шешім - әлемді белгілі бір координаттармен шектеу және блоктың алдын ала генерациясын орындау. Осылайша, біз ойын барысында динамикалық генерациялау қажеттілігін алып тастаймыз және серверге тек бар картаны оқу қажет болады. Екі мәселені бір плагинмен шешуге болады WorldBorder.

Ең оңай жолы - бір пәрменмен әлемдік шекараны уылдырық шашатын нүктеге қатысты шеңбер түрінде орнату (бірақ оны кез келген пішінде жасауға болады):

/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

Minecraft серверін оңтайландыру
Intel® Xeon® Gold 6240 жүйесі бар сервердегі ұқсас «тәжірибе» блоктың детонациясының бүкіл уақытында елеулі TPS төмендеуіне және процессордың 80% жүктемесіне әкелді. Сондықтан, егер кез келген ойыншы мұны істей алатын болса, өнімділік мәселесі сервердегі барлық ойыншыларға әсер етеді.

Одан да қиын нұсқа - Жиектер кристалдары. Егер TNT соған қарамастан дәйекті түрде жарылып кетсе, онда Edge Crystals барлығы бір уақытта жарылып кетеді, бұл теорияда сервер қосымшасының жұмысын толығымен тоқтата алады.

Бұл сценарийді ойын әлемінде осы блоктарды пайдалануға толығымен тыйым салу арқылы ғана болдырмауға болады. Мысалы, плагинді пайдалану WorldGuard. Бұл плагин өздігінен басқа плагинсіз жұмыс істемейтінін ескеріңіз Әлемдік. Сондықтан алдымен WorldEdit, содан кейін WorldGuard орнатыңыз.

қорытынды

Ойын серверін дұрыс басқару оңай жұмыс емес. Қиындықтар мен өнімділіктің төмендеуі сізді әр қадамда күтеді, әсіресе геймплей механикасын есепке алмасаңыз. Барлығын болжау мүмкін емес, өйткені ойыншылар кейде серверді ол арналмаған нәрсені жасауға мәжбүрлеуге тырысып, өте креативті болуы мүмкін. Тәуекелдер мен белгіленген шектеулер арасындағы ақылға қонымды теңгерім ғана серверге үздіксіз жұмыс істеуге және оның өнімділігін маңызды мәндерге дейін төмендетпеуге мүмкіндік береді.

Карантин кезінде кейбір қызметкерлеріміз сүйікті кеңселерін сағынып, Minecraft ішінде қайта құруды ұйғарды. Сондай-ақ, денсаулығыңызға қауіп төндірмей, жолда уақытыңызды жоғалтпай бізге келуге мүмкіндігіңіз бар.

Ол үшін барлығын серверімізге шақырамыз minecraft.selectel.ru (клиент нұсқасы 1.15.2), мұнда Цветочная-1 және Цветочная-2 деректер орталықтары қайта құрылды. Қосымша ресурстарды жүктеп алуға келісім беруді ұмытпаңыз, олар кейбір орындарды дұрыс көрсету үшін қажет.

Сізді квесттер, жарнамалық кодтар, Пасха жұмыртқалары және жағымды қарым-қатынас күтеді.

Ақпарат көзі: www.habr.com

пікір қалдыру