Devo tenere il server di accesso separato dal server di gioco?


15

Sto pensando di creare un server MMO e ho visto come altri giochi strutturano la loro rete. Una delle cose che ho notato è che c'è sempre un server di accesso e quindi i server di gioco.

Sto ancora decidendo se dovrei farlo, ma vorrei prima sentire alcune opinioni. Quali sono i vantaggi di questo e in che modo il server di accesso comunica con il server di gioco per gestire gli accessi?


1
La domanda "Come si ottiene il bilanciamento del carico negli MMO?" può essere interessante: gamedev.stackexchange.com/q/5956/450
Hendrik Brummermann

Risposte:


15

Credo che ciò sia dovuto principalmente al fatto che l'accesso e la gestione dei giochi sono logicamente più o meno indipendenti, quindi in genere sono separati per un migliore disaccoppiamento, una manutenzione più semplice e una scalabilità. Non devono necessariamente risiedere su server fisici diversi, possono eseguire solo servizi indipendenti sulla stessa macchina. Se il traffico aumenta troppo, il server di accesso può essere facilmente spostato su un altro computer.

Inoltre, i server di accesso sono un probabile vettore di attacco, quindi è bene averli separati dal punto di vista della sicurezza.

Internamente, diversi servizi sul lato server possono utilizzare normali socket per comunicare tra loro, siano essi sullo stesso computer o su un altro computer del cluster. In alternativa, è possibile utilizzare un server di database per mantenere un flag di accesso per ciascun utente.


La maggior parte delle volte vedo una tale bandiera nel gameb db e all'interno del loginserver db, in modo che il server di login possa verificare l'uno contro l'altro e se logindb! = Gamerserverdb l'utente viene disconnesso.
daemonfire300

10

Un aspetto molto importante nello sviluppo degli MMO è il raggiungimento della scalabilità e il bilanciamento del carico.

Gli utenti di autenticazione controllando le credenziali, vietando lo stato, contando gli accessi recenti non riusciti, ecc. È un'attività che può essere eseguita senza conoscere nulla della logica di gioco o dei dati di gioco. Quindi è molto facile spostarlo nel proprio cluster di server.

Inoltre, i server di accesso sono una "entrata" ben nota per il contatto del cliente. Dopo aver eseguito correttamente l'autenticazione, possono inviare il client al server appropriato nel cluster del server di gioco. Questo dispacciamento può essere fatto inoltrando la connessione di rete al server di gioco giusto o dicendo al client di aprire una nuova connessione a un server di gioco giusto.

Dovresti pensare presto ai tagli del tuo sistema per la distribuzione. È molto semplice eseguire diversi pezzi su un server. Ma è abbastanza difficile dividere le cose che sono state sviluppate come una sola unità.


2

Come ex giocatore di WoW, la mia esperienza è stata che il server di accesso era sempre l'anello più debole della catena.

I server del mondo erano generalmente straordinariamente stabili, e gestivano abbastanza bene anche carichi eccezionali (ad es. Nuove versioni del pacchetto di espansione).

Ma i server di login non sembravano mai farcela così bene, e spesso non funzionavano mentre i server del mondo andavano bene. (nel senso che se perdi la connessione in un raid / sotterraneo, non puoi rientrare, ma gli altri giocatori ti stanno aspettando!)

E ora che il sistema di login di WoW è unito a Battle.Net, Starcraft 2 può diventare non disponibile quando WoW è sotto carico (come è accaduto per un paio d'ore all'avvio di Cataclysm)

Quindi, se stai costruendo un gioco che avrà un numero molto elevato di utenti, anche la scalabilità e le prestazioni del sistema di accesso sono molto importanti.


1
Suppongo che i server di accesso siano l'obiettivo principale degli attacchi di forza bruta alle password, quindi devono essere in grado di gestire un bel po 'di carico. Soprattutto se il gioco è così popolare che gli attaccanti iniziano a usare le botnet (per prevenire la limitazione della frequenza per indirizzo IP) oltre alla normale ipotesi casuale di nomi utente.
Hendrik Brummermann,

Non riuscire ad accedere e posizionare un giocatore nel mondo può avere molteplici ragioni. Potrebbe essere il server di accesso / il database degli account. Tuttavia, potrebbe essere causato da un errore nel caricamento delle informazioni del giocatore dal database. O a causa di un errore del sistema che invia i giocatori ai server del mondo, ai server di chat, ... Un firewall interno potrebbe essere ancora in grado di gestire connessioni conosciute ma potrebbe non essere in grado di applicare il set di regole per decidere sulle nuove connessioni. Giocare un giocatore nel mondo è molto più complesso che interagire una volta dentro.
Hendrik Brummermann,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.