P2P, relais et instances de conteneurs : une analyse approfondie des ressources de développement, des performances et des problèmes de sécurité pour les jeux multijoueurs

Ce qui suit est la transcription de la présentation de Michal Buras au Live Service Game Summit (2024.09.10).

L'objectif est une meilleure compréhension des différentes technologies de mise en réseau disponibles et les avantages ainsi que les défis des différentes infrastructures de jeu. Plus précisément, la technologie de communication de type "peer-to-peer" et ses défis, notamment la migration de l'hôte, et comment cela impacte vos ressources de développement.


Points Clés

1. Qu'est-ce que le réseau Peer-to-Peer dans l'infrastructure de jeu multijoueur

  • Le P2P est souvent perçu comme simple, où les joueurs se connectent en utilisant l'adresse IP publique de l'hôte, mais des défis apparaissent en raison de la traduction d'adresses réseau (NAT), rendant la communication directe plus complexe.

  • Dans le réseau peer-to-peer (P2P), les joueurs se connectent directement les uns aux autres via un "serveur d'écoute" hébergé sur la machine d'un joueur.

  • Ce type de trafic de "serveur d'écoute" est bloqué par la plupart des fournisseurs car il est propice aux abus. Ainsi, l'alternative est un serveur "STUN", souvent appelé "Relays".

  1. Avantages et inconvénients des relais dans l'infrastructure de jeu multijoueur

Avantages

  • Les serveurs de relais gèrent la traversée NAT, permettant aux joueurs de se connecter sans partager leurs adresses IP privées.

  • Certaines services de relais, comme Epic Online Services (EOS), offrent des relais gratuits sans coûts initiaux ou de maintenance, simplifiant le développement initial.

Inconvénients

  • Les serveurs de relais introduisent une latence supplémentaire, car les paquets doivent passer par un nœud supplémentaire, nuisant à l'expérience des joueurs.

  • Le contrôle limité sur le routage des joueurs peut conduire à des connexions à haute latence si les joueurs sont dirigés vers des relais distants.

  • Préoccupations de sécurité, comme l'exposition des données des joueurs à travers des lobbys dans certaines implémentations.

  1. Le coût caché des relais : Migration de l'hôte

Migration de l'Hôte : Si le joueur hôte quitte, la session de jeu se termine pour tous les joueurs, nécessitant que le jeu transfère le rôle d'hôte à un autre joueur en cours de partie.

Pourquoi c'est coûteux

  • La mise en œuvre de la migration de l'hôte implique de remanier de nombreuses fonctionnalités du jeu, nécessitant un temps et des ressources de développement considérables.

  • Les studios de jeux peuvent avoir besoin de personnel supplémentaire juste pour gérer la complexité accrue, entraînant des coûts autour de 15 000 $ par mois.

  • La migration de l'hôte dégrade également l'expérience utilisateur, car elle n'est pas transparente et cause souvent des interruptions dans le gameplay.

4. Pourquoi les serveurs autoritaires avec orchestration constituent l'infrastructure idéale pour les jeux commerciaux

Serveurs Autoritaires : Ces serveurs dédiés contrôlent tous les aspects du jeu, garantissant un jeu équitable en éliminant la dépendance à la machine d'un seul joueur.

Avantages :

  • Résout des problèmes comme la migration de l'hôte et une mauvaise expérience de jeu due à des déconnexions soudaines de l'hôte, garantissant un environnement stable et contrôlé.

  • Les serveurs autoritaires offrent de meilleures performances et sécurité, réduisant les risques d'exposition des données des joueurs et minimisant les problèmes de latence.

  • Orchestration : L'utilisation d'un service comme l'infrastructure serveur containerisée d'Edgegap permet une allocation de serveur évolutive et en temps réel qui s'adapte au trafic des joueurs, réduisant les coûts en ne payant que pour le temps serveur actif.

Présentation - Transcription complète

Introductions

Bonjour à tous,

