O blog da AWS

Teste de carga na engine de backend de jogo Pragma para 1 milhão de usuários simultâneos na AWS

Esta postagem foi escrita por Deepansha Tiwari, arquiteta de soluções, Games. Adaptada para o português por Marcos Paulo Hauer, consultor DevOps.

Neste blog, abordaremos a importância do teste de carga na engine de backend de jogo e como a Pragma, parceira da AWS for Games, testou com sucesso a carga de um milhão de usuários simultâneos (concurrent users – CCU) em sua plataforma gerenciada de engine de backend de jogos que é executada na AWS.

Criar uma jogabilidade suave é apenas uma parte da equação de criação do jogo. Cada jogo tem uma complexa rede de elementos que desempenham um papel importante na entrega de uma experiência perfeita para o jogador. Todos os jogos, especialmente online e multijogador, exigem uma engine de backend de jogo robusto e eficiente para ajudar a oferecer a experiência que os jogadores esperam. Engines de backend bem projetadas são dimensionadas para acomodar a crescente base de jogadores.

Como uma engine de backend de jogo gerenciado trabalha para você

Imagine que você está criando uma aventura épica ou uma experiência multijogador e quer concentrar sua energia criativa no design da jogabilidade, dos personagens e do enredo. É aí que um conceito revolucionário pode simplificar significativamente os aspectos técnicos de dar vida ao seu jogo: uma solução gerenciada de engine de backend. Os fornecedores de soluções gerenciadas de engine de backend de jogo são parceiros confiáveis que cuidam das complexidades técnicas de infraestrutura de servidor, gerenciamento de jogadores, economia do jogo, e suporte multijogador. Eles simplificam o processo de desenvolvimento e garantem escalabilidade, segurança e confiabilidade para seu jogo.

É importante garantir que uma engine de backend de jogo possa suportar o maior tráfego e demanda dos jogadores. É aqui que o teste de carga entra em ação. O teste de carga simula tráfego intenso de jogadores e imita cenários de pico de uso. Ele ajuda os desenvolvedores a identificar e corrigir gargalos de desempenho, falhas ou problemas de latência antes que eles afetem a experiência do jogador. E aproveitar os serviços em nuvem para configurar um ambiente de teste de carga é uma abordagem econômica. A flexibilidade da AWS, combinada com várias opções de implantação, como API/CLI, infraestrutura como código e alcance global, permite que os desenvolvedores configurem e eliminem recursos facilmente quando os testes são feitos.

As soluções de engine de backend de jogo permitem que os desenvolvedores de jogos economizem tempo e dinheiro enquanto criam jogos confiáveis e envolventes. Essas soluções beneficiam especialmente aqueles que estão apenas começando o desenvolvimento de jogos, pois fornecem o suporte técnico e a infraestrutura necessários para dar vida às suas visões de jogos. Isso acelera os cronogramas de desenvolvimento e reduz os custos iniciais de infraestrutura, poupando os estúdios da tarefa intensiva de criar e manter a sua própria engine de backend.

Engine de backend Pragma

Pragma é uma engine de backend de jogo financiada por capital de risco, fundada pelos líderes de engenharia que construíram as plataformas para alguns dos maiores jogos de serviço ao vivo, incluindo League of Legends, Fortnite, Destiny 2 e Plants vs Zombies 2. Pragma fornece serviços como contas, criação de partidas e dados de jogadores para os serviços de jogos ao vivo mais ambiciosos do mundo. A oferta baseada em engine Pragma oferece aos estúdios controle total, personalização e a confiança de que eles podem implementar qualquer recurso que desejarem.

A engine Pragma funciona em dois modos. Ambos compartilham os mesmos recursos da engine em termos de métricas, operabilidade, autenticação e autorização, e atendimento a chamadas. Os dois modos são:

  • A engine de backend social fornece contas e serviços sociais.
  • A engine de backend de jogo fornece o loop do jogo, os dados do jogador e os serviços relacionados.

Ambiente de teste de carga Pragma

O ambiente de teste de carga foi configurado com base na CCU definida de um milhão de jogadores. Os principais componentes do ambiente de teste foram:

  • Clientes de teste de carga com configurações e lógica personalizadas foram implantados no Amazon Elastic Compute Cloud (EC2). Os clientes de teste de carga foram responsáveis por simular o tráfego que representava o comportamento e as interações sintéticas dos jogadores.
  • O Amazon Application Load Balancer (ALB) foi usado para distribuir a carga recebida dos clientes para os gateways de jogos e redes sociais.
  • Nós de entrada Game e Social foram implantados separadamente em instâncias do EC2. Ambos nós eram responsáveis por rotear as solicitações dos jogadores para os serviços da engine de backend específicos.
  • A engine Pragma, contendo os serviços da engine de backend, foi executada em várias instâncias do EC2.
  • Amazon Managed Grafana para visualizar nossas métricas de teste de carga.

