View a markdown version of this page

Découvrez les conteneurs d'une flotte de conteneurs - GameLift Serveurs Amazon

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Découvrez les conteneurs d'une flotte de conteneurs

Sur un parc de Amazon GameLift Servers conteneurs, chaque instance peut exécuter plusieurs conteneurs. Par exemple, vous pouvez exécuter plusieurs répliques du groupe de conteneurs de votre serveur de jeu. Vous pouvez également exécuter un groupe de conteneurs par instance qui fournit des services partagés à l'échelle de l'instance.

Le serveur de découverte de conteneurs permet aux processus de votre serveur de jeu de découvrir les autres conteneurs exécutés sur la même instance. Les conteneurs peuvent ensuite communiquer entre eux par le biais de définitions de groupes de conteneurs via le réseau local de l'instance.

Le serveur de découverte est un service HTTP léger. Amazon GameLift Serversl'exécute localement sur chaque instance de flotte de conteneurs. Le service fournit les informations réseau suivantes pour chaque conteneur exécuté sur cette instance :

  • Le nom du conteneur que vous définissez dans la définition du groupe de conteneurs.

  • Identifiant unique du conteneur.

  • Adresse IP locale du conteneur sur l'instance.

  • Le type de groupe de conteneurs, soit GAME_SERVER (une réplique du groupe de conteneurs du serveur de jeu), soit PER_INSTANCE (le groupe de conteneurs par instance).

Note

Le serveur de découverte de conteneurs n'est disponible que sur les flottes de conteneurs gérées.

Récupérez les informations du réseau de conteneurs

Vous pouvez récupérer les informations du réseau de conteneurs de deux manières : à partir d'un processus de serveur de jeu avec le SDK Amazon GameLift Servers du serveur, ou à partir de n'importe quel conteneur en appelant le serveur de découverte directement via HTTP.

Récupérez les informations du conteneur à l'aide du SDK du serveur

Si le processus de votre serveur de jeu utilise le SDK Amazon GameLift Servers du serveur, lancez l'ListContainersNetworkInfo()action pour récupérer les informations du réseau du conteneur. Le SDK du serveur localise le serveur de découverte et fait la demande pour vous. L'action renvoie les informations réseau pour chaque conteneur exécuté sur la même instance. Sur tout autre type de calcul, l'action renvoie une erreur de type de calcul non prise en charge.

ListContainersNetworkInfo()est disponible dans la version 5.5 ou ultérieure du SDK du serveur pour les langues suivantes :

L'action est également disponible dans les Amazon GameLift Servers plugins pour Unreal Engine et Unity.

Récupérez les informations du conteneur en appelant directement le serveur de découverte

Certains conteneurs n'utilisent pas le SDK du serveur, tels que les conteneurs par instance. Ces conteneurs appellent le serveur de découverte directement via HTTP. Amazon GameLift Serversprédéfinit la variable d'GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1environnement dans ces conteneurs. Cette variable contient l'adresse du serveur de découverte, y compris le chemin de version de l'API, et elle est définie à la fois dans les définitions du serveur de jeu et des groupes de conteneurs par instance.

Pour récupérer les informations du réseau de conteneurs, envoyez une GET requête HTTP à ce point de terminaison. L'exemple suivant utilise curl :

curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"

Le serveur de découverte renvoie un tableau JSON avec une entrée pour chaque conteneur exécuté sur l'instance :

[ { "containerName": "game-server", "ipAddress": "172.17.0.3", "containerId": "b896159563df43736e5e93ad0547a24fa572648d55b70c70747642afca398b18", "containerGroupType": "GAME_SERVER" }, { "containerName": "per-instance", "ipAddress": "172.17.0.4", "containerId": "3c239ae037aec28bb42212ffa2b9e02524c0c4c361db9bc31dd4c5aecc0b7943", "containerGroupType": "PER_INSTANCE" } ]

Limites de taux de demandes

Le serveur de découverte limite chaque conteneur de l'instance à 10 requêtes par seconde. Il limite les demandes qui dépassent cette limite et renvoie une erreur. Pour respecter cette limite, interrogez le serveur de découverte une fois au démarrage. Vous pouvez également l'interroger uniquement lorsque vous devez actualiser la vue de l'instance. Mettez les résultats en cache dans votre conteneur et réutilisez les valeurs mises en cache plutôt que d'interroger le serveur de découverte de façon récurrente.

Actualisez régulièrement votre cache pour le maintenir à jour. L'adresse IP locale d'un conteneur peut changer en cas de panne ou de fermeture du conteneur (par exemple, à la fin de sa session de jeu).

Exemple : collecte de métriques à partir de conteneurs de serveurs de jeux

Le serveur de découverte est couramment utilisé pour envoyer des données télémétriques entre des conteneurs d'une même instance sans quitter le réseau local de l'instance. Imaginons une flotte qui gère plusieurs conteneurs de serveurs de jeu (GAME_SERVER) et un seul conteneur par instance (PER_INSTANCE). Le conteneur par instance exécute un collecteur de métriques partagé par tous les serveurs de jeu de l'instance.

Vous pouvez implémenter la collecte de métriques à l'aide d'un modèle push ou d'un modèle pull :

  • Push (émission de métriques) — Au démarrage, chaque conteneur de serveur de jeu appelleListContainersNetworkInfo(). Le conteneur trouve l'entrée correspondant au type de groupe de PER_INSTANCE conteneurs. Il lit ensuite l'adresse IP locale à partir de cette entrée. Le serveur de jeu envoie ses métriques directement au collecteur par instance via le réseau local de l'instance.

  • Pull (scraping des métriques) — L'approche inverse fonctionne également. Le conteneur par instance n'utilise pas le SDK du serveur. Il appelle donc directement le point de terminaison du serveur de découverte. Il trouve les adresses IP de tous les GAME_SERVER conteneurs de l'instance. Il supprime ensuite un point de terminaison de métriques que chaque conteneur de serveur de jeu expose sur le réseau local.

Dans les deux cas, la communication reste sur le réseau local de l'instance. Chaque conteneur interroge le serveur de découverte de manière occasionnelle plutôt que récurrente.