Projete uma frota de GameLift contêineres da Amazon - Amazon GameLift

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á.

Projete uma frota de GameLift contêineres da Amazon

Esta documentação é para um recurso que está em versão prévia pública. Está sujeita a alteração.

Esses tópicos apresentam as principais decisões que você tomará ao configurar uma frota de GameLift contêineres da Amazon. Suas decisões afetam a forma como você define as configurações para contêineres, grupos de contêineres e frotas.

Arquitete sua estrutura de contêineres de frota

Como primeira etapa, identifique o software e os recursos necessários para hospedar seu servidor de jogos, incluindo o seguinte:

  • Seu aplicativo de servidor de jogos. O aplicativo deve ser integrado à GameLift funcionalidade de hospedagem da Amazon, incluindo o SDK do servidor versão 5+. Consulte Integre seu jogo com a Amazon GameLift.

  • O GameLift agente da Amazon. Esse agente no computador mantém a comunicação com o GameLift serviço da Amazon e gerencia o ciclo de vida de todos os processos do servidor de jogos. Para obter mais detalhes, consulte Servidores de jogos e o Amazon GameLift Agent.

  • Software e recursos adicionais conforme necessário. Isso pode incluir o software necessário para executar seus aplicativos de servidor de jogos. O software de suporte comum é usado para registro e monitoramento, segurança, entrega de conteúdo e sincronização de dados.

Em seguida, decida como estruturar seu software e recursos para uma frota de GameLift contêineres da Amazon. A Amazon GameLift usa grupos de contêineres para organizar contêineres. Uma frota sempre tem um grupo de contêineres de réplica e, opcionalmente, pode ter uma frota de contêineres daemon. Para obter mais detalhes, consulte componentes da frota de contêineres.

  • Comece projetando seu grupo de contêineres de réplicas. Considere as seguintes diretrizes:

    • Junte seu aplicativo de servidor de jogos e o Amazon GameLift Agent no mesmo contêiner. Faça desse contêiner o único contêiner essencial do grupo de réplicas.

    • Organize todos os outros softwares do seu servidor de jogos em contêineres. Você pode optar por colocar tudo em um único contêiner no grupo de réplicas. Ou você pode optar por criar um ou mais contêineres auxiliares. Alguns motivos para usar sidecars incluem:

      • Para configurar uma sequência de inicialização/desligamento para software individual. Você pode conseguir isso colocando o software em contêineres separados e configurando dependências entre eles.

      • Para definir limites específicos do contêiner para o uso da memória e da CPU.

      • Para especificar diferentes configurações de contêiner para cada contêiner, como comando de inicialização, ponto de entrada, diretório de trabalho, variáveis de ambiente ou verificações de integridade.

  • Decida se você precisa de um grupo de contêineres daemon para sua frota. Considere o seguinte:

    • Os contêineres Daemon são normalmente usados para executar processos em segundo plano ou de monitoramento.

    • Os contêineres em um grupo de daemons não são replicados em uma instância de frota. Isso significa que os contêineres em um grupo de daemons não escalam junto com o grupo de contêineres de réplica.

    • Um grupo de daemons pode ter vários contêineres. Você pode designar qualquer contêiner em um grupo de daemons como essencial.

Defina limites de recursos

Para cada grupo de contêineres, determine quanta memória e CPU o grupo precisa para executar seu software. A Amazon GameLift se baseia nessas informações para gerenciar recursos para o grupo de contêineres. Ele também usa essas informações para calcular quantos grupos de contêineres de réplicas uma imagem da frota pode conter. Você também pode definir limites para contêineres individuais.

Defina limites opcionais para contêineres

Definir limites de recursos específicos para contêineres permite que você exerça maior controle sobre como os contêineres individuais podem usar os recursos do grupo. Se você não definir limites específicos para contêineres, todos os contêineres do grupo compartilharão os recursos do grupo. O compartilhamento oferece maior flexibilidade para usar os recursos onde eles são necessários. Também aumenta o potencial de os processos competirem entre si e resultarem em falhas no contêiner.