Je suis Michal et aujourd'hui je voulais vous montrer le parcours que nous avons suivi pour créer une solution multijoueur parfaite pour Six Days in Fallujah, notamment notre analyse des solutions peer-to-peer et la gestion de la migration de l'hôte. De plus, nous parlerons de l'hébergement des serveurs de jeu dédiés.

L'idée, c'est qu'après cette présentation, vous repartirez avec une meilleure compréhension des différentes technologies disponibles et des avantages ainsi que des défis des différentes infrastructures de jeu.

Pour le décomposer, nous examinerons la technologie peer-to-peer et ses défis, en particulier la migration de l'hôte, et comment cela impacte vos ressources de développement.

Ensuite, nous examinerons différentes options d'infrastructure d'hébergement de serveurs dédiés, y compris Bare Metal, des machines virtuelles de calcul et des instances de conteneurs.

À propos de l'intervenant

Mais tout d'abord, un peu sur moi-même. Je suis Michal Buras, Responsable Networking / Online Engineering pour Six Days in Fallujah. Le jeu a connu un lancement très réussi et nous continuons à le développer au fil du temps.

Personnellement, je suis dans le développement de jeux depuis six ans et dix ans dans le développement de logiciels. J'ai commencé dans la VR pour l'industrie initialement, mais pas pour les jeux et je voulais faire des jeux. Alors, j'ai rejoint le [Multiplayer Games Group] (MPG), où j'ai fait un travail fascinant sur le réseau entre autres. Puis j'ai travaillé comme généraliste pour Breach Studios, mais je voulais vraiment faire du réseau, alors j'ai rejoint Highwire Games.

Objectif de la présentation

Pourquoi suis-je ici, n'est-ce pas?

Après le lancement initial, mon équipe et moi avons été chargés d'ajouter la migration de l'hôte à Six Days, car c'est crucial pour notre expérience et pour que le jeu continue d'être en ligne. Ce que j'ai réalisé, c'est qu'il manquait d'informations et d'analyses [disponibles] entre les différentes technologies, à savoir le peer-to-peer contre l'hébergement dédié.

De plus, étant curieux, je voulais évaluer si le réseau peer-to-peer était vraiment la solution économique que nous disons dans le développement de jeux.

Enfin, j'espère que cette exploration aidera à informer les autres et à développer les connaissances disponibles pour la communauté des développeurs de jeux dans son ensemble.

Réseau Peer-To-Peer dans les jeux multijoueurs - Les Bases

Je réalise que tout le monde dans la salle n'est pas forcément ingénieur, alors voici un aperçu rapide des bases du peer-to-peer et comment connecter les joueurs sur le réseau.

Le peer-to-peer, comme on dit, est censé être super simple. Le jeu crée un serveur d'écoute avec l'IP publique, et vous connectez tous les joueurs au serveur. Et malheureusement, ce n'est pas aussi facile qu'il y paraît, car votre IP publique n'est pas votre propre IP publique.

Cela signifie que l'adresse IP est partagée. Votre fournisseur Internet regroupe plusieurs utilisateurs sous une seule IP avec un processus appelé traduction d'adresses réseau.

La seule différence est le numéro de port qui vous est temporairement attribué lorsque vous demandez une page web ou une autre ressource. Pour les non-ingénieurs, pensez à l'IP du serveur comme à un immeuble d'appartements. Cependant, comme il y a plusieurs appartements dans chaque immeuble, chaque fois que vous commandez une pizza, vous recevez un numéro d'appartement unique, et le numéro change au fil du temps.

Et cela cause beaucoup de confusion.

Nous devons trouver un mécanisme pour obtenir le numéro attribué et partager cette information avec les autres joueurs.

Réseau Peer-To-Peer - Serveurs STUN

Cette solution est appelée serveur STUN. Pensez à cela comme à des Pages Jaunes. Si vous voulez que les gens puissent trouver votre entreprise, vous devez mettre à jour les Pages Jaunes avec votre numéro actuel.

