Minecraft server optimallaşdırılması

Minecraft server optimallaşdırılması
Bloqumuzda artıq var deyə danışdı, öz Minecraft serverinizi necə yaratmaq olar, lakin o vaxtdan 5 il keçdi və çox şey dəyişdi. Biz sizinlə belə məşhur oyunun server hissəsini yaratmaq və optimallaşdırmaq üçün cari yolları paylaşırıq.

9 illik tarixi ərzində (buraxılış tarixindən etibarən) Minecraft həm adi oyunçular, həm də geeks arasında inanılmaz sayda pərəstişkar və nifrət qazandı. Bloklardan ibarət dünyanın sadə konsepsiyası əyləncənin sadə formasından ünsiyyət qurmaq və real dünyadan müxtəlif obyektlər yaratmaq üçün universal vasitəyə çevrilmişdir.

Tikintidən əlavə, oyun yaratmaq qabiliyyətinə malikdir məntiq, Minecraft daxilində tam hüquqlu alqoritmləri həyata keçirməyə imkan verir. YouTube çox təsir edici videolarla doludur ki, insanlar çox böyük səy sərf edərək və çox vaxt sərf edərək bu və ya digər elektron cihazın bir nüsxəsini yaratdılar və ya ətraflı surətini yaratdılar. mövcud и uydurma memarlıq strukturları. Hər şey yalnız oyunçunun təxəyyülü və oyun aləminin imkanları ilə məhdudlaşır.


Ancaq oyunçuların tam olaraq nə yaratdıqları haqqında daha çox danışmayaq, amma tətbiqin server hissəsinə baxaq və yük altında işləmə zamanı yarana biləcək problemləri (bəzən çox mürəkkəb) vurğulayaq. Dərhal rezerv edək ki, biz yalnız Java Edition haqqında danışacağıq.

Server növləri

Ən sadə seçim oyun müştərisinə quraşdırılmış serverdir. Biz dünya yaratdıq, bir düyməni basdıq və server yerli şəbəkə üzərindən əlçatan oldu. Bu seçim heç bir ciddi yükə tab gətirə bilməz və buna görə də bunu nəzərə almayacağıq.

Vanil

Mojang Studios oyunun server hissəsini Java proqramı kimi pulsuz paylayır rəsmi saytında. Bu, özünüz yaratmağa imkan verir ayrılmış server və şəxsi dünya, onu planetin istənilən yerindən əlaqə üçün əlçatan edir. Bunu ilk dəfə edənlər üçün əla bir şey var dərslik, müvafiq oyun Wiki-də mövcuddur.

Bu yanaşmanın bir ciddi çatışmazlığı var, yəni serverin funksionallığını genişləndirən və təkcə bir çox prosesləri avtomatlaşdırmağa deyil, həm də performansı optimallaşdırmağa imkan verən plaginləri birləşdirmək üçün hazır imkanların olmaması. Bundan əlavə, rəsmi serverdə hər bir bağlı oyunçu üçün kifayət qədər böyük RAM istehlakı var.

bukkit

Vanilla versiyası əsasında həvəskarlar tərəfindən yaradılmış server proqramı bukkit plaginləri və modifikasiyaları (modifikasiyaları) dəstəkləməklə oyunun imkanlarını əhəmiyyətli dərəcədə genişləndirdi. Bu, təkcə oyuna yeni bloklar əlavə etməyə deyil, həm də vanil proqramı üçün əlçatmaz olan müxtəlif manipulyasiyalar etməyə imkan verdi. Maraqlıdır ki, bu proqram xeyli az yaddaş tələb edirdi.

Bukkit quraşdırmaq çətin deyil, müvafiq təlimatlar resursdadır GamePedia. Ancaq bunun mənası yoxdur, çünki 2014-cü ildən Bukkit komandası dağıldı, layihə tərtibatçıları Mojang Studios-un işçiləri oldular və anbar tərk edilmiş. Beləliklə, Bukkit faktiki olaraq ölüb və növbəti iki layihəyə diqqət yetirmək məntiqlidir.

SpigotMC

