View a markdown version of this page

Descubra contêineres em uma frota de contêineres - GameLift Servidores Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Descubra contêineres em uma frota de contêineres

Em uma frota de Amazon GameLift Servers contêineres, cada instância pode executar vários contêineres. Por exemplo, você pode executar várias réplicas do seu grupo de contêineres do servidor de jogos. Você também pode executar um grupo de contêineres por instância que forneça serviços compartilhados em toda a instância.

O servidor de descoberta de contêineres permite que os processos do servidor de jogos descubram os outros contêineres em execução na mesma instância. Os contêineres podem então se comunicar entre si em todas as definições de grupos de contêineres na rede local da instância.

O servidor de descoberta é um serviço HTTP leve. Amazon GameLift Serverso executa localmente em cada instância da frota de contêineres. O serviço fornece as seguintes informações de rede para cada contêiner em execução nessa instância:

  • O nome do contêiner que você define na definição do grupo de contêineres.

  • O identificador exclusivo do contêiner.

  • O endereço IP local do contêiner na instância.

  • O tipo de grupo de contêineres, seja GAME_SERVER (uma réplica do grupo de contêineres do servidor de jogos) ou PER_INSTANCE (o grupo de contêineres por instância).

nota

O servidor de descoberta de contêineres está disponível somente em frotas de contêineres gerenciadas.

Recupere informações da rede de contêineres

Você pode recuperar informações da rede de contêineres de duas maneiras: de um processo de servidor de jogos com o SDK do Amazon GameLift Servers servidor ou de qualquer contêiner chamando o servidor de descoberta diretamente por HTTP.

Recupere informações do contêiner usando o SDK do servidor

Se o processo do servidor de jogos usar o SDK Amazon GameLift Servers do servidor, chame a ListContainersNetworkInfo() ação para recuperar as informações da rede do contêiner. O SDK do servidor localiza o servidor de descoberta e faz a solicitação para você. A ação retorna as informações de rede de cada contêiner em execução na mesma instância. Em qualquer outro tipo de computação, a ação retorna um erro de tipo de computação não suportado.

ListContainersNetworkInfo()está disponível no SDK do servidor versão 5.5 ou posterior para os seguintes idiomas:

A ação também está disponível nos Amazon GameLift Servers plug-ins do Unreal Engine e do Unity.

Recupere informações do contêiner chamando diretamente o servidor de descoberta

Alguns contêineres não usam o SDK do servidor, como contêineres por instância. Esses contêineres chamam o servidor de descoberta diretamente por HTTP. Amazon GameLift Serverspredefine a variável de GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1 ambiente nesses contêineres. Essa variável contém o endereço do servidor de descoberta, incluindo o caminho da versão da API, e é definida nas definições do servidor do jogo e do grupo de contêineres por instância.

Para recuperar informações da rede de contêineres, envie uma GET solicitação HTTP para esse endpoint. O exemplo a seguir usa curl:

curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"

O servidor de descoberta retorna uma matriz JSON com uma entrada para cada contêiner em execução na instância:

[ { "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 taxa de solicitação

O servidor de descoberta limita cada contêiner na instância a 10 solicitações por segundo. Ele acelera as solicitações que excedem esse limite e retorna um erro. Para permanecer dentro desse limite, consulte o servidor de descoberta uma vez na inicialização. Como alternativa, consulte-a somente quando precisar atualizar sua visualização da instância. Armazene os resultados em seu contêiner e reutilize os valores em cache em vez de consultar o servidor de descoberta de forma recorrente.

Atualize periodicamente seu cache para mantê-lo atualizado. O endereço IP local de um contêiner pode mudar se o contêiner travar ou sair (por exemplo, quando a sessão do jogo terminar).

Exemplo: coleta de métricas de contêineres de servidores de jogos

Um uso comum do servidor de descoberta é enviar telemetria entre contêineres na mesma instância sem sair da rede local da instância. Considere uma frota que executa vários contêineres de servidor de jogos (GAME_SERVER) e um único contêiner por instância (PER_INSTANCE). O contêiner por instância executa um coletor de métricas que todos os servidores de jogos na instância compartilham.

Você pode implementar a coleta de métricas com um modelo push ou um modelo pull:

  • Push (emissão de métricas) — Na inicialização, cada contêiner do servidor de jogo é chamadoListContainersNetworkInfo(). O contêiner encontra a entrada com o tipo de grupo de PER_INSTANCE contêineres. Em seguida, ele lê o endereço IP local dessa entrada. O servidor do jogo envia suas métricas diretamente para o coletor por instância pela rede local da instância.

  • Pull (coleta de métricas) — A abordagem inversa também funciona. O contêiner por instância não usa o SDK do servidor, então ele chama o endpoint do servidor de descoberta diretamente. Ele encontra os endereços IP de todos os GAME_SERVER contêineres na instância. Em seguida, ele extrai um endpoint de métricas que cada contêiner do servidor de jogos expõe na rede local.

Em ambos os casos, a comunicação permanece na rede local da instância. Cada contêiner consulta o servidor de descoberta apenas ocasionalmente, e não de forma recorrente.