Defina qualquer uma das ContainerDefinition propriedades a seguir para qualquer contêiner.

  • SoftLimit(memória) — Reserve uma quantidade mínima de memória para uso exclusivo do contêiner. O contêiner sempre tem o valor reservado disponível. Ele pode exceder esse mínimo a qualquer momento, se houver recursos adicionais disponíveis.

  • HardLimit(memória) — Defina um limite máximo de memória para o contêiner. Se o contêiner exceder esse limite, isso resultará em uma reinicialização.

  • Cpulimite — Reserve uma quantidade mínima de recursos de CPU para uso exclusivo do contêiner. O contêiner sempre tem o valor reservado disponível. Ele pode exceder esse mínimo a qualquer momento, se houver recursos adicionais disponíveis. (1024 unidades de CPU equivalem a 1 vCPU.)

Definir limites totais de recursos para um grupo de contêineres

Diga à Amazon a GameLift quantidade de recursos de memória e CPU que cada grupo de contêineres precisa. O objetivo é alocar recursos suficientes para otimizar o desempenho do servidor de jogos. A Amazon GameLift usa esses limites para calcular como empacotar grupos de contêineres de réplicas em uma instância de frota. Você também os usará ao escolher um tipo de instância para uma frota de contêineres.

Calcule a memória total e a CPU necessárias para todos os processos em cada contêiner em um grupo. Considere o seguinte:

  • Quais processos são executados em todos os contêineres do grupo de contêineres? Some os recursos necessários para esses processos.

  • Quantos processos simultâneos de servidor de jogos você planeja executar em cada grupo de contêineres? Você define esse valor como parte da configuração de tempo de execução de uma frota, mas precisa planejar memória suficiente para eles aqui (consulte Otimizar sua configuração de tempo de execução).

Com base em sua estimativa dos requisitos do grupo de contêineres, defina as seguintes ContainerGroupDefinition propriedades:

  • TotalMemoryLimit— Defina um limite máximo de memória para o grupo de contêineres. Todos os contêineres do grupo compartilham a memória alocada. Se você definir limites de contêineres individuais, o limite total de memória deverá ser:

    • igual ou maior que a soma de todos os limites de memória flexível do contêiner

    • igual ou maior que o limite máximo de memória rígida para um contêiner no grupo

  • TotalCpuLimit — Defina um limite máximo de CPU para o grupo de contêineres. Todos os contêineres do grupo compartilham os recursos de CPU alocados. Se você definir limites de contêineres individuais, o limite total de CPU deverá ser:

    • igual ou maior que a soma de todos os limites de CPU do contêiner. Como prática recomendada, considere definir esse valor para dobrar a soma dos limites de CPU do contêiner.

Exemplo de cenário

Digamos que estamos definindo um grupo de contêineres de réplica com os três contêineres a seguir:

  • O contêiner A é nosso contêiner de réplica essencial. Ele executa processos do servidor de jogos e o Amazon GameLift Agent. Estimamos os requisitos de recursos para um servidor de jogos em 512 MiB e 1024 de CPU. Planejamos que o contêiner execute 10 processos do servidor. Como esse contêiner executa nosso software mais importante, definimos uma reserva de memória temporária de 6144 MiB e nenhum limite de memória rígida ou limite de reserva de CPU.

  • O contêiner B executa software de suporte com requisitos de recursos estimados em 1024 MiB e 1536 de CPU. Definimos um limite de reserva de memória flexível de 1024 MiB, um limite de memória rígida de 2048 MiB e um limite de reserva de CPU de 1024 CPUs.

  • O contêiner C executa registros não críticos e outros utilitários de monitoramento. Definimos um limite de memória rígida de 512 MiB e um limite de reserva de CPU de 512 CPUs.

Usando essas informações, definimos os seguintes limites totais para o grupo de contêineres:

  • Limite total de memória: 7680 MiB. Esse valor excede (1) a soma dos limites de memória flexível (6144+1024 MiB) e (2) o limite máximo de memória rígida (1024 MiB).

  • Limite total de CPU: 13312 CPU. Esse valor excede a soma do limite de CPU (1024+512 CPU).

Designe recipientes essenciais

Para cada recipiente, designe o recipiente como essencial ou não essencial. Todos os grupos de contêineres devem ter pelo menos um contêiner essencial. O contêiner essencial faz o trabalho crítico do grupo de contêineres, como hospedar seus servidores de jogos. Espera-se que o contêiner essencial esteja sempre funcionando. Se falhar, todo o grupo de contêineres será reiniciado.

  • O grupo de réplicas de contêineres da sua frota pode ter exatamente um contêiner essencial. Esse contêiner executa o Amazon GameLift Agent e os processos do servidor de jogos que ele gerencia.

  • Se sua frota tiver um grupo de contêineres daemon, você poderá designar vários contêineres essenciais. Torne um contêiner daemon essencial se você quiser que uma falha no contêiner solicite a reinicialização do grupo de contêineres.