Plugin tərtibatçılarının həyatını asanlaşdırmaq üçün oyun dünyası ilə qarşılıqlı əlaqə yaratmaq üçün API-yə ehtiyac var idi. Yaradıcıların həll etdiyi problem məhz budur. Spigot, Bukkit nüvəsini götürərək daha yaxşı etibarlılıq və performans əldə etmək üçün onu yenidən işləyib. Buna baxmayaraq, Git deposu layihə Rəqəmsal Minilliyin Müəllif Hüquqları Qanununa görə bloklandı (DMCA) və mənbə kodunu oradan yükləmək mümkün deyil.

Hal-hazırda SpigotMC fəal şəkildə inkişaf etdirilir və istifadə olunur. Bukkit üçün yaradılmış bütün plaginləri dəstəkləyir, lakin onunla geriyə uyğun deyil. DMCA Takedown-dan keçmək üçün BuildTools adlı zərif bir üsul icad edildi. Bu alət tərtib edilmiş proqramın yayılması ehtiyacını aradan qaldırır və istifadəçilərə Spigot, CraftBukkit və Bukkit-i mənbə kodundan tərtib etməyə imkan verir. Bütün bunlar DMCA qadağasını faydasız edir.

PaperMC

Hər şey gözəl görünürdü və Spigot əla seçim oldu. Lakin bu, bəzi həvəskarlar üçün kifayət etmədi və onlar “steroidlərdə” öz Spigot çəngəllərini yaratdılar. Aktiv layihə səhifəsi əsas üstünlüyü "bu, axmaq sürətli" olmasıdır. İnkişaf etmiş icma yaranan problemləri tez həll etməyə imkan verir və genişləndirilmiş API maraqlı plaginlər yaratmağa imkan verir. Siz verilmiş sadə bir əmrlə PaperMC-ni işə sala bilərsiniz sənədləşdirmə.

PaperMC əla uyğunluğa malikdir, ona görə də SpigotMC üçün yazılmış plaginlər PaperMC-də asanlıqla işləyə bilər, lakin rəsmi dəstək olmadan. SpigotMC ilə geriyə uyğunluq da mövcuddur. Server yaratmaq üçün müxtəlif variantları sadaladığımız üçün indi yarana biləcək performans problemlərinə keçək.

Problemlər və həllər

Başa düşməli olduğunuz əsas şey, oyun dünyasının işlənməsi ilə bağlı hər şeyin yalnız fiziki serverin bir hesablama nüvəsində işlənəcəyidir. Beləliklə, birdən onlarla hesablama nüvəsi olan əla bir serveriniz varsa, yalnız biri yüklənəcəkdir. Bütün digərləri faktiki olaraq boş olacaq. Bu proqramın arxitekturasıdır və bununla bağlı heç nə edə bilməyəcəksiniz. Beləliklə, server seçərkən nüvələrin sayına deyil, saat tezliyinə diqqət yetirməlisiniz. Nə qədər yüksək olsa, performans bir o qədər yaxşı olar.

RAM tutumu məsələsinə gəldikdə, aşağıdakı göstəricilərdən çıxış etməliyik:

  • planlaşdırılmış oyunçuların sayı;
  • serverdə planlaşdırılmış dünya sayı;
  • hər dünyanın ölçüsü.

Yadda saxlamaq lazımdır ki, Java proqramı həmişə RAM ehtiyatına ehtiyac duyur. Əgər siz 8 gigabayt yaddaş istehlakını gözləyirsinizsə, o zaman əslində 12-yə sahib olmalısınız. Rəqəmlər nisbidir, lakin mahiyyət dəyişmir.

Server hissəsini başlamaq üçün məqalədə göstərilən bayraqlardan istifadə etməyi məsləhət görürük Minecraft üçün JVM - G1GC Zibil Kollektor Bayraqlarının tənzimlənməsi. Bu "qara sehr" serverə "zibil toplayıcısını" düzgün konfiqurasiya etməyə və RAM istifadəsini optimallaşdırmağa imkan verir. Oyunçuların pik axını zamanı serverin həqiqətən istehlak etdiyi yaddaşdan daha çox yaddaş ayırmamalısınız.

Blok xəritəsinin yaradılması

