MMORPG, beberapa MOBA seperti League of Legends atau bahkan StarCraft 2 biasanya memaksa Anda untuk memilih server. Biasanya mereka adalah AS, UE dan LAUT, di MMORPG banyak per lokasi. Saya dapat melihat bahwa itu diperlukan beberapa tahun yang lalu, tetapi sekarang dengan munculnya AWS dan penawaran serupa yang memungkinkan Anda untuk meningkatkan "kekuatan server" Anda dengan mulus, mengapa masih ada server yang terpisah?
Kereta pemikiran saya adalah seperti ini (menggunakan Star Wars: The Old Republic sebagai contoh): - Anda selalu berada di satu planet, "contoh" yang terisolasi dari planet lain. - Jika ada terlalu banyak orang di satu planet, SW: TOR menciptakan contoh dunia baru dan menempatkan pemain di sana. - Jika Anda meninggalkan instance dunia / switch Anda memiliki layar memuat
Jadi mengapa game tidak dapat membuat instance untuk planet ini. Contoh ini (dan hanya yang ini) memiliki data Anda saat ini di basis datanya dan mengelola x pemain. Begitu pemain x-50 berada dalam instance ini, server baru akan menyala dan orang baru akan menelurkan instance tersebut. 50 tempat dicadangkan untuk beralih ke grup Anda, dll.
Mungkin ada contoh untuk ketiga wilayah utama untuk menjaga latensi rendah, tetapi itu akan memungkinkan Anda untuk tetap bermain dengan pemain lain yaitu LAUT jika Anda bisa hidup dengan penundaan 140 ms (yang masih belum ada apa-apa).
Setiap kali Anda mengganti instance atau melakukan perjalanan ke dunia lain, server Anda saat ini memberikan semua data Anda ke server berikutnya, memastikan Anda tidak memerlukan satu database terpusat besar. Anda masih dapat memiliki satu yang mendapat pembaruan secara berkala untuk keperluan analisis.
Ketika Anda logout atau server kehilangan koneksi, data kemudian dapat ditransfer ke database besar yang dioptimalkan untuk menyimpan data. Server instance kemudian dapat dioptimalkan untuk throughput tinggi.
Apakah ada alasan khusus ini tidak akan berhasil? Apakah ada masalah lain yang saya lewatkan?
sumber
Jawaban:
AWS bukanlah solusi yang jelas. Mungkin mahal, dalam beberapa kasus lebih dari menggunakan pusat data in-house (untuk penerbit biaya ini dapat diamortisasi di beberapa produk, misalnya). Selain itu, mungkin ada kekhawatiran tentang menyimpan binari sensitif dan log pada perangkat keras di luar kendali seseorang. Akhirnya, daya komputasi yang sebenarnya tidak selalu menjadi alasan untuk memisahkan populasi "server" dalam MMO.
Guild Wars 2, pada kenyataannya, melakukan sesuatu yang sangat mirip dengan ini. Peta disimulasikan oleh proses server individual, dan instance luapan dibuat sesuai kebutuhan berdasarkan tutup populasi peta dan beberapa heuristik untuk kinerja peta.
Guild Wars 2 memiliki dua pusat data utama, satu di AS dan satu di Eropa - ada beberapa obrolan silang antara pusat data tersebut (terutama untuk pos perdagangan dan sistem perdagangan) tetapi secara umum mereka ada dalam konfigurasi itu sehingga para pemain di Jerman, Prancis, dan lain-lain tidak perlu menderita latensi yang lebih tinggi untuk server game AS. Di dalam pusat data pemain diurutkan menjadi "dunia asal" (atau "pecahan" dalam istilah bahasa setempat); tetapi salah satu alasan ini dilakukan adalah untuk meminimalkan jumlah pemain yang dapat dilihat oleh klien dan perlu dilaporkan kepada mereka. Aspek sisi klien dari masalah itu tidak akan diselesaikan dengan meningkatkan ke lebih banyak perangkat keras server. Ledakan kombinatorial sisi server dari jalur pelaporan tambahan mungkin,
Anda kehilangan beberapa hal, tetapi sebagian besar detail (dan saya tidak akan menjelaskan bagaimana kita menanganinya karena mereka dianggap rahasia dagang) tidak relevan dengan jenis pertanyaan tingkat tinggi seperti tinjauan umum. Saya pikir kelemahan terbesar dalam proposal Anda adalah mencoba untuk menyerahkan data pemain ke server baru ketika pemain mentransfer. Itu adalah masalah kompleks yang tidak akan skala baik, mungkin dalam praktiknya lebih baik untuk benar-benar memiliki data pemain pada sistem server terpusat. Ini cukup bisa dilakukan jika Anda tidak menggunakan database dan penyimpanan catatan runtime utama untuk data.
sumber
Sebagian besar tentang latensi.
Pertama, memiliki server yang secara geografis dekat dengan Anda mengurangi latensi. Jika server berada di sisi lain dunia maka Anda akan melihat lebih banyak latensi daripada jika server hanya berjarak beberapa lompatan.
Kedua, layanan seperti AWS tidak dirancang untuk pekerjaan waktu nyata. Mereka dirancang untuk throughput tinggi dengan mengorbankan sedikit latensi. Jika halaman web Anda membutuhkan 250ms lebih lama dari biasanya untuk dimuat pada satu kesempatan, tidak ada yang peduli, tetapi jika game Anda membutuhkan 250ms lebih lama dari biasanya untuk memproses pesan, gameplay dapat sangat terpengaruh. Inilah sebabnya mengapa MMO hampir selalu di-host pada perangkat keras khusus.
Tapi ini juga tentang desain game. Jika Anda membuatnya tampak seperti semua orang berada di dunia yang sama tetapi harus membagi zona ketika sudah terlalu penuh, orang-orang menjadi frustrasi karena mereka tidak dapat menemukan teman-teman mereka di tempat pertemuan yang ditentukan. Masalah semacam ini akan meluas ke guild, pertempuran PvP massal, dll. Para pemain sudah terbiasa dengan instance belakangan ini, tetapi ada area tertentu yang diharapkan akan dibagikan. Jika Anda memiliki server yang benar-benar terpisah maka setidaknya tidak ada kejutan di sini.
Akhirnya, ada masalah teknologi lainnya untuk dipertimbangkan. Bahkan jika setiap instance cukup terisolasi dari yang lain, biasanya masih ada berbagai layanan yang perlu berkomunikasi di antara mereka. Komunikasi lintas-server sulit dilakukan dengan baik dalam perangkat lunak waktu nyata dan telah menyebabkan berbagai eksploitasi dan bug pada MMO di masa lalu. Khususnya menyerahkan data pemain yang otoritatif dari satu ke yang lain berisiko. Oleh karena itu pengembang sering keliru pada sisi kehati-hatian dan telah dengan jelas melukiskan batas antar server, mengurangi jumlah lalu lintas yang perlu dilewati.
sumber
sebenarnya saya percaya jawabannya bukan terkait jaringan atau arsitektur melainkan terkait permainan, biasanya dalam jenis permainan ini ada acara, dan acara ini diatur menurut jangka waktu yang paling nyaman bagi orang-orang yang bermain di server, dan itu biasanya terkait dengan zona waktu tempat orang tinggal, karenanya UE dan AS, dll.
Alasan lain adalah untuk membuat pemisahan antara dunia sehingga jika ada kelompok yang terlalu kuat mereka tidak akan mengacaukan permainan untuk semua orang yang bermain, dan Anda selalu dapat pindah ke dunia yang kurang "menantang".
Di sisi kemampuan CPU server, meskipun mesin saat ini cukup kuat, selalu ada batasan untuk apa yang dapat ditangani oleh satu mesin, dan karenanya menciptakan pemisahan antara dunia diperlukan untuk melindungi permainan dari kelebihan beban, dan membiarkan orang memilih dunia mana yang mereka inginkan. bermain sehingga mereka bisa bermain dengan teman-teman mereka. Penskalaan secara horizontal bukan hanya masalah memiliki mesin, Anda membutuhkan aplikasi Anda untuk dapat bekerja dalam arsitektur skala horizontal, dan itu tidak mudah ketika Anda memiliki ribuan "tindakan" yang terjadi bersamaan dengan kemungkinan pengaruh satu sama lain, dan perlu menyinkronkan semuanya. Saya pikir akan sangat sulit untuk melakukannya di beberapa mesin.
sumber
Apa yang salah dengan pemasangan otomatis? Ketika lokasi menjadi terlalu padat, Anda hanya menempatkan 1000 pemain dalam 10 kejadian berbeda.
Masalahnya adalah bahwa game online adalah tentang komunitas. Bayangkan Anda mengatur pertemuan dengan orang-orang yang Anda temui sebelumnya, dan ketika Anda semua ada di sana pada waktu tertentu Anda tidak bertemu satu sama lain karena Anda semua ada dalam kasus yang berbeda? Itu menjengkelkan dan merusak perendaman.
Bagaimana ini bisa dicegah? Itu bisa dilakukan dengan menempatkan setiap pemain dalam instance yang sama setiap saat, sehingga ketika Anda bertemu pemain lain sekali, Anda dapat yakin untuk bertemu pemain ini lagi ketika Anda berdua berada di lokasi yang sama. Anda tidak akan pernah bertemu dengan para pemain yang ditugaskan ke instance lain.
Tetapi bagaimana ketika Anda ingin bertemu seseorang dari luar permainan? Seperti teman dalam kehidupan nyata yang Anda undang untuk bermain game dengan Anda? Untuk memungkinkan hal itu terjadi, Anda perlu kemampuan untuk memilih contoh saat membuat karakter Anda. Suka dari daftar contoh dengan nama yang mudah diingat. Sayangnya, nama "instance" tampaknya membingungkan bagi pengguna rata-rata. Mereka tidak terbiasa dengan kata itu. Bukankah lebih baik menggunakan istilah yang biasa mereka gunakan? Istilah seperti ... Server ?
sumber