Optimasi Server Minecraft



Di blog kami, kami sudah berbicara tentang cara membuat server Minecraft Anda sendiri, namun, 5 tahun telah berlalu sejak itu dan banyak yang telah berubah. Kami membagikan kepada Anda cara saat ini untuk membuat dan mengoptimalkan sisi server dari permainan yang begitu populer.



Lebih dari 9 tahun sejarahnya (dihitung sejak tanggal rilis), Minecraft telah mendapatkan jumlah penggemar dan pembenci yang luar biasa, baik di kalangan pemain biasa maupun geek. Konsep sederhana dunia kubus telah berkembang dari hiburan sederhana menjadi lingkungan universal untuk komunikasi dan penciptaan berbagai objek dari dunia nyata.



Selain konstruksi, gim ini memiliki kemampuan untuk membuat sirkuit logika yang memungkinkan Anda menerapkan algoritma penuh di dalam Minecraft. YouTube penuh dengan video yang sangat mengesankan di mana orang-orang mengerahkan banyak upaya dan waktu untuk membuat salinan perangkat elektronik atau membuat salinan terperinci dari struktur arsitektur yang ada dan fiksi . Semuanya hanya dibatasi oleh fantasi gamer dan kemungkinan alam semesta game.





Tapi jangan bicara lebih jauh tentang apa yang sebenarnya dibuat oleh para pemain, tapi mari kita lihat sisi server dari aplikasi dan sorot masalah (kadang-kadang sangat kompleks) yang dapat muncul selama bekerja di bawah beban. Mari lakukan reservasi segera bahwa kita hanya akan berbicara tentang Java Edition.



Jenis server



Opsi paling sederhana adalah server yang dibangun ke dalam klien game. Kami menciptakan dunia, menekan satu tombol, dan sekarang server menjadi tersedia di jaringan lokal. Opsi ini tidak dapat menahan beban serius, dan karenanya kami bahkan tidak akan mempertimbangkannya.



Vanila



Mojang Studios mendistribusikan bagian server permainan sebagai aplikasi Java secara gratis di situs web resmi . Ini memungkinkan Anda untuk membuat server khusus dan dunia pribadi Anda, membuatnya tersedia untuk koneksi dari mana saja di dunia. Bagi mereka yang melakukan ini untuk pertama kalinya, ada tutorial yang sangat baik yang tersedia di game Wiki masing-masing.



Pendekatan ini memiliki satu kelemahan serius, yaitu, kurangnya peluang "out of the box" untuk menghubungkan plugin yang memperluas fungsi server dan memungkinkan tidak hanya untuk mengotomatisasi banyak proses, tetapi juga untuk mengoptimalkan kinerja. Selain itu, server resmi memiliki konsumsi RAM yang cukup besar untuk setiap pemain yang terhubung.



Bukkit



Dibuat oleh para penggemar berdasarkan versi Vanilla, aplikasi server Bukkit secara signifikan memperluas kemampuan game dengan mendukung plugin dan mod (modifikasi). Itu memungkinkan tidak hanya untuk menambahkan blok baru ke gameplay, tetapi juga untuk melakukan berbagai manipulasi yang tidak dapat diakses oleh perangkat lunak vanilla. Menariknya, aplikasi ini membutuhkan lebih sedikit memori.



Tidak sulit untuk menginstal Bukkit, instruksi yang sesuai ada di sumber daya GamePedia . Tapi ini tidak masuk akal, karena sejak 2014 tim Bukkit telah bubar, pengembang proyek telah menjadi karyawan Mojang Studios, dan repositori ditinggalkan. Jadi Bukkit sebenarnya sudah mati dan masuk akal untuk memperhatikan dua proyek berikutnya.



SpigotMC



Untuk membuat hidup lebih mudah bagi pengembang plugin, ada kebutuhan untuk API untuk berinteraksi dengan dunia game. Inilah yang dipecahkan oleh pencipta Spigot dengan mengambil inti Bukkit sebagai dasar dan mengolahnya untuk mencapai keandalan dan kinerja yang lebih baik. Namun, repositori Git proyek telah dikunci karena Digital Millennium Copyright Act ( DMCA ) dan sumber tidak dapat diunduh dari sana.



Saat ini, SpigotMC sedang dikembangkan dan digunakan secara aktif. Ini mendukung semua plugin yang dibangun untuk Bukkit, tetapi tidak kompatibel dengan itu. Untuk menyiasati larangan DMCA Takedown, cara yang elegan diciptakan disebut BuildTools. Alat ini menghilangkan kebutuhan untuk mendistribusikan aplikasi yang dikompilasi dan memungkinkan pengguna untuk mengkompilasi Spigot, CraftBukkit dan Bukkit dari sumber. Semua ini membuat larangan DMCA tidak berguna.



PaperMC