"Doğrudanmı aya baxdığınız zaman var olduğunu düşünürsünüz?" (Albert Eynşteyn)

Tamamilə yeni server. Oyunçu ilk dəfə uğurla qoşulan kimi, oyun xarakteri ümumi toplanma nöqtəsində (kürü) görünür. Bu, oyun dünyasının server tərəfindən əvvəlcədən yaradıldığı yeganə yerdir. Eyni zamanda, müştəri hissəsi parametrlərə baxır və əsas parametr rəsm məsafəsidir. O, hissələrlə ölçülür (xəritənin sahəsi 16×16 və 256 blok hündürlükdədir) Orada neçə parça göstərilib, serverdən tam olaraq neçə ədəd tələb olunacaq.

Server dünyanın qlobal xəritəsini saxlayır və oyun xarakterinin görünmə nöqtəsində hələ heç bir yaradılan blok yoxdursa, server onları dinamik şəkildə yaradır və saxlayır. Bu, nəinki böyük hesablama resursları tələb edir, həm də dünya xəritəsinin ölçüsünü daim artırır. Ən qədim anarxist serverlərdən birində 2b2t (2builders2tools) Xəritənin ölçüsü artıq 8 Tb-ı keçib və dünyanın sərhədi təxminən 30 milyon blokdur. Bu serverlə əlaqəli minlərlə hekayə var və o, seriyada öz məqaləsinə layiqdir.

Bir oyunçu ətrafında dünya yaratmaq problem deyil. Yüzlərlə oyunçu ətrafında bir dünya yaratmaq qısa müddət ərzində serverin kiçik yavaşlamasına səbəb olacaq, bundan sonra yük azalacaq. Təxminən min oyunçuya çatan müştəri göstərmə məsafəsində bir dünya yaratmaq artıq serveri “atmaq” və bütün müştəriləri fasilə səbəbindən oradan atmaq iqtidarındadır.

Server proqramında kimi bir dəyər var TPS (Server başına gənə - saniyədə gənə). Normalda 1 saat dövrü 50 ms-ə bərabərdir. (Real dünyanın 1 saniyəsi oyun dünyasının 20 gənəsinə bərabərdir). Bir işarənin işlənməsi 60 saniyəyə qədər artarsa, server proqramı bütün oyunçuları ataraq bağlanacaq.

Həll yolu dünyanı müəyyən koordinatlarla məhdudlaşdırmaq və ilkin blok generasiyasını həyata keçirməkdir. Beləliklə, oyun zamanı dinamik nəsil ehtiyacını aradan qaldırırıq və serverə yalnız mövcud xəritəni oxumaq lazımdır. Hər iki problem bir plaginlə həll edilə bilər World Border.

Ən asan yol, bir əmrlə dünya sərhədini kürü nöqtəsinə nisbətən dairə şəklində təyin etməkdir (baxmayaraq ki, onu istənilən formada edə bilərsiniz):

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

Oyunçu xarakteri sərhədi keçməyə çalışarsa, o, bir neçə blok geri itələnəcək. Bu, məhdud müddət ərzində bir neçə dəfə edilərsə, cinayətkar zorla kürü nöqtəsinə teleportasiya ediləcək. Dünyanın əvvəlcədən nəsli daha da sadədir, əmrlə:

/wb fill

Bu hərəkət potensial olaraq serverdəki oyunçulara təsir göstərə biləcəyi üçün təsdiqlədiyinizə əmin olun:

/wb confirm

Ümumilikdə, Intel® Xeon® Gold 5000 prosessorunda 40 blok (~2 milyard blok) radiuslu dünya yaratmaq təxminən 6240 saat çəkdi.Ona görə də, əvvəlcədən daha böyük xəritə yaratmaq istəyirsinizsə, unutmayın ki, bu proses kifayət qədər vaxt aparacaq və server TPS ciddi şəkildə azalacaq. Həm də unutmayın ki, hətta 5000 blok radius üçün təxminən 2 GB disk sahəsi tələb olunur.

Pluginin ən son versiyasının Minecraft 1.14 versiyası üçün hazırlanmasına baxmayaraq, onun sonrakı versiyalarda əla işlədiyi eksperimental olaraq müəyyən edilmişdir. Şərhləri olan əmrlərin tam siyahısı mövcuddur plagin forumunda.

