Pengoptimalan server Minecraft

Pengoptimalan server Minecraft
Di blog kami, kami sudah melakukannya diceritakan, cara membuat server Minecraft Anda sendiri, tetapi 5 tahun telah berlalu sejak itu dan banyak yang telah berubah. Kami berbagi dengan Anda cara terkini untuk membuat dan mengoptimalkan bagian server dari game populer tersebut.

Selama 9 tahun sejarahnya (dihitung dari tanggal rilis), Minecraft telah mendapatkan banyak sekali penggemar dan pembenci baik dari pemain biasa maupun geek. Konsep sederhana dunia yang terbuat dari balok telah berkembang dari bentuk hiburan sederhana menjadi media universal untuk berkomunikasi dan menciptakan berbagai objek dari dunia nyata.

Selain konstruksi, permainan memiliki kemampuan mencipta logika, yang memungkinkan Anda menerapkan algoritme lengkap di dalam Minecraft. YouTube penuh dengan video yang sangat mengesankan di mana orang-orang, yang telah berusaha keras dan menghabiskan banyak waktu, telah membuat salinan perangkat elektronik ini atau itu atau membuat salinan mendetail yang ada и khayali struktur arsitektur. Semuanya hanya dibatasi oleh imajinasi gamer dan kemungkinan dunia game.


Tapi mari kita tidak berbicara lebih jauh tentang apa sebenarnya yang dibuat oleh para pemain, tetapi mari kita lihat bagian server dari aplikasi dan soroti masalah (terkadang sangat kompleks) yang mungkin timbul selama pengoperasian di bawah beban. Ayo segera lakukan reservasi karena kita hanya akan membicarakan Java Edition saja.

Jenis server

Opsi paling sederhana adalah server yang dibangun di dalam klien game. Kami menciptakan dunia, menekan satu tombol, dan server dapat diakses melalui jaringan lokal. Opsi ini tidak dapat menahan beban serius apa pun, dan oleh karena itu kami bahkan tidak akan mempertimbangkannya.

Vanila

Mojang Studios mendistribusikan bagian server game tersebut sebagai aplikasi Java secara gratis di situs web resmi. Ini memungkinkan Anda untuk membuatnya sendiri server khusus dan dunia pribadi, sehingga dapat diakses untuk koneksi dari mana saja di planet ini. Bagi mereka yang melakukan ini untuk pertama kalinya, ada manfaatnya tutorial, tersedia di Wiki game terkait.

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

bukkit

Aplikasi server yang dibuat oleh para peminat berdasarkan versi Vanilla bukkit memperluas kemampuan game secara signifikan dengan mendukung plugin dan mod (modifikasi). Ini 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 memori yang jauh lebih sedikit.

Menginstal Bukkit tidaklah sulit, instruksi terkait ada di sumbernya GamePedia. Namun hal tersebut tidak masuk akal, karena sejak tahun 2014 tim Bukkit telah dibubarkan, pengembang proyek telah menjadi karyawan Mojang Studios, dan gudang ditinggalkan. Dengan demikian, Bukkit sebenarnya sudah mati, dan masuk akal untuk memperhatikan dua proyek berikutnya.

KeranMC

Untuk membuat hidup lebih mudah bagi pengembang plugin, diperlukan API untuk berinteraksi dengan dunia game. Inilah masalah yang dipecahkan oleh penciptanya. Keran, mengambil inti Bukkit dan mengerjakannya ulang untuk mencapai keandalan dan kinerja yang lebih baik. Namun demikian, Repositori Git proyek ini diblokir karena Digital Millennium Copyright Act (DMCA), dan tidak mungkin mengunduh kode sumber dari sana.

Saat ini SpigotMC aktif dikembangkan dan digunakan. Ini mendukung semua plugin yang dibuat untuk Bukkit, tetapi tidak kompatibel dengannya. Untuk menyiasati Penghapusan DMCA, metode elegan yang disebut BuildTools diciptakan. Alat ini menghilangkan kebutuhan untuk mendistribusikan aplikasi yang dikompilasi dan memungkinkan pengguna untuk mengkompilasi Spigot, CraftBukkit, dan Bukkit dari kode sumber. Semua ini membuat larangan DMCA tidak berguna.

KertasMC

Semuanya tampak keren, dan Keran menjadi pilihan bagus. Namun hal ini tidak cukup bagi sebagian peminat, dan mereka menciptakan garpu Keran mereka sendiri “dengan steroid.” Pada halaman proyek keuntungan utamanya adalah “Ini sangat cepat”. Dikembangkan masyarakat memungkinkan Anda menyelesaikan masalah yang muncul dengan cepat, dan API yang diperluas memungkinkan Anda membuat plugin yang menarik. Anda dapat meluncurkan PaperMC dengan satu perintah sederhana, yang diberikan dokumentasi.