Malheureusement, cette solution n'est pas sécurisée, car notre numéro d'appartement pourrait être partagé davantage, et n'importe qui depuis Internet pourrait nous envoyer n'importe quoi. La plupart des fournisseurs de services trouvent cela dangereux et bloquent ce type de trafic.

Réseau Peer-To-Peer - Serveurs de Relays

L'alternative, la seule alternative que nous ayons, sont les serveurs de relais. Votre adresse privée n'est partagée avec personne sauf le serveur qui transmet l'information entre vous et l'autre joueur.

Il y a presque des serveurs sans calcul, mais parce qu'ils nécessitent une certaine quantité de puissance de calcul, vous devez les héberger, ce qui signifie que vous avez besoin d'un fournisseur de services.

Il existe de nombreux services disponibles qui proposent des solutions de serveurs de relais que nous avons évaluées, mais pour cette présentation, je ne parlerai que de trois que je trouve les plus intéressants.

Relais : Epic Online Service - Aperçu

Tout d'abord, Epic Online Services (EOS) offre des relais gratuits, ce qui signifie zéro coût initial et zéro coût de maintenance.

Cette solution nécessite le moins de développement, ils sont multiplateformes, ont un système de lobby, et la seule chose qui manque pour un jeu complet est un système de matchmaking.

Cependant, vous n'avez absolument aucun contrôle sur la façon dont ces joueurs sont acheminés.

Un serveur relais ajoute un nœud supplémentaire à votre paquet de jeu qu'il doit traverser, ce qui introduit une latence. Étant donné le nombre limité de relais, le joueur peut être dirigé vers des relais distants en fonction de la disponibilité au moment. Cette latence élevée est inacceptable dans un jeu commercial, car elle entraîne une mauvaise expérience pour le joueur et par conséquent une désertion. Cela entraîne directement des joueurs frustrés sur Discord et une perte de revenus.

Relais : Epic Online Service - Vulnérabilités

Epic Online Services peut également être vulnérable.

C'est un exemple d'un des titres AAA de Steam. Nous avons ici un groupe de joueurs dans le lobby, et ils peuvent échanger des informations qui sont traitées par WebSocket. Quand vous créez un jeu peer-to-peer, vous rassemblez généralement des informations pertinentes sur le joueur hôte du jeu, c'est-à-dire sur son PC, n'est-ce pas ?

En utilisant une application simple appelée Fiddler, vous pouvez accéder à ce stockage d'informations de lobby et exposer toutes les autres informations privées des joueurs en texte clair. Et cette application ne nécessite que deux clics pour être installée et peut être utilisée par un enfant de dix ans. Donc quelqu'un pourrait littéralement scraper les données [de votre] base de données, n'est-ce pas?

Et c'est un énorme risque que doit assumer un jeu commercial. Soyez donc prudent sur ce que vous mettez en œuvre en utilisant le système de lobby.

Relais : WebRTC

[Une] solution peer-to-peer alternative que j'ai trouvée intéressante est le relais WebRTC. J'ai découvert cette option d'infrastructure grâce à Outriders de People Can Fly qui avait une présentation approfondie sur Unreal il y a quelques années.

En bref, c'est une bonne implémentation parce qu'ils réutilisent les serveurs relais, mais ils doivent modifier beaucoup le code Unreal pour y faire face. De plus, ils ont dû héberger eux-mêmes les relais. C'est une infrastructure personnalisée que vous devez construire, tester, optimiser et entretenir, ce qui signifie des coûts mensuels qui auraient pu être dépensés ailleurs.

Cependant, il n'est pas clair s'ils sont vraiment beaucoup meilleurs en termes de performance par rapport aux relais EOS.

Relais : Développés/Autohébergés

Cela m'amène aux serveurs relais développés en interne. Et dans l'un des projets, l'idée était que nous pourrions créer un serveur relais dans Unreal Engine qui sérialiserait les paquets, peut-être les analyserait pour éviter les tricheries. Et cela n'avait aucun sens au niveau conceptuel en raison de la latence et des coûts informatiques supplémentaires.

