Pengoptimuman pelayan Minecraft

Pengoptimuman pelayan Minecraft
Di blog kami sudah ada memberitahu, bagaimana untuk mencipta pelayan Minecraft anda sendiri, tetapi 5 tahun telah berlalu sejak itu dan banyak yang telah berubah. Kami berkongsi dengan anda cara semasa untuk mencipta dan mengoptimumkan bahagian pelayan bagi permainan popular sedemikian.

Sepanjang sejarah 9 tahunnya (dikira dari tarikh keluaran), Minecraft telah memperoleh jumlah peminat dan pembenci yang menakjubkan di kalangan pemain biasa dan geek. Konsep mudah dunia yang diperbuat daripada blok telah berkembang daripada bentuk hiburan yang mudah menjadi medium universal untuk berkomunikasi dan mencipta pelbagai objek dari dunia nyata.

Sebagai tambahan kepada pembinaan, permainan ini mempunyai keupayaan untuk mencipta logik, yang membolehkan anda melaksanakan algoritma lengkap dalam Minecraft. YouTube penuh dengan video yang sangat mengagumkan di mana orang ramai, setelah melakukan banyak usaha dan menghabiskan banyak masa, telah mencipta salinan peranti elektronik ini atau itu atau membina salinan terperinci sedia ada и rekaan struktur seni bina. Segala-galanya hanya terhad oleh imaginasi pemain dan kemungkinan dunia permainan.


Tetapi mari kita tidak bercakap lebih lanjut tentang apa sebenarnya yang dibuat oleh pemain, tetapi mari kita lihat bahagian pelayan aplikasi dan serlahkan masalah (kadang-kadang sangat kompleks) yang mungkin timbul semasa operasi di bawah beban. Mari buat tempahan dengan segera bahawa kita hanya akan bercakap tentang Edisi Java.

Jenis pelayan

Pilihan paling mudah ialah pelayan yang dibina ke dalam klien permainan. Kami mencipta dunia, menekan satu butang, dan pelayan boleh diakses melalui rangkaian tempatan. Pilihan ini tidak dapat menahan sebarang beban yang serius, dan oleh itu kami tidak akan mempertimbangkannya.

Vanilla

Mojang Studios mengedarkan bahagian pelayan permainan sebagai aplikasi Java secara percuma di laman web rasmi. Ini membolehkan anda membuat sendiri pelayan khusus dan dunia peribadi, menjadikannya boleh diakses untuk sambungan dari mana-mana sahaja di planet ini. Bagi mereka yang pertama kali melakukan ini, ada yang hebat tutorial, tersedia di Wiki permainan yang sepadan.

Pendekatan ini mempunyai satu kelemahan yang serius, iaitu kekurangan keupayaan luar biasa untuk menyambung pemalam yang mengembangkan fungsi pelayan dan membenarkan bukan sahaja untuk mengautomasikan banyak proses, tetapi juga untuk mengoptimumkan prestasi. Di samping itu, pelayan rasmi mempunyai penggunaan RAM yang agak besar untuk setiap pemain yang disambungkan.

bukkit

Aplikasi pelayan yang dicipta oleh peminat berdasarkan versi Vanila bukkit meluaskan keupayaan permainan dengan ketara dengan menyokong pemalam dan mod (pengubahsuaian). Ia membenarkan bukan sahaja untuk menambah blok baru pada permainan, tetapi juga untuk melakukan pelbagai manipulasi yang tidak boleh diakses oleh perisian vanila. Menariknya, aplikasi ini memerlukan memori yang jauh lebih sedikit.

Memasang Bukkit tidak sukar; arahan yang sepadan ada pada sumber GamePedia. Tetapi ini tidak masuk akal, sejak 2014 pasukan Bukkit telah dibubarkan, pemaju projek telah menjadi pekerja Mojang Studios, dan repositori terbengkalai. Oleh itu, Bukkit telah mati dengan berkesan, dan masuk akal untuk memberi perhatian kepada dua projek seterusnya.

