Haruskah saya memisahkan server login dari server game?

15

Saya sedang berpikir untuk membuat server MMO, dan saya telah melihat bagaimana game lain menyusun jaringan mereka. Salah satu hal yang saya perhatikan adalah selalu ada server Login dan kemudian server game.

Saya masih memutuskan apakah saya harus melakukan ini, tetapi saya ingin mendengar beberapa pendapat terlebih dahulu. Apa kelebihannya, dan bagaimana server login berkomunikasi dengan server game untuk menangani login?

JPiolho
sumber
1
Pertanyaan "Bagaimana cara menyeimbangkan beban dicapai dalam MMO?" mungkin menarik: gamedev.stackexchange.com/q/5956/450
Hendrik Brummermann

Jawaban:

15

Saya percaya ini sebagian besar disebabkan oleh fakta bahwa login dan penanganan game secara logis lebih atau kurang independen, jadi mereka biasanya disimpan terpisah untuk decoupling yang lebih baik, perawatan yang lebih mudah dan skalabilitas. Mereka tidak perlu tinggal di server fisik yang berbeda, mereka dapat menjalankan serta layanan independen pada mesin yang sama. Jika lalu lintas tumbuh terlalu besar, server login dapat dengan mudah dipindahkan ke komputer lain.

Juga, server masuk kemungkinan adalah vektor serangan sehingga ada baiknya memisahkan mereka dari sudut pandang keamanan.

Secara internal, berbagai layanan sisi-server dapat menggunakan soket biasa untuk berkomunikasi satu sama lain, baik itu pada mesin yang sama atau pada mesin lain di cluster. Atau, server database dapat digunakan untuk memelihara bendera 'yang masuk' untuk setiap pengguna.

Alexander Gessler
sumber
Sebagian besar waktu saya melihat bendera seperti itu di db server permainan dan di dalam server masuk db, sehingga server login dapat memeriksa satu sama lain dan jika logindb! = Gamerserverdb pengguna akan keluar.
daemonfire300
10

Salah satu aspek yang sangat penting dalam pengembangan MMO adalah mencapai skalabilitas dan memungkinkan penyeimbangan muatan.

Pengguna autentikasi dengan memeriksa kredensial, status larangan, menghitung login yang gagal baru-baru ini, dll. Adalah tugas yang dapat dilakukan tanpa mengetahui logika permainan atau data game. Jadi sangat mudah untuk memindahkannya ke server cluster sendiri.

Selain itu, server masuk adalah "pintu masuk" yang terkenal untuk dihubungi klien. Setelah otentikasi berhasil, mereka dapat mengirim klien ke server yang sesuai di kluster server permainan. Pengiriman ini dapat dilakukan dengan meneruskan koneksi jaringan ke server game yang tepat atau menyuruh klien untuk membuka koneksi baru ke server game yang tepat.

Anda harus memikirkan pemotongan sistem Anda untuk distribusi sejak awal. Sangat mudah untuk menjalankan beberapa bagian pada satu server. Tetapi cukup sulit untuk membagi hal-hal yang telah dikembangkan sebagai satu kesatuan.

Hendrik Brummermann
sumber
2

Sebagai mantan pemain WoW, pengalaman saya adalah bahwa server masuk selalu merupakan tautan terlemah dalam rantai.

Server dunia biasanya sangat stabil, bahkan menangani beban luar biasa (misalnya rilis paket ekspansi baru) dengan cukup baik.

Tetapi server login sepertinya tidak pernah bisa mengatasi dengan baik, dan sering kali down sementara server dunia baik-baik saja. (artinya jika Anda kehilangan koneksi dalam serangan / penjara bawah tanah, Anda tidak bisa kembali, tetapi pemain lain menunggu Anda!)

Dan sekarang setelah sistem masuk WoW digabung menjadi Battle.Net, Starcraft 2 dapat menjadi tidak tersedia ketika WoW berada di bawah beban berat (seperti yang terjadi selama beberapa jam ketika Cataclysm diluncurkan)

Jadi, jika Anda membuat game yang akan memiliki jumlah pengguna yang sangat besar, skalabilitas dan kinerja sistem login juga sangat penting.

bluescrn
sumber
1
Saya kira server login adalah target utama untuk serangan brute force pada kata sandi, sehingga mereka harus mampu menangani sedikit beban. Terutama jika gim ini sangat populer sehingga penyerang mulai menggunakan botnet (untuk mencegah pembatasan tingkat per alamat-ip) selain menebak nama pengguna secara acak.
Hendrik Brummermann
Gagal masuk dan menempatkan pemain ke dunia dapat memiliki banyak alasan. Mungkin itu adalah server login / basis data akun. Tetapi itu mungkin disebabkan oleh kegagalan memuat informasi pemain dari basis data. Atau oleh kegagalan sistem yang melakukan pengiriman pemain ke server dunia, server obrolan, ... Firewall internal mungkin masih dapat menangani koneksi yang diketahui tetapi mungkin tidak dapat menerapkan aturan untuk memutuskan tentang koneksi baru. Bermain pemain ke dunia jauh lebih kompleks daripada berinteraksi begitu Anda berada di dalam.
Hendrik Brummermann