Si vous calculez, ce n'est plus un serveur relais. Cela devient une forme de serveur dédié. Je vous recommande donc, si vous voulez avoir votre propre technologie de relais, de simplement prendre un proxy sur GitHub, le modifier pour qu'il soit configurable en temps réel. Vous n'avez pas besoin de mettre en œuvre de répétition de paquets, d'ordre, etc., car votre gestionnaire de jeu devrait s'en occuper.

Mais si vous prenez du recul maintenant et pensez à tout cela. À ce moment-là, vous ne faites plus un jeu, vous construisez une infrastructure. Dépensant de l'argent sur des choses qui n'aident pas votre jeu à croître avec du contenu, une meilleure technologie, ou des fonctionnalités.

Quel est donc l'intérêt ?

Migration de l'hôte et impact sur les défis des relais

Maintenant, tous ces services ont un défi fondamental.

Vous avez besoin d'un mécanisme appelé migration de l'hôte, car si le joueur qui héberge le jeu quitte, tout le monde est déconnecté.

C'est un problème fondamental que vous devez résoudre car il tue littéralement la session de jeu de bout en bout. Un problème massif pour tout jeu commercial où le multijoueur est clé.

Nous avons eu un problème majeur dans Six Days avec des gens quittant juste le jeu parce que notre jeu est un jeu difficile. Un coup, un mort, n'est-ce pas ? Et peut-être qu'ils ne sont pas au courant d'être un hôte ou peut-être qu'ils ne se soucient pas d'être un hôte. Alors c'était un véritable frein à la fête.

[Dans] Six Days j'ai mis en œuvre une migration d'hôte basique en utilisant seulement le pilote réseau Unreal et ça a bien fonctionné dans sa forme très basique. Je ne veux pas entrer trop dans les détails ici puisque c'est pour les geeks d'Unreal, alors vous pouvez me demander dans le chat privé après, si vous êtes curieux.

Mais tout le projet nécessitait un remodelage complet pour que toutes les fonctionnalités le prennent en charge. Maintenant, chaque petite fonctionnalité, chaque blueprint fait par un designer devait être remanié, et il n'y a pas de solution miracle pour mettre en œuvre une migration d'hôte, à moins que votre moteur ne la supporte nativement, mais cela viendra avec un coût de bande passante du réseau.

C'était trop de risque de gestion de projet pour trop peu à gagner par rapport aux autres alternatives.

La conclusion est que, bien que les relais aient été bon marché au départ, la solution de migration d'hôte que vous devez créer devient extrêmement coûteuse. Pas si bon marché après tout.

Toute cette investigation des différentes technologies et services nous a conduit à réaliser que la solution "bon marché" qu'était le peer-to-peer, nous aurions besoin de construire tout un système de migration d'hôte, qui ne serait pas une résolution transparente et offrirait une pauvre expérience utilisateur, puis nous devrions la maintenir.

Donc soit vous embauchez du personnel supplémentaire, soit vous déplacez la date de sortie de votre projet. Dans les deux cas, vous brûlez de l'argent. C'est parce que vous augmentez la complexité de littéralement chaque partie du jeu. Notre évaluation est que nous aurions besoin d'un testeur supplémentaire et d'un développeur qui seraient entièrement assignés à reconfigurer toutes les fonctionnalités pour aller plus loin avec cela.

Cela nous coûterait mensuellement environ 15 000 $. Et cela ne fera que croître plus tard. Et je veux que vous vous souveniez de cette question, que pouvons-nous obtenir d'autre pour 15K ? Que pouvons-nous obtenir d'autre pour ces ressources de développement ?

Serveurs dédiés - Infrastructure & Répartition des coûts

La prochaine étape était d'évaluer d'autres options, à savoir les serveurs dédiés. Comparons chaque option et faisons une répartition des coûts.

