Bloqumuzda artıq var
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
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
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 quraşdırmaq çətin deyil, müvafiq təlimatlar resursdadır
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.
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
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
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ə
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
Ə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
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
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ə
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