Dois-je garder le serveur de connexion en dehors du serveur de jeu?

15

Je pense à créer un serveur MMO, et j'ai regardé comment les autres jeux structurent leur réseau. L'une des choses que j'ai remarquées est qu'il y a toujours un serveur de connexion et ensuite le ou les serveurs de jeu.

Je suis toujours en train de décider si je dois le faire, mais je voudrais d'abord entendre quelques opinions. Quels en sont les avantages et comment le serveur de connexion communique-t-il avec le serveur de jeu pour gérer les connexions?

JPiolho
la source
1
La question "Comment l'équilibrage de charge est-il réalisé dans les MMO?" peut être intéressant: gamedev.stackexchange.com/q/5956/450
Hendrik Brummermann

Réponses:

15

Je pense que cela est principalement dû au fait que la connexion et la gestion du jeu sont logiquement plus ou moins indépendantes, elles sont donc généralement séparées pour un meilleur découplage, une maintenance plus facile et une évolutivité. Ils ne doivent pas nécessairement résider sur des serveurs physiques différents, ils peuvent fonctionner aussi bien que des services indépendants sur la même machine. Si le trafic augmente trop, le serveur de connexion peut facilement être déplacé vers une autre machine.

De plus, les serveurs de connexion sont un vecteur d'attaque probable, il est donc bon de les séparer du point de vue de la sécurité.

En interne, différents services côté serveur peuvent utiliser des sockets ordinaires pour communiquer entre eux, que ce soit sur la même machine ou sur une autre machine du cluster. Alternativement, un serveur de base de données pourrait être utilisé pour maintenir un indicateur «est connecté» pour chaque utilisateur.

Alexander Gessler
la source
La plupart du temps, je vois un tel indicateur dans la base de données du serveur de jeux et dans la base de données du serveur de connexion, afin que le serveur de connexion puisse se vérifier les uns les autres et si logindb! = Gamerserverdb, l'utilisateur est déconnecté.
daemonfire300
10

Un aspect très important dans le développement des MMO consiste à atteindre l'évolutivité et à permettre l'équilibrage de charge.

L'authentification des utilisateurs en vérifiant les informations d'identification, l'état de l'interdiction, le comptage des ouvertures de session récentes, etc. est une tâche qui peut être effectuée sans rien savoir de la logique du jeu ou des données du jeu. Il est donc très facile de déplacer cela vers son propre cluster de serveurs.

De plus, les serveurs de connexion sont une «entrée» bien connue que le client peut contacter. Après une authentification réussie, ils peuvent envoyer le client au serveur approprié dans le cluster de serveurs de jeux. Cette répartition peut être effectuée en transmettant la connexion réseau au bon serveur de jeu ou en disant au client d'ouvrir une nouvelle connexion à un bon serveur de jeu.

Vous devriez penser aux coupures de votre système pour distribution dès le début. Il est très facile d'exécuter plusieurs morceaux sur un même serveur. Mais il est assez difficile de diviser les éléments qui ont été développés en une seule unité.

Hendrik Brummermann
la source
2

En tant qu'ancien joueur de WoW, mon expérience était que le serveur de connexion était toujours le maillon le plus faible de la chaîne.

Les serveurs mondiaux étaient généralement d'une stabilité impressionnante, gérant même assez bien des charges exceptionnelles (par exemple de nouvelles versions de pack d'extension).

Mais le ou les serveurs de connexion ne semblaient tout simplement pas fonctionner aussi bien et étaient souvent en panne pendant que les serveurs mondiaux allaient bien. (ce qui signifie que si vous perdez la connexion dans un raid / donjon, vous ne pouvez pas rentrer, mais les autres joueurs vous attendent!)

Et maintenant que le système de connexion WoW est fusionné dans Battle.Net, Starcraft 2 peut devenir indisponible lorsque WoW est sous forte charge (comme cela s'est produit pendant quelques heures lorsque Cataclysm a été lancé)

Donc, si vous construisez un jeu qui aura un très grand nombre d'utilisateurs, l'évolutivité et les performances du système de connexion sont également très importantes.

bluescrn
la source
1
Je suppose que les serveurs de connexion sont la cible principale des attaques par force brute sur les mots de passe, ils doivent donc être en mesure de gérer un peu de charge. Surtout si le jeu est si populaire que les attaquants commencent à utiliser des botnets (pour empêcher la limitation du débit par adresse IP) en plus de la devinette aléatoire normale des noms d'utilisateur.
Hendrik Brummermann
Ne pas se connecter et placer un joueur dans le monde peut avoir plusieurs raisons. Il peut s'agir de la base de données des serveurs / comptes de connexion. Mais cela peut être causé par un échec de chargement des informations sur le joueur à partir de la base de données. Ou par une défaillance du système qui envoie des joueurs sur les serveurs mondiaux, les serveurs de chat, ... Un pare-feu interne peut toujours gérer les connexions connues mais peut ne pas être en mesure d'appliquer le jeu de règles pour décider de nouvelles connexions. Jouer un joueur dans le monde est beaucoup plus complexe que d'interagir une fois à l'intérieur.
Hendrik Brummermann