SpigotMC

Untuk menjadikan kehidupan lebih mudah bagi pembangun pemalam, terdapat keperluan untuk API untuk berinteraksi dengan dunia permainan. Inilah masalah yang telah diselesaikan oleh pencipta. spigot, mengambil teras Bukkit dan mengolahnya semula untuk mencapai kebolehpercayaan dan prestasi yang lebih baik. Namun begitu, Repositori Git projek itu disekat kerana Akta Hak Cipta Milenium Digital (DMCA), dan adalah mustahil untuk memuat turun kod sumber dari sana.

Pada masa ini, SpigotMC sedang dibangunkan dan digunakan secara aktif. Ia menyokong semua pemalam yang dicipta untuk Bukkit, tetapi tidak serasi ke belakang dengannya. Untuk mengatasi DMCA Takedown, kaedah elegan yang dipanggil BuildTools telah dicipta. Alat ini menghapuskan keperluan untuk mengedarkan aplikasi yang disusun dan membolehkan pengguna menyusun Spigot, CraftBukkit dan Bukkit daripada kod sumber. Semua ini menjadikan larangan DMCA tidak berguna.

PaperMC

Segala-galanya kelihatan hebat, dan Spigot menjadi pilihan yang hebat. Tetapi ini tidak mencukupi untuk sesetengah peminat, dan mereka mencipta garpu Spigot mereka sendiri "pada steroid." hidup halaman projek kelebihan utama ialah "Ia cepat bodoh". Dibangunkan masyarakat membolehkan anda menyelesaikan isu yang timbul dengan cepat, dan API lanjutan membolehkan anda mencipta pemalam yang menarik. Anda boleh melancarkan PaperMC dengan satu arahan mudah, diberikan dokumentasi.

PaperMC mempunyai keserasian yang sangat baik, jadi pemalam yang ditulis untuk SpigotMC boleh berfungsi dengan mudah pada PaperMC, tetapi tanpa sokongan rasmi. Keserasian ke belakang dengan SpigotMC juga ada. Memandangkan kita telah menyenaraikan pelbagai pilihan untuk mencipta pelayan, mari kita beralih kepada isu prestasi yang mungkin timbul.

Masalah dan Penyelesaian

Perkara utama yang perlu anda fahami ialah semua yang berkaitan dengan pemprosesan dunia permainan akan diproses hanya pada satu teras pengkomputeran pelayan fizikal. Jadi jika tiba-tiba anda mempunyai pelayan yang sangat baik dengan sedozen teras pengkomputeran, maka hanya satu akan dimuatkan. Semua yang lain akan hampir terbiar. Ini adalah seni bina aplikasi, dan tiada apa yang boleh anda lakukan mengenainya. Oleh itu, apabila memilih pelayan, anda harus memberi perhatian bukan kepada bilangan teras, tetapi kepada kekerapan jam. Semakin tinggi ia, semakin baik prestasinya.

Mengenai isu kapasiti RAM, kita harus meneruskan dari petunjuk berikut:

  • bilangan pemain yang dirancang;
  • bilangan dunia yang dirancang pada pelayan;
  • saiz setiap dunia.

Perlu diingat bahawa aplikasi Java sentiasa memerlukan rizab RAM. Jika anda menjangkakan penggunaan memori sebanyak 8 gigabait, maka anda sebenarnya perlu mempunyai 12. Nombornya adalah relatif, tetapi intipatinya tidak berubah.

Untuk memulakan bahagian pelayan, kami mengesyorkan menggunakan bendera yang dinyatakan dalam artikel Menala Bendera Pengumpul Sampah JVM – G1GC untuk Minecraft. "Sihir hitam" ini membolehkan pelayan mengkonfigurasi "pengumpul sampah" dengan betul dan mengoptimumkan penggunaan RAM. Anda tidak seharusnya memperuntukkan lebih banyak memori daripada yang sebenarnya digunakan oleh pelayan semasa kemasukan puncak pemain.