PaperMC memiliki kompatibilitas yang sangat baik, sehingga plugin yang ditulis untuk SpigotMC dapat bekerja dengan mudah di PaperMC, tetapi tanpa dukungan resmi. Kompatibilitas mundur dengan SpigotMC juga ada. Sekarang kami telah mencantumkan berbagai opsi untuk membuat server, mari beralih ke masalah kinerja yang mungkin timbul.

Masalah dan solusinya

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

Mengenai masalah kapasitas RAM, kita harus melanjutkan dari indikator berikut:

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

Perlu diingat bahwa aplikasi Java selalu membutuhkan cadangan RAM. Jika Anda mengharapkan konsumsi memori sebesar 8 gigabyte, maka sebenarnya Anda harus memiliki 12. Angkanya relatif, tapi intinya tidak berubah.

Untuk memulai bagian server, kami sarankan menggunakan flag yang ditentukan dalam artikel Menyetel JVM – Bendera Pengumpul Sampah G1GC untuk Minecraft. "Ilmu hitam" ini memungkinkan server untuk mengkonfigurasi "pengumpul sampah" dengan benar dan mengoptimalkan penggunaan RAM. Anda tidak boleh mengalokasikan lebih banyak memori daripada yang sebenarnya dikonsumsi server selama puncak masuknya pemain.

Menghasilkan peta blok

“Apa menurutmu bulan hanya ada saat kamu melihatnya?” (Albert Einstein)

Server yang benar-benar baru. Segera setelah pemain berhasil terhubung untuk pertama kalinya, karakter permainan muncul di titik kumpul umum (spawn). Ini adalah satu-satunya tempat di mana dunia game dibuat sebelumnya oleh server. Pada saat yang sama, bagian klien melihat pengaturan, dan parameter kuncinya adalah jarak gambar. Diukur dalam potongan (luas peta 16×16 dan tinggi 256 blok) Berapa banyak potongan yang ditunjukkan di sana persis berapa banyak yang akan diminta dari server.

Server menyimpan peta global dunia, dan jika belum ada blok yang dihasilkan di dalamnya pada saat karakter permainan muncul, maka server secara dinamis membuat dan menyimpannya. Hal ini tidak hanya membutuhkan sumber daya komputasi yang besar, tetapi juga terus meningkatkan ukuran peta dunia. Di salah satu server anarkis tertua 2b2t (2builders2tools) Ukuran peta telah melebihi 8 Tb, dan perbatasan dunia berada pada sekitar 30 juta blok. Ada ribuan cerita yang terkait dengan server ini dan server ini layak mendapat artikel tersendiri dalam seri ini.

Menghasilkan dunia di sekitar satu pemain bukanlah masalah. Menghasilkan dunia dengan ratusan pemain akan menyebabkan sedikit perlambatan server untuk waktu yang singkat, setelah itu beban akan berkurang. Menghasilkan dunia dengan jarak rendering klien sekitar seribu pemain sudah mampu "menjatuhkan" server dan mengeluarkan semua klien karena waktu tunggu habis.

Dalam perangkat lunak server ada nilai seperti TPS (Kutu per Server - kutu per detik). Biasanya, 1 siklus jam sama dengan 50 ms. (1 detik dunia nyata sama dengan 20 tick dunia game). Jika pemrosesan satu centang meningkat menjadi 60 detik, aplikasi server akan ditutup, mengeluarkan semua pemain.

Solusinya adalah membatasi dunia pada koordinat tertentu dan melakukan pembuatan blok awal. Oleh karena itu, kami menghilangkan kebutuhan akan pembuatan dinamis selama permainan, dan server hanya perlu membaca peta yang ada. Kedua masalah tersebut dapat diselesaikan dengan satu plugin Perbatasan Dunia.

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

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

Jika karakter pemain mencoba melintasi perbatasan, dia akan terdorong mundur beberapa blok. Jika hal ini dilakukan beberapa kali dalam waktu yang terbatas, maka pelaku akan diteleportasi secara paksa ke titik spawn. Pra-generasi dunia dilakukan lebih sederhana lagi, dengan perintah:

/wb fill

Karena tindakan ini berpotensi memengaruhi pemain di server, pastikan untuk mengonfirmasi:

/wb confirm