Avant de continuer, examinons ce graphique. Sur le côté gauche, vous pouvez voir les sessions de jeu de Six Days dans le temps. Ce sont de vraies données historiques sur une période de 24 heures.

Comment lire ceci. Par exemple, le tracé rouge est pour l'Amérique du Nord Est et à UTC zéro a un pic de trente-trois jeux. Cela signifie qu'il y a trente-trois serveurs de Six Days fonctionnant en parallèle.

Étant donné que notre jeu nécessite deux vCPU ou threads logiques, cette région devrait soutenir soixante-six CPUs logiques. Sur la droite, vous avez un coût mensuel d'une telle distribution de jeu. Et ce ne serait qu'une région. Alors multiplions maintenant cela plusieurs fois. Et voyons combien de jeux nous pourrions avoir sur le graphique si nous échangions les ressources de développement pour l'infrastructure.

Et le budget supposé était de 15K $.

Cloud Public (AWS)

D'abord le plus évident, tout le monde se tourne vers AWS.

Voyons ce que nous pouvons obtenir sur le cloud public le plus reconnaissable. J'ai calculé le coût du pic pour chaque région séparément pour que ce soit aussi précis que possible.

[Six Days a] génération de carte procédurale et une IA très sophistiquée, notre jeu exige un peu plus de puissance, mais c'est encore 2 200 sessions de jeu par jour. Ce n'est pas mal, n'est-ce pas? Et si notre jeu était comme Valorant ou Counter Strike, ce serait presque 10K sessions de joueurs.

Bare Metal

Le bon vieux Bare Metal.

Je sais que certains d'entre vous pourraient dire que le Bare Metal a de meilleures performances et pourrait contenir 20 % de plus. Dans le cas de Six Days, mon ordinateur portable de jeu ne peut pas exécuter le serveur sur un seul thread logique, donc le calcul reste malheureusement le même.

Peut-être que quelque chose de plus simple, comme Valorant, pourrait faire 8K comme Amazon.

Quoi qu'il en soit, dans notre cas, ce n'était pas les options. Aussi, je dois noter qu'il pourrait y avoir quelques options de Bare Metal supplémentaires flexibles, où vous pourriez insérer un peu plus de joueurs, mais je n'ai pas pu mentionner dans cette présentation.

Instances de conteneur - Aperçu

Alors j'ai commencé à rechercher des instances de conteneurs, alors que je me demandais s'il y avait eu des progrès dans la technologie des serveurs de jeux conteneurisés, et j'ai trouvé ces gars-là.

Comme les instances de conteneurs sont entièrement gérées, elles ne nécessitent aucun coût d'ingénierie, je télécharge juste l'image du jeu, je ne me soucie pas des régions, des frais généraux ou de toute configuration que je devais faire avec d'autres technologies d'infrastructure.

C'est ainsi que j'ai découvert Edgegap. Nous étions les premiers à le développer de telle manière qu'il était utilisable pour les jeux multijoueurs.

Instances de conteneur - Mise en cache d'images

Toutes les entreprises comme Azure, parce que pourquoi est-ce que je parle d'instances de conteneurs ? Je ne l'ai pas choisi par hasard.

La première fois que je faisais de l'infrastructure pour une entreprise VR, je cherchais d'autres options que le cloud compute évolutif. J'ai trouvé des instances de conteneurs en Azure, mais elles étaient super, super lentes à déployer.

Parce qu'elles ne font pas de mise en cache d'images, ce qu'Edgegap fait.

J'étais très heureux de constater que quelqu'un avait enfin mis en œuvre ce qui manquait pour les instances de conteneurs. Cela nous permet de gérer deux fois plus que sur le cloud public avec le même budget. Et encore une fois, si ce jeu était de style Valorant, 15 000 USD couvrirait leur budget mensuel pour l'infrastructure serveur pour héberger tout le jeu.

Instances de conteneur - Orchestration distribuée

Une autre chose cool à noter ici est qu'avec les conteneurs, nous ne sommes pas limités à un centre de données spécifique.