Defina Essential a ContainerDefinition propriedade como verdadeira ou falsa para cada contêiner.

Configurar conexões de rede

Você pode estabelecer acesso à rede para permitir que o tráfego externo se conecte a qualquer contêiner em uma frota de contêineres. Por exemplo, você deve estabelecer conexões de rede com o contêiner que executa os processos do servidor de jogos, para que os clientes do jogo possam entrar e jogar seu jogo. Clientes de jogos se conectam aos servidores de jogos usando portas e endereços IP.

Em uma frota de contêineres, a conexão entre cliente e servidor não é direta. Internamente, um processo em um contêiner escuta em uma porta de contêiner. Externamente, o tráfego de entrada se conecta a uma instância de frota usando uma porta de conexão. A Amazon GameLift mantém os mapeamentos entre as portas internas do contêiner e as portas de conexão externas, para que o tráfego de entrada seja roteado para o processo correto na instância.

GameLift A Amazon fornece uma camada extra de controle para suas conexões de rede. Cada frota de contêineres tem uma configuração de permissões de entrada, que permite controlar o acesso a cada porta de conexão externa. Você não pode alterar as configurações de porta de uma frota existente, mas pode permitir ou restringir o acesso conforme necessário ajustando as permissões de entrada. Por exemplo, você pode remover as permissões de todas as portas de conexão para desligar todo o acesso aos contêineres da frota.

As portas de rede permitem que o tráfego externo se conecte aos processos que estão sendo executados em uma frota de contêineres. As permissões de entrada do EC2 permitem que o tráfego acesse as portas de conexão, que são abertas em cada instância da frota. As portas de conexão são mapeadas internamente para portas de contêiner, que são atribuídas a processos individuais.
Definir intervalos de portas de contêineres

Configure uma definição de contêiner com portas de contêiner suficientes para qualquer processo que precise de acesso externo. Alguns contêineres não precisarão de portas. Outros devem ter portas suficientes para atribuir uma a cada processo que precise de uma.

Seu grupo essencial de contêineres de réplicas, que executa seus servidores de jogos, precisa de uma porta para cada processo de servidor de jogos em execução simultânea (conforme configurado na frota). RuntimeConfiguration O processo do servidor do jogo escuta a porta atribuída e a reporta à Amazon GameLift.

Ao criar uma definição de grupo de contêineres, defina um intervalo de portas de contêiner para cada contêiner que precisa de acesso à rede (consulte ContainerDefinitionInput: PortConfiguration). Certifique-se de que o intervalo seja grande o suficiente para atribuir uma porta a cada processo que precise de uma. Os processos devem ter números de porta atribuídos na configuração da porta do contêiner.

Definir intervalos de portas de conexão

Configure sua frota de contêineres com um conjunto de portas de conexão. As portas de conexão fornecem acesso externo às instâncias da frota que estão executando seus contêineres. A Amazon GameLift atribui portas de conexão e as mapeia para portas de contêineres conforme necessário.

Ao criar uma frota de contêineres, defina um intervalo de portas de conexão (consulte ContainerGroupsConfiguration: ConnectionPortRange). Certifique-se de que o intervalo tenha portas suficientes para mapear para cada porta de contêiner em uma instância de frota. Para calcular as portas de conexão mínimas necessárias, use a seguinte fórmula:

[Total number of container ports defined for containers in the replica container group] * [Number of replica container groups per instance] + [Total number of container ports defined for containers in the daemon container group]

Como prática recomendada, dobre o número mínimo de portas de conexão.

nota

O número de portas de conexão pode potencialmente limitar o número de grupos de contêineres de réplicas por instância. Se uma frota tiver apenas portas de conexão suficientes para um grupo de contêineres de réplica por instância, a Amazon GameLift implantará somente um grupo de contêineres de réplica, mesmo que as instâncias tenham capacidade computacional suficiente para vários grupos de contêineres de réplica.

Defina permissões de entrada

As permissões de entrada controlam o acesso externo a uma frota de contêineres especificando quais portas de conexão devem ser abertas para o tráfego de entrada. Você pode usar essa configuração para ativar e desativar o acesso à rede de uma frota conforme necessário.