Secara total, diperlukan waktu sekitar 5000 jam untuk menghasilkan dunia dengan radius 40 blok (~2 miliar blok) pada prosesor Intel® Xeon® Gold 6240. Oleh karena itu, jika Anda ingin membuat peta yang lebih besar terlebih dahulu, ketahuilah bahwa proses ini akan memakan waktu yang cukup lama, dan TPS server akan sangat berkurang. Juga, ingatlah bahwa radius 5000 blok pun akan membutuhkan sekitar 2 GB ruang disk.

Terlepas dari kenyataan bahwa versi terbaru plugin ini dikembangkan untuk Minecraft versi 1.14, secara eksperimental ditemukan bahwa plugin tersebut berfungsi dengan baik pada versi berikutnya. Daftar lengkap perintah dengan penjelasan tersedia di forum plugin.

Blok masalah

Ada banyak variasi blok di Minecraft. Namun, kami ingin menarik perhatian pembaca ke blok seperti TNT. Seperti namanya, balok ini bersifat eksplosif (catatan editor - ini adalah item game dari dunia virtual dan item ini tidak mengandung bahan peledak sungguhan). Keunikannya adalah pada saat aktivasi, gaya gravitasi mulai bekerja padanya. Hal ini memaksa server untuk menghitung semua koordinat jika pada saat itu blok mulai jatuh.

Jika terdapat beberapa blok TNT, maka ledakan satu blok menyebabkan ledakan dan pengaktifan gravitasi pada blok yang berdekatan, sehingga menghamburkan mereka ke segala arah. Semua mekanisme indah di sisi server ini tampak seperti banyak operasi untuk menghitung lintasan setiap blok, serta interaksi dengan blok tetangga. Tugas ini sangat membutuhkan banyak sumber daya, sehingga siapa pun dapat dengan mudah memeriksanya. Hasilkan dan ledakkan kubus dari balok TNT yang berukuran minimal 30x30x30. Dan jika Anda mengira Anda memiliki komputer gaming yang bagus dan bertenaga, Anda salah besar 😉

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

Pengoptimalan server Minecraft
“Eksperimen” serupa pada server dengan Intel® Xeon® Gold 6240 menyebabkan penurunan TPS yang serius dan beban CPU sebesar 80% selama seluruh waktu peledakan blok. Oleh karena itu, jika ada pemain yang mampu melakukan hal tersebut, maka masalah performa akan berdampak pada seluruh pemain yang ada di server.

Pilihan yang lebih sulit lagi - Kristal Tepi. Jika TNT tetap meledak secara berurutan, maka Edge Crystals akan meledak secara bersamaan, yang secara teori dapat menghentikan pengoperasian aplikasi server sepenuhnya.

Skenario ini hanya dapat dihindari dengan sepenuhnya melarang penggunaan blok-blok ini di dunia game. Misalnya saja menggunakan plugin Penjaga Dunia. Harap dicatat bahwa plugin ini dengan sendirinya tidak berfungsi tanpa plugin lain DuniaSunting. Jadi instal WorldEdit terlebih dahulu, lalu WorldGuard.

Kesimpulan

Mengelola server game dengan benar bukanlah tugas yang mudah. Kesulitan dan penurunan performa akan menanti Anda di setiap kesempatan, apalagi jika Anda tidak memperhitungkan mekanisme gameplay itu sendiri. Tidak mungkin untuk meramalkan semuanya, karena pemain terkadang bisa sangat kreatif dalam mencoba memaksa server melakukan sesuatu yang tidak dimaksudkan. Hanya keseimbangan yang masuk akal antara risiko dan batasan yang ditetapkan yang akan memungkinkan server beroperasi terus menerus dan tidak mengurangi kinerjanya hingga mencapai nilai kritis.

Selama masa karantina, beberapa karyawan kami merindukan kantor favorit mereka dan memutuskan untuk membuatnya kembali di dalam Minecraft. Anda juga mempunyai kesempatan untuk datang mengunjungi kami tanpa membahayakan kesehatan Anda atau membuang waktu di jalan.

Untuk melakukan ini, kami mengundang semua orang ke server kami minecraft.selectel.ru (klien versi 1.15.2), tempat pusat data Tsvetochnaya-1 dan Tsvetochnaya-2 dibuat ulang. Jangan lupa untuk menyetujui pengunduhan sumber daya tambahan, itu diperlukan untuk tampilan beberapa lokasi yang benar.

Pencarian, kode promosi, telur Paskah, dan komunikasi yang menyenangkan menanti Anda.

Sumber: www.habr.com

Tambah komentar