Par exemple, nous pouvons héberger un jeu par jour pour notre ami à Cape Town sans gérer un cluster Kubernetes local qui serait inutilisé pour le reste du temps. Cela rend notre jeu plus inclusif.

Habituellement, lorsque vous créez un jeu, vous allez pour le fruit le plus bas en termes de régions de jeu, n'est-ce pas? Mais si vous ajoutez tous ces petits endroits où les gens sont incapables de jouer à cause de la haute latence vers le centre de données, ces petites baies deviennent un repas vraiment copieux.

Comme on parle beaucoup de monétisation de jeux, vous pouvez considérer cela comme une opportunité de s'ouvrir à de nouveaux marchés qui étaient indisponibles auparavant.

Cloud public - Capacité gaspillée contre Instances de conteneur

Pourquoi ces instances de conteneurs sont-elles si bonnes?

Regardons ce graphique que j'ai fait. La ligne verte, ce sont des données de joueurs en temps réel non moyennées. Comme vous le voyez, elle a des pics, des fluctuations, très difficile à prévoir.

Lorsque nous utilisons des solutions de cloud public, nous devons garder une marge de serveurs de jeu vides et inutilisés pour accueillir ces joueurs et toute déviation potentielle.

C'est pourquoi l'augmentation et la diminution de la réserve de serveurs disponibles sont très lentes. Donc, dans le cloud public, toute la zone en dessous de la ligne rouge est ce pour quoi vous payez et la zone en dessous de la ligne verte est ce pour quoi vous devriez payer. L'espace en rouge est là où l'argent s'échappe.

Maintenant, c'est seulement pour une seule région que cela s'échelonne et se multiplie par le nombre de régions que vous avez.

Les instances de conteneurs résolvent ces problèmes car elles sont super rapides à déployer grâce à la mise en cache d'images que j'ai mentionnée précédemment. Il n'y a aucun délai dans le démarrage ou l'arrêt, de cette façon, nous pouvons ajuster précisément à la demande en temps réel.

En conséquence, la ligne bleue s'aligne presque parfaitement avec le trafic des joueurs, et vous finissez par ne payer que pour ce que vous utilisez.

Comparaison Finale

Tout cela nous amène à la dernière diapositive de notre présentation, sur la façon dont nous avons géré l'infrastructure réseau dans Six Days. Nous avons constaté que lorsque vous jouez dans une partie privée avec votre ami, le peer-to-peer sans migration d'hôte est suffisant, et cela représente 40 % de notre trafic.

Conclusion

Quand j'étais enfant, beaucoup de jeux étaient peer-to-peer comme Counter Strike. Et il y avait, nous étions sur des serveurs d'écoute en peer-to-peer. Et nous n'avons jamais eu de problèmes avec le départ de l'hôte, parce que nous nous connaissions et que nous ne voulions pas gâcher le plaisir. Sauf, bien sûr, si maman venait dans la pièce et nous disait de quitter le jeu pour faire nos devoirs, car jouer ne vous donnera pas un diplôme scientifique.

Maman avait partiellement raison. Mais pour les jeux avec matchmaking avec des gens au hasard, le mode peer-to-peer était un désastre total. Surtout pour un jeu difficile comme le nôtre.

Nous avons donc des serveurs dédiés sur Edgegap pour les jeux qui sont matchmades pour que votre expérience de jeu ne dépende pas d'un gars au hasard qui quitte le jeu en rage.

Donc, je recommande de tout cœur de faire un hybride [d'Edgegap] pour votre jeu si vous voulez vraiment de la qualité ainsi que de la quantité.

C'est tout. Merci pour votre temps et n'hésitez pas à m'ajouter sur LinkedIn. Merci, les gars !

Sources et/ou collaboration de contenu avec

Michal Buras, Ingénieur Réseaux Principal chez Highwire Games

Intégrer Edgegap facilement en quelques minutes

Intégrer Edgegap facilement en quelques minutes

Intégrer Edgegap facilement en quelques minutes