Di blog kami, kami sudah melakukannya
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
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
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
Menginstal Bukkit tidaklah sulit, instruksi terkait ada di sumbernya
KeranMC
Untuk membuat hidup lebih mudah bagi pengembang plugin, diperlukan API untuk berinteraksi dengan dunia game. Inilah masalah yang dipecahkan oleh penciptanya.
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
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
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
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
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
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
“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
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