Ao criar uma frota de contêineres, defina um conjunto de permissões de entrada ( CreateFleetconsulte:EC2). InboundPermissions Defina as propriedades da porta de permissão de entrada para incluir alguns ou todos os valores nas configurações da porta de conexão da frota. Para alterar as permissões de entrada em uma frota de contêineres existente, ligue UpdateFleetPortSettings.

Exemplo de cenário

Este exemplo ilustra como definir todas as três propriedades de conexão de rede.

  • O grupo de contêineres de réplicas da nossa frota tem 1 contêiner, que executa os processos do servidor do jogo. A confirmação do tempo de execução diz ao contêiner que execute 10 processos simultâneos do servidor de jogos.

    Na definição do grupo de contêineres de réplica, definimos o PortConfiguration parâmetro para esse contêiner da seguinte forma:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 10, "ToPort": 20, "Protocol": "TCP"} ] }
  • Nossa frota também tem um grupo de contêineres daemon com 1 contêiner. Ele tem 1 processo que precisa de acesso à rede. Na definição do grupo de contêineres daemon, definimos o PortConfiguration parâmetro para esse contêiner da seguinte forma:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 25, "ToPort": 25, "Protocol": "TCP"} ] }
  • Nossa frota é configurada com 3 grupos de contêineres de réplicas por instância da frota. Com essas informações, podemos usar a fórmula para calcular o número de portas de conexão necessárias:

    • Mínimo: 31 portas [10 portas de contêiner de réplica * 3 grupos de contêineres de réplica por instância + 1 porta de contêiner daemon]

    • Melhor prática: 62 portas [portas mínimas* 2]

    Ao criar a frota de contêineres, definimos o ConnectionPortRange parâmetro da ContainerGroupsConfiguration seguinte forma:

    "ConnectionPortRange": { "FromPort": 1010, "ToPort": 1071 }
  • Queremos permitir o acesso a todas as portas de conexão disponíveis. Ao criar a frota de contêineres, definimos o EC2InboundPermissions parâmetro da seguinte forma:

    "EC2InboundPermissions": [ {"FromPort": 1010, "ToPort": 1071, "IpRange": "10.24.34.0/23", "Protocol": "TCP"} ]

Configurar verificações de saúde para contêineres

Um contêiner é reiniciado automaticamente se ocorrer uma falha no terminal e parar de funcionar. Se o contêiner for essencial, todo o grupo de contêineres será reiniciado.

Você pode definir critérios personalizados adicionais para medir a integridade do contêiner e usar uma verificação de saúde para testar esses critérios. Para configurar uma verificação de integridade do contêiner, você pode defini-la em uma imagem de contêiner docker ou em sua definição de contêiner. Se você definir uma verificação de saúde na definição do contêiner, ela substituirá todas as configurações na imagem do contêiner.

Defina verificações de saúde opcionais com base no tipo de contêiner da seguinte forma:

  • Para um contêiner de réplica essencial, não configure verificações de saúde. O Amazon GameLift Agent gerencia automaticamente os relatórios de saúde desse contêiner.

  • Para contêineres de réplica não essenciais e qualquer contêiner daemon, você pode, opcionalmente, definir parâmetros de verificação de integridade.

Defina as seguintes ContainerDefinition propriedades para uma verificação de integridade do contêiner:

  • Command— Forneça um comando que verifique alguns aspectos da integridade do contêiner. Você decide quais critérios usar para medir a saúde. O comando deve resultar em um valor de saída de 1 (não íntegro) ou 0 (íntegro).

  • StartPeriod— Especifique um atraso inicial antes que as falhas na verificação de integridade comecem a ser contadas. Esse atraso dá ao contêiner tempo para inicializar seus processos.

  • Interval— Decida com que frequência executar o comando de verificação de integridade. Com que rapidez você deseja detectar e resolver uma falha no contêiner?

  • Timeout— Decida quanto tempo esperar pelo sucesso ou pela falha antes de tentar novamente o comando de verificação de integridade. Quanto tempo o comando de verificação de integridade deve levar para ser concluído?

  • Retries— Quantas vezes o comando de verificação de integridade deve ser repetido antes de registrar uma falha?

Definir dependências de contêineres

Em cada grupo de contêineres, você pode definir dependências entre contêineres com base no status do contêiner. Uma dependência afeta quando o contêiner dependente pode ser iniciado ou encerrado com base no status de outro contêiner.

Um caso de uso importante para dependências é criar sequências de inicialização e desligamento para o grupo de contêineres.