Segalanya tampak keren dan Keran adalah pilihan bagus. Tetapi beberapa penggemar tidak menemukan ini cukup, dan mereka menuliskan garpu Spigot mereka sendiri "pada steroid". Pada halaman proyek, keunggulan utama menyatakan bahwa "Ini bodoh cepat". Komunitas yang dikembangkan memungkinkan Anda untuk dengan cepat menyelesaikan masalah yang muncul, dan API yang diperluas memungkinkan Anda membuat pengaya yang menarik. Anda dapat memulai PaperMC dengan satu perintah sederhana dari dokumentasi .



Semuanya baik-baik saja dengan kompatibilitas PaperMC, sehingga plugin tertulis untuk SpigotMC akan dengan mudah bekerja pada PaperMC, tetapi tanpa dukungan resmi. Kompatibilitas mundur dengan SpigotMC juga ada. Sekarang kami telah mendaftarkan berbagai opsi untuk membuat server, mari beralih ke masalah kinerja yang dapat muncul.



Masalah dan solusi



Hal utama yang harus dipahami adalah bahwa segala sesuatu yang berhubungan dengan pemrosesan dunia game akan diproses hanya pada satu inti komputasi dari server fisik. Jadi jika tiba-tiba Anda memiliki server yang sangat baik dengan selusin core komputasi, maka hanya satu yang akan dimuat. Semua yang lain akan diam. Ini adalah arsitektur aplikasi, dan tidak ada yang dapat Anda lakukan untuk itu. Jadi ketika memilih server, Anda harus memperhatikan bukan pada jumlah core, tetapi pada frekuensi clock. Semakin tinggi, semakin baik kinerjanya.



Sedangkan untuk pertanyaan jumlah RAM, seseorang harus melanjutkan dari indikator berikut:



  • jumlah pemain yang direncanakan;
  • jumlah dunia yang direncanakan di server;
  • ukuran masing-masing dunia.


Ingatlah bahwa aplikasi Java selalu membutuhkan ruang kepala RAM. Jika Anda mengandalkan konsumsi memori 8 gigabytes, maka sebenarnya Anda perlu memiliki 12. Angka-angka itu relatif, tetapi esensinya tidak berubah.



Untuk memulai sisi server, sebaiknya gunakan flag yang ditentukan dalam artikel Tuning the JVM - G1GC Garbage Collector Flags for Minecraft . "Ilmu hitam" ini memungkinkan server untuk secara cerdas mengkonfigurasi pengumpul sampah dan mengoptimalkan penggunaan RAM. Itu tidak layak mengalokasikan lebih banyak memori daripada server benar-benar mengkonsumsi selama masuknya puncak pemain.



Membuat peta blokir

"Apakah kamu benar-benar berpikir bulan hanya ada ketika kamu melihatnya?" (Albert Einstein)
Server baru. Segera setelah pemain berhasil terhubung untuk pertama kalinya, karakter permainan muncul di titik berkumpul bersama (spawn). Ini adalah satu-satunya tempat di mana dunia game dibuat sebelumnya oleh server. Pada saat yang sama, bagian klien melihat ke pengaturan, dan parameter kuncinya adalah jarak gambar. Ini diukur dalam potongan (area peta 16x16 dan tinggi 256 blok). Berapa banyak potongan yang ditunjukkan di sana, ini persis berapa banyak yang akan diminta dari server.



Peta global dunia disimpan di server, dan jika tidak ada blok yang dihasilkan di dalamnya pada saat karakter permainan muncul, maka server secara dinamis menghasilkan dan menyimpannya. Ini tidak hanya membutuhkan sumber daya komputasi yang besar, tetapi juga secara konstan meningkatkan ukuran peta dunia. Di salah satu server anarkis tertua 2b2t(2builders2tools) ukuran peta telah melampaui 8 Tb, dan perbatasan dunia berada pada tanda 30 juta blok. Ribuan cerita dikaitkan dengan server ini dan layak mendapatkan artikelnya sendiri dalam serangkaian artikel.



Menghasilkan dunia di sekitar satu pemain bukanlah masalah. Menghasilkan dunia di sekitar ratusan pemain akan menyebabkan rem server kecil untuk waktu yang singkat, setelah itu beban akan berkurang. Generasi dunia dengan jarak menggambar klien sekitar seribu pemain sudah mampu "menjatuhkan" server dan membuang semua klien darinya dengan batas waktu.

Perangkat lunak server memiliki nilai seperti TPS (Kutu per Server - kutu per detik). Biasanya, 1 siklus clock sama dengan 50 ms. (1 detik dari dunia nyata sama dengan 20 batang dunia game). Jika pemrosesan satu jam tumbuh hingga 60 detik, aplikasi server akan ditutup, membuang semua pemain.
Jalan keluarnya adalah membatasi dunia pada koordinat tertentu dan melakukan pembangkitan blok pendahuluan. Jadi, kami menghapus kebutuhan untuk generasi dinamis selama permainan, dan server hanya perlu membaca peta yang ada. Kedua masalah ditangani oleh satu plugin WorldBorder .