O teste de carga foi conduzido usando duas estratégias: primeiro, testar o estresse de cada componente e serviço individualmente para identificar gargalos e problemas, seguido por correções específicas com base nas descobertas. A segunda estratégia envolveu a remoção dos aceleradores e o aumento gradual da carga para avaliar o sistema como um todo. Essencialmente, uma abordagem se concentrava em isolar problemas em serviços individuais, enquanto a outra fornecia uma avaliação holística do desempenho de todo o sistema.

A abordagem foi metódica, começando com uma configuração menor que implantou a plataforma em um único nó. Progredindo, evoluiu para uma implantação de vários nós, distribuindo estrategicamente serviços como criação de partidas, contas, inventário e muito mais, em várias instâncias para gerenciar a carga esperada para cada serviço de forma eficaz.

A carga de tráfego de entrada nos nós foi distribuída usando o ALB. O balanceador verificou as solicitações do cliente e as encaminhou para os nós social e jogo. Separadamente, as instâncias MySQL do Amazon Relational Database Service (RDS) foram configuradas para nós sociais e de jogos. O pool de conexões gerenciou com eficiência as conexões de aplicativos, reduzindo a sobrecarga de criar e lidar com conexões simultâneas.

As métricas foram coletadas por meio de um coletor OpenTelemetry (OTel) personalizado e visualizadas no Managed Grafana. A coleta de dados e métricas do sistema proporcionou visibilidade em tempo real de seu desempenho. Isso ajudou a avaliar as restrições de recursos na plataforma e nas instâncias de serviço. Consequentemente, os desenvolvedores conseguiram tomar decisões baseadas em dados, promovendo otimizações efetivas e melhorias de desempenho. A AWS também oferece uma distribuição do projeto OpenTelemetry, conhecida como AWS Distro for OpenTelemetry (ADOT), que pode ser usada para coletar dados e métricas de seus aplicativos.

Embora essa arquitetura de teste de carga tenha se mostrado eficaz para Pragma, é crucial reconhecer que o que funcionou para eles pode não ser uma solução única para todos. Cada sistema é único, com seu próprio conjunto de complexidades e vários tipos de usuários. Portanto, para testar a carga do sistema com sucesso, é importante entender os principais componentes do sistema e planejar como você simulará o comportamento do usuário.

“Ao considerar infraestrutura para nossas engines de backend de jogo Pragma, sabíamos que queríamos nos concentrar na robustez, previsibilidade, velocidade de solução e facilidade de configuração. Por esses motivos, parecia natural usar a AWS. Durante nosso teste de carga, EC2, RDS, ALB e Managed Grafana foram todos serviços essenciais”, diz Nik Palmer, gerente técnico de produtos Pragma. “A utilização desses serviços eliminou o atrito, o que significa que poderíamos nos concentrar apenas em escalar Pragma de mil para um milhão de CCU simuladas, de um único nó para uma topologia de 34 instâncias EC2 com vários nós.”

Planejamento para testes de carga

Você pode planejar um teste de carga eficaz definindo objetivos claros, entendendo o comportamento do usuário, identificando cenários críticos e definindo métricas de desempenho com limites aceitáveis. Isso ajudará você a escolher as ferramentas certas e a configuração correta para obter as medidas corretas. Para simular o comportamento do jogador, crie cenários realistas de teste de carga, prepare dados de teste e configure seu ambiente para imitar o ambiente de produção.

Pronto para mergulhar nos testes de carga na AWS? Confira este guia prescritivo. Isso ajudará a explorar diferentes métodos, descobrir questões-chave e entender o impacto para evitar possíveis armadilhas. Além disso, descubra as políticas de teste da AWS, várias ferramentas e sua aplicabilidade por meio do guia.

Conclusão

No mundo dos jogos em constante evolução, onde as expectativas dos jogadores estão mais altas do que nunca, a importância de testar adequadamente uma engine de backend de jogo não pode ser subestimada. Conforme exploramos ao longo deste artigo, o teste de carga é a rede de segurança que garante que, quando o jogo estiver em seu momento de maior atividade, a engine de backend permaneça robusta e responsiva, aumentando a satisfação do jogador e o sucesso geral do jogo. Ao entender por que o teste de carga é importante, por que você deve fazer isso, e como fazê-lo, você não está apenas se preparando para o lançamento, você está estabelecendo uma base resiliente para seu jogo.

Este blog foi traduzido para o Português, e o conteúdo original pode ser acessado aqui.