Parlons serveurs

En ce vendredi 12 avril 2013, alors que la phase de beta commence tout juste, Carbine nous présente l'architecture réseau de son prochain MMO, WildStar.

Bonjour, je m'appelle David Ray et je suis Ingénieur réseau et bases de données en chef chez Carbine Studios. Mini-CV express : cela fait 19 ans que je travaille dans l'industrie du jeu vidéo, pour des studios renommés, dont Dynamix, Interplay, Activision ou Blizzard. Je suis arrivé chez Carbine il y a près de 5 ans. Avant cela, j'ai travaillé dans l'aérospatiale (sur la navette spatiale) et les télécommunications (pour permettre aux téléphones portables d'accéder à Internet).

Aujourd'hui, on m'a montré un message de l'utilisateur "Mizpah" sur WildStar-Central, qui demandait comment fonctionnent les serveurs des MMO. Je me suis dit que ce serait une bonne idée de vous en donner une vue d'ensemble. Bien évidemment, je devrai rester vague sur certains points, pour des questions de propriété intellectuelle, mais ce petit exposé devrait malgré tout vous présenter les principes fondamentaux.

Avant de commencer, voici quelques définitions pour ceux d'entre nous qui sont moins férus de technologie :

Daemon : dans les systèmes d'exploitation multitâches, un daemon (prononciation : /ˈdeɪmən/ ou /ˈdiːmən/) est un processus informatique qui s'exécute en arrière-plan, et non sous le contrôle direct d'un utilisateur (merci Wikipédia).

Royaume : un ensemble de serveurs WildStar qui, collectivement, représentent une planète complète du jeu. Chaque royaume correspond dans la pratique à sa propre planète, même s'ils sont tous identiques. Certains royaumes peuvent avoir des règles particulières, qui ne s'appliquent qu'à eux, notamment pour le PvP. Dans d'autres MMO, on parle parfois de "serveurs", de "shards" ou de toute une variété d'autres noms qui signifient tous la même chose.

Architecture des serveurs

Notre architecture se compose actuellement d'un maximum de 11 daemons s'exécutant sur plusieurs serveurs. Certains de nos daemons sont limités à un seul par région (c'est-à-dire par pays), tandis que d'autres peuvent être présents en grand nombre, par dizaines, voire par centaines, dans chaque royaume.

Lorsque vous vous connectez au jeu, de fait, vous vous connectez d'abord à notre "Daemon Auth" ("Auth" pour authentification), le processus qui reçoit vos identifiant et mot de passe, puis décide si vous êtes autorisé à jouer. Les données d'authentification sont toujours sécurisées, même dans nos bases de données. Une fois que notre daemon a décidé que vous pouvez jouer, il récupère vos autorisations de sécurité, en fonction desquelles il vous présente une liste de royaumes où vous pouvez jouer. Une fois que vous avez sélectionné votre royaume, le Daemon Auth en a "terminé avec vous" et vous confie à la charge d'autres daemons.

Vous vous connectez alors à un "Daemon Utilisateur". Il assure votre suivi en tant qu'entité dans le jeu : il gère toutes les données de votre personnage, dont ses statistiques, ses objets, sa progression dans les quêtes et presque tout ce qui concerne le jeu. Chaque royaume dispose d'un daemon de ce type. Il gère également le processus de création de personnage et vous y restez connecté pendant toute la durée de votre session de jeu.

Une fois votre personnage sélectionné ou créé, le "Daemon Utilisateur" vous connecte également à un "Daemon Monde", qui peut déjà être en cours d'exécution ou, dans le cas des instances, se lance exclusivement pour vous et/ou votre groupe. Il est responsable de la majorité de ce que les joueurs appellent le "gameplay". Il gère toutes les créatures et leur IA, le butin, les combats, les sorts lancés par les joueurs ou les monstres... En bref, quasiment tout ce qu'on appelle "le jeu". Lorsque la situation des joueurs change, le Daemon Monde le signale au Daemon Utilisateur, qui enregistre le changement dans nos bases de données.

Voilà, dans les grandes lignes, comment fonctionne le jeu. Nous avons actuellement 11 daemons en tout. Je ne vais pas entrer dans les détails, mais sachez qu'ils ont tous des tâches spécialisées à accomplir. L'un d'entre eux, notamment, a pour seule fonction de déterminer quelle machine doit exécuter les autres daemons en fonction de la charge de travail des processeurs et de la mémoire disponible. Cette tâche est plus importante qu'il n'y paraît, étant donné la répartition de nos daemons. Cela devrait nous permettre d'ajouter des ressources matérielles s'il devient nécessaire de gérer du trafic supplémentaire. Si nous voulons plus de joueurs sur un royaume, il nous suffit en effet d'ajouter plus de serveurs pour exécuter plus de Daemons Monde.

Quelques réponses à vos questions

Je vais maintenant répondre à quelques questions spécifiques qui ont été posées dans le fil de discussion sur WildStar Central :

  • À quoi ressemble la répartition entre les infrastructures de travail et de stockage ? Combien de services et composants de serveurs sont utilisés ? Discussions, connexions, logiques, etc.

C'est une question bien trop vaste pour donner ici une réponse exhaustive, mais voici quelques pistes.

Nous utilisons des serveurs Microsoft SQL Server pour stocker nos données. Ils hébergent chacun "quelques" royaumes et peuvent évoluer en fonction de nos besoins.

Les discussions sont gérées par un à trois daemons. S'il s'agit d'un message direct d'un joueur à un autre, le Daemon Utilisateur s'en charge. S'il s'agit d'un "say" ou d'un "yell", le message doit passer par le Daemon Monde afin qu'il détermine qui se trouve dans la zone et peut "l'entendre". Et si le message s'adresse à un utilisateur qui n'est pas là... Mais laissons cette fonctionnalité en suspens pour l'instant, nous y reviendrons plus tard. ;)

  • Quels sont les goulets d'étranglement les plus probables ? Les accès à la base de données ?

Nous nous attendons à ce que la plupart des ralentissements se produisent au niveau de la base de données. Mais un grand nombre de nos daemons ont été programmés de façon à être évolutifs, ainsi, quand nous rencontrons un goulet d'étranglement au niveau de la base de données, nous pouvons répartir la charge et ajouter de nouveaux serveurs de base de données assez facilement.

  • Quelles technologies de base de données utilisez-vous ?

Comme mentionné ci-dessus, nous utilisons des serveurs Microsoft SQL Server.

  • J'adorerais voir la topologie d'infrastructure serveur d'un "vrai" MMO, assortie d'un article qui décrive en détails ce qui se passe en profondeur.

Vous l'aurez voulu ! En tout cas, j'espère vous en avoir donné les grandes lignes. Si vous voulez plus de détails sur les 9 autres daemons, nous avons un poste de programmeur réseau à pourvoir. L'annonce est sur notre page de recrutement. ;)

  • J'aimerais savoir quelles innovations ont eu un impact sur l'aspect serveur / centre de données des MMO au cours des 5 dernières années. Si le MMO suit les tendances des centres de données d'entreprise, j'imagine que l'évolutivité, le "provisioning" et les "burst variations" ont dû beaucoup aider...

Oh, il y a eu beaucoup de changements depuis mon premier MMO. À mon avis, le fait que tous nos serveurs sont désormais 64 bits est le plus important. C'était une vraie plaie de rester en dessous de 2 Go à l'époque. Il faut aussi dire que les processeurs et les disques durs sont nettement plus rapides de nos jours. Je suis un vieux de la vieille : quand j'ai débuté dans l'industrie du jeu vidéo, on visait comme configuration recommandée des machines à 16-33 Mhz avec 1-4 Mo de RAM et des disquettes comme support. Ça oui, les choses ont bien changé. :)

Merci à David d'avoir pris le temps de nous parler des serveurs. Vous avez une idée d'article intéressant que vous aimeriez lire ici à l'avenir ? Faites-le-nous savoir sur Facebook, Twitter ou l'un de nos innombrables sites de fans !

De Loic "Atreid" Claveau - 12 avril 2013

Source : http://www.wildstar-online.com/fr/news/parlons_serveurs.php

Réactions (3)

Afficher sur le forum