Cara termudah adalah dengan mengatur batas dunia dalam bentuk lingkaran relatif ke titik spawn (meskipun Anda dapat membuatnya dalam bentuk apa pun) dengan satu perintah:



/wb set <  > spawn


Jika karakter pemain mencoba untuk menyeberangi perbatasan, ia akan dilempar ke belakang beberapa blok. Jika ini dilakukan beberapa kali dalam waktu yang terbatas, maka penyusup akan dipindahkan secara paksa ke titik bertelur. Pra-menghasilkan dunia lebih mudah dengan perintah:



/wb fill


Karena tindakan ini berpotensi mempengaruhi pemain di server, jangan lupa untuk mengkonfirmasi eksekusi:



/wb confirm


Secara total, butuh sekitar 2 jam pada prosesor Intel® Xeon® Gold 6240 untuk menghasilkan dunia dengan radius 5.000 blok (~ 40 miliar blok). Oleh karena itu, jika Anda ingin memulai pra-generasi peta yang lebih besar, perlu diingat bahwa proses ini akan memakan waktu yang layak. , dan TPS server akan berkurang secara serius. Juga, ingatlah bahwa bahkan radius 5.000 blok akan membutuhkan sekitar 2GB ruang disk.



Terlepas dari kenyataan bahwa versi ekstrim dari plugin ini dikembangkan untuk Minecraft versi 1.14, telah secara eksperimental ditemukan bahwa itu bekerja dengan baik pada versi berikutnya. Daftar lengkap perintah dengan penjelasan tersedia di forum plugin .



Blok masalah



Ada banyak sekali jenis blok di Minecraft. Namun, kami ingin menarik perhatian pembaca ke blok seperti TNT . Seperti namanya, blok ini adalah bahan peledak (catatan editor adalah item yang dapat dimainkan di dunia virtual dan item ini tidak memiliki bahan peledak nyata) . Keunikannya adalah bahwa pada saat aktivasi, gaya gravitasi mulai bekerja padanya. Ini memaksa server untuk menghitung semua koordinat, jika saat ini blok mulai jatuh.



Jika ada beberapa blok TNT, maka peledakan satu blok menyebabkan peledakan dan masuknya gravitasi di blok-blok tetangga, menyebarkannya ke segala arah. Semua mekanisme yang indah di sisi server ini terlihat seperti banyak operasi untuk menghitung lintasan masing-masing blok, serta interaksi dengan blok tetangga. Tugas ini sangat intensif sumber daya, yang dapat dengan mudah dilihat semua orang. Hasilkan dan meledak kubus blok TNT setidaknya berukuran 30x30x30. Dan jika Anda berpikir bahwa Anda memiliki komputer gaming yang kuat dan bagus, maka Anda salah besar;)



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




"Percobaan" yang serupa pada server dengan Intel® Xeon® Gold 6240 menyebabkan "drawdown" serius di TPS dan memuat 80% pada CPU selama seluruh waktu peledakan blok. Akibatnya, jika ada pemain yang dapat melakukan ini, maka masalah kinerja akan mempengaruhi semua pemain di server.



Opsi yang lebih keras adalah Crystals of the End . Namun jika TNT meledak secara berurutan, maka Crystals of the End meledak pada saat yang sama, yang secara teori dapat sepenuhnya menghentikan pengoperasian aplikasi server.



Skenario ini hanya dapat dihindari dengan sepenuhnya melarang penggunaan blok ini di dunia game. Misalnya, menggunakan plugin WorldGuard . Harap perhatikan bahwa plugin ini sendiri tidak berfungsi tanpa plugin WorldEdit lainnya... Jadi instal WorldEdit dulu dan kemudian WorldGuard.



Kesimpulan



Manajemen server game yang kompeten bukanlah tugas yang mudah. Kesulitan dan penurunan kinerja akan menunggu di setiap kesempatan, terutama jika Anda tidak memperhitungkan mekanisme gameplay yang sebenarnya. Tidak mungkin untuk meramalkan segalanya, karena pemain kadang-kadang sangat kreatif dalam mencoba memaksa server untuk melakukan sesuatu yang tidak dimaksudkan. Hanya keseimbangan yang masuk akal antara risiko dan batas yang ditetapkan yang akan memungkinkan server bekerja dalam mode berkelanjutan dan tidak mengurangi kinerjanya menjadi nilai kritis.



Dalam karantina, beberapa karyawan kami melewatkan kantor favorit mereka dan memutuskan untuk membuatnya kembali di dalam Minecraft. Anda juga memiliki kesempatan untuk mengunjungi kami tanpa membahayakan kesehatan Anda dan membuang waktu di jalan.

minecraft.selectel.ru ( 1.15.2), - -1 -2. , .



, , «» .



All Articles