Problemli bloklar

Minecraft-da çox sayda blok növü var. Bununla belə, oxucuların diqqətini belə bir bloka cəlb etmək istərdik TNT. Adından da göründüyü kimi, bu blok partlayıcıdır (redaktorun qeydi - bu virtual dünyanın oyun elementidir və bu elementdə real partlayıcı maddələr yoxdur). Onun özəlliyi ondadır ki, aktivləşmə anında cazibə qüvvəsi ona təsir etməyə başlayır. Bu, bu anda blok düşməyə başlayarsa, serveri bütün koordinatları hesablamağa məcbur edir.

Bir neçə TNT bloku varsa, bir blokun partlaması qonşu bloklarda detonasiyaya və cazibə qüvvəsinin aktivləşməsinə səbəb olur, onları hər tərəfə səpələyir. Server tərəfindəki bütün bu gözəl mexanika hər bir blokun trayektoriyasını hesablamaq üçün bir çox əməliyyata, eləcə də qonşu bloklarla qarşılıqlı əlaqəyə bənzəyir. Tapşırıq olduqca resurs tələb edir, hər kəs asanlıqla yoxlaya bilər. TNT bloklarından ən azı 30x30x30 ölçüdə bir kub yaradın və partlatın. Və yaxşı, güclü oyun kompüteriniz olduğunu düşünürsünüzsə, çox səhv etdiniz 😉

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

Minecraft server optimallaşdırılması
Intel® Xeon® Gold 6240 ilə serverdə oxşar “təcrübə” blokun partladılması zamanı ciddi TPS azalmasına və 80% CPU yüklənməsinə səbəb oldu. Buna görə də, hər hansı bir oyunçu bunu edə bilirsə, performans problemi serverdəki bütün oyunçulara təsir edəcəkdir.

Daha sərt seçim - Kenar Kristalları. TNT buna baxmayaraq ardıcıl olaraq partlayırsa, o zaman Edge Crystals hamısı eyni anda partlayır, bu da nəzəri olaraq server proqramının işini tamamilə dayandıra bilər.

Bu ssenaridən yalnız bu blokların oyun dünyasında istifadəsini tamamilə qadağan etməklə qarşısını almaq olar. Məsələn, plaqindən istifadə etməklə WorldGuard. Nəzərə alın ki, bu plagin özlüyündə başqa bir plagin olmadan işləmir WorldEdit. Beləliklə, əvvəlcə WorldEdit, sonra isə WorldGuard quraşdırın.

Nəticə

Oyun serverini düzgün idarə etmək asan məsələ deyil. Çətinliklər və aşağı performans sizi hər addımda gözləyəcək, xüsusən də oyun mexanikasının özlərini nəzərə almasanız. Hər şeyi əvvəlcədən görmək mümkün deyil, çünki oyunçular bəzən serveri nəzərdə tutulmadığı bir şeyi etməyə məcbur etmək üçün çox yaradıcı ola bilərlər. Yalnız risklər və müəyyən edilmiş məhdudiyyətlər arasında ağlabatan tarazlıq serverin davamlı işləməsinə imkan verəcək və onun performansını kritik dəyərlərə endirməyəcək.

Karantin zamanı bəzi əməkdaşlarımız sevimli ofisləri üçün darıxdılar və onları Minecraft-da yenidən yaratmağa qərar verdilər. Səhhətinizi riskə atmadan və yolda vaxt itirmədən bizə baş çəkmək şansınız da var.

Bunun üçün hər kəsi serverimizə dəvət edirik minecraft.selectel.ru (müştəri versiyası 1.15.2), burada məlumat mərkəzləri Tsvetochnaya-1 və Tsvetochnaya-2 yenidən yaradıldı. Əlavə resursları yükləməyə razı olmağı unutmayın, onlar bəzi yerlərin düzgün göstərilməsi üçün lazımdır.

Sizi qonaqlar, promosyon kodları, Pasxa yumurtaları və xoş ünsiyyət gözləyir.

Mənbə: www.habr.com

Добавить комментарий