Menghasilkan peta blok

"Adakah anda benar-benar fikir bulan hanya wujud apabila anda melihatnya?" (Albert Einstein)

Pelayan baharu sepenuhnya. Sebaik sahaja pemain berjaya menyambung buat kali pertama, watak permainan muncul di tempat berkumpul umum (spawn). Ini adalah satu-satunya tempat di mana dunia permainan pra-dijana oleh pelayan. Pada masa yang sama, bahagian pelanggan melihat tetapan, dan parameter utama ialah jarak lukisan. Ia diukur dalam ketulan (kawasan peta adalah 16×16 dan 256 blok tinggi). Berapa banyak ketulan yang ditunjukkan terdapat berapa banyak yang akan diminta daripada pelayan.

Pelayan menyimpan peta global dunia, dan jika belum ada blok yang dihasilkan di dalamnya pada titik penampilan watak permainan, maka pelayan secara dinamik menjananya dan menyimpannya. Ini bukan sahaja memerlukan sumber pengkomputeran yang besar, tetapi ia juga sentiasa meningkatkan saiz peta dunia. Pada salah satu pelayan anarkis tertua 2b2t (2builders2tools) Saiz peta sudah melebihi 8 Tb, dan sempadan dunia adalah sekitar 30 juta blok. Terdapat beribu-ribu cerita yang dikaitkan dengan pelayan ini dan ia patut mendapat artikelnya sendiri dalam siri ini.

Menjana dunia di sekeliling seorang pemain tidak menjadi masalah. Menjana dunia di sekitar ratusan pemain akan menyebabkan pelayan perlahan perlahan untuk masa yang singkat, selepas itu beban akan berkurangan. Menjana dunia pada jarak pemaparan pelanggan sekitar seribu pemain sudah mampu "menggugurkan" pelayan dan membuang semua pelanggan daripadanya kerana tamat masa.

Dalam perisian pelayan terdapat nilai seperti TPS (Kutu setiap Pelayan - kutu sesaat). Biasanya, 1 kitaran jam bersamaan dengan 50 ms. (1 saat dunia nyata bersamaan dengan 20 kutu dunia permainan). Jika pemprosesan satu kutu meningkat kepada 60 saat, aplikasi pelayan akan ditutup, membuang semua pemain.

Penyelesaiannya adalah untuk mengehadkan dunia kepada koordinat tertentu dan melakukan penjanaan blok awal. Oleh itu, kami mengalih keluar keperluan untuk penjanaan dinamik semasa permainan, dan pelayan hanya perlu membaca peta sedia ada. Kedua-dua isu boleh diselesaikan dengan satu pemalam Sempadan Dunia.

Cara paling mudah ialah menetapkan sempadan dunia dalam bentuk bulatan berbanding dengan titik spawn (walaupun anda boleh membuatnya dalam bentuk apa pun) dengan satu arahan:

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

Jika watak pemain cuba melepasi sempadan, dia akan ditolak ke belakang beberapa blok. Jika ini dilakukan beberapa kali dalam masa yang terhad, pesalah akan diteleport secara paksa ke tempat bertelur. Pra-generasi dunia dilakukan dengan lebih mudah, dengan perintah:

/wb fill

Memandangkan tindakan ini boleh menjejaskan pemain pada pelayan, pastikan anda mengesahkan:

/wb confirm

Secara keseluruhan, ia mengambil masa kira-kira 5000 jam untuk menjana dunia dengan jejari 40 blok (~2 bilion blok) pada pemproses Intel® Xeon® Gold 6240. Oleh itu, jika anda ingin pra-menjana peta yang lebih besar, ambil perhatian bahawa proses ini akan mengambil masa yang agak lama, dan TPS pelayan akan dikurangkan dengan serius. Juga, ingat bahawa walaupun radius 5000 blok akan memerlukan lebih kurang 2 GB ruang cakera.