Por exemplo, você pode querer que o contêiner A comece primeiro e seja concluído com êxito antes do início dos contêineres B e C. Para conseguir isso, primeiro crie uma dependência para o contêiner B no contêiner A, com a condição de que o contêiner A seja concluído com êxito. Em seguida, crie uma dependência para o contêiner C no contêiner A com a mesma condição. As sequências de inicialização ocorrem na ordem inversa para o desligamento.

Configurar uma frota de contêineres

Ao criar uma frota de contêineres, considere os seguintes pontos de decisão. A maioria desses pontos depende da arquitetura e da configuração do contêiner.

Decida onde você deseja implantar sua frota

Em geral, você deseja implantar suas frotas geograficamente perto de seus jogadores para minimizar a latência. Você pode implantar sua frota de contêineres em qualquer plataforma Região da AWS que a Amazon GameLift ofereça suporte. Se você quiser implantar o mesmo servidor de jogo em outras localizações geográficas, você pode adicionar locais remotos à frota, incluindo Zonas Regiões da AWS Locais. Para uma frota com vários locais, você pode ajustar a capacidade de forma independente em cada localização da frota. Para obter mais informações sobre as localizações de frotas suportadas, consulteLocais GameLift de hospedagem da Amazon.

Escolha um tipo e tamanho de instância para sua frota

A Amazon GameLift oferece suporte a uma ampla variedade de tipos de instâncias do Amazon EC2, todas disponíveis para uso com uma frota de contêineres. A disponibilidade e o preço do tipo de instância variam de acordo com o local. Você pode ver uma lista dos tipos de instância compatíveis, filtrados por localização, no GameLift console da Amazon (em Recursos, Instância e cotas de serviços).

Ao escolher um tipo de instância, primeiro considere a família de instâncias. As famílias de instâncias oferecem várias combinações de recursos de CPU, memória, armazenamento e rede. Obtenha mais informações sobre famílias de instâncias do EC2. Em cada família, você tem uma variedade de tamanhos de instância para escolher. Considere os seguintes problemas ao selecionar um tamanho de instância:

  • Qual é o tamanho mínimo de instância que pode suportar sua carga de trabalho? Use essas informações para eliminar qualquer tipo de instância que seja muito pequeno.

  • Quais tamanhos de tipo de instância são adequados para sua arquitetura de contêiner? O ideal é escolher um tamanho que possa acomodar várias cópias do seu grupo de contêineres de réplica com o mínimo de espaço desperdiçado.

  • Qual granularidade de escalabilidade faz sentido para seu jogo? A capacidade da frota de escala envolve adicionar ou remover instâncias, e cada instância representa a capacidade de hospedar um número específico de sessões de jogo. Considere a capacidade que você deseja adicionar ou remover com cada instância. Se a demanda dos jogadores variar milhares de minuto a minuto, talvez faça sentido usar instâncias muito grandes que possam hospedar centenas ou milhares de sessões de jogo. Por outro lado, você pode preferir um controle de escalabilidade mais refinado com tipos de instância menores.

  • Há economia de custos disponível com base no tamanho? Você pode descobrir que o custo de certos tipos de instância varia de acordo com o local devido à disponibilidade.

Otimize sua configuração de tempo de execução

A configuração de tempo de execução de uma frota é um conjunto de instruções sobre como executar processos de servidor para hospedagem de sessões de jogos. Essas instruções são implementadas pelo GameLift agente da Amazon em cada grupo de contêineres de réplica na frota.

A configuração de tempo de execução de uma frota determina quantos processos de servidor são executados simultaneamente em cada grupo de contêineres de réplica. Essa configuração afeta a forma como você calcula os limites de recursos do seu grupo de contêineres e como escolhe um tipo de instância para sua frota. Você precisa equilibrar esses três elementos ao projetar sua frota.

Para obter mais informações sobre como usar as configurações de tempo de execução, consulteGerencie como o Amazon GameLift lança servidores de jogos.

Defina outras configurações opcionais da frota

Você pode usar os seguintes recursos opcionais ao configurar uma frota de contêineres:

  • Configure seus servidores de jogos para acessar outros AWS recursos. Consulte Comunique-se com outros recursos AWS de suas frotas.

  • Proteja as sessões de jogo com jogadores ativos de serem encerradas prematuramente durante um evento de redução de escala.

  • Limite o número de sessões de jogo que um indivíduo pode criar na frota em um período limitado de tempo.