Walaupun versi terbaharu pemalam telah dibangunkan untuk Minecraft versi 1.14, didapati secara eksperimen ia berfungsi hebat pada versi berikutnya. Senarai lengkap arahan dengan penjelasan tersedia pada forum pemalam.

Sekatan masalah

Terdapat pelbagai jenis blok dalam Minecraft. Walau bagaimanapun, kami ingin menarik perhatian pembaca kepada blok seperti itu TNT. Seperti namanya, blok ini adalah bahan letupan (nota editor - ini adalah item permainan dunia maya dan item ini tidak mempunyai bahan letupan sebenar). Keanehannya adalah sedemikian rupa sehingga pada saat pengaktifan daya graviti mula bertindak ke atasnya. Ini memaksa pelayan mengira semua koordinat jika pada masa ini blok mula jatuh.

Sekiranya terdapat beberapa blok TNT, maka letupan satu blok menyebabkan letupan dan pengaktifan graviti di blok jiran, menyerakkannya ke semua arah. Semua mekanik cantik di bahagian pelayan ini kelihatan seperti banyak operasi untuk mengira trajektori setiap blok, serta interaksi dengan blok jiran. Tugas ini sangat intensif sumber, yang boleh disemak dengan mudah oleh sesiapa sahaja. Hasilkan dan letupkan kiub daripada blok TNT yang bersaiz sekurang-kurangnya 30x30x30. Dan jika anda fikir anda mempunyai komputer permainan yang bagus dan berkuasa, anda silap sangat 😉

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

Pengoptimuman pelayan Minecraft
"Percubaan" yang serupa pada pelayan dengan Intel® Xeon® Gold 6240 membawa kepada penurunan TPS yang serius dan 80% beban CPU semasa keseluruhan masa letupan blok. Oleh itu, jika mana-mana pemain dapat melakukan ini, maka masalah prestasi akan menjejaskan semua pemain di pelayan.

Pilihan yang lebih sukar - Kristal Tepi. Jika TNT bagaimanapun meletup secara berurutan, maka Kristal Tepi meletup kesemuanya pada masa yang sama, yang secara teori boleh menghentikan sepenuhnya operasi aplikasi pelayan.

Senario ini hanya boleh dielakkan dengan melarang sepenuhnya penggunaan blok ini dalam dunia permainan. Contohnya, menggunakan pemalam Pengawal Dunia. Sila ambil perhatian bahawa pemalam ini dengan sendirinya tidak berfungsi tanpa pemalam lain WorldEdit. Jadi pasang WorldEdit dahulu, dan kemudian WorldGuard.

Kesimpulan

Mengurus pelayan permainan dengan betul bukanlah tugas yang mudah. Kesukaran dan prestasi menurun akan menanti anda pada setiap masa, terutamanya jika anda tidak mengambil kira mekanik permainan itu sendiri. Adalah mustahil untuk meramalkan segala-galanya, kerana pemain kadang-kadang boleh menjadi sangat kreatif dalam cuba memaksa pelayan melakukan sesuatu yang tidak dimaksudkan. Hanya keseimbangan yang munasabah antara risiko dan sekatan yang ditetapkan akan membolehkan pelayan beroperasi secara berterusan dan tidak mengurangkan prestasinya kepada nilai kritikal.

Semasa kuarantin, beberapa pekerja kami terlepas pejabat kegemaran mereka dan memutuskan untuk menciptanya semula di dalam Minecraft. Anda juga berpeluang untuk datang melawat kami tanpa membahayakan kesihatan anda atau membuang masa di jalan raya.

Untuk melakukan ini, kami menjemput semua orang ke pelayan kami minecraft.selectel.ru (versi klien 1.15.2), di mana pusat data Tsvetochnaya-1 dan Tsvetochnaya-2 telah dicipta semula. Jangan lupa untuk bersetuju untuk memuat turun sumber tambahan, ia adalah perlu untuk paparan yang betul beberapa lokasi.

Pencarian, kod promosi, telur Paskah dan komunikasi yang menyenangkan menanti anda.

Sumber: www.habr.com

Tambah komen