한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L13 Arquitetura e operação de servidores

Tráfego via gateway ou proxy Gateway / proxy hop

ID da causa in-gateway · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura), Desenvolvimento do cliente (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

Quando há um servidor intermediário entre o cliente e o servidor do jogo, cada passagem por ele soma tempo de processamento, e esse servidor vira um ponto único de falha.

Por quê Arquitetura cliente ↔ gateway ↔ servidor do jogo → Efeito Processamento e espera extras no servidor intermediário, e a sobrecarga dele afeta todos → Na tela Ping mais alto para todos e, se o gateway cair, desconexão de todos os jogadores que passam por ele

Sintomas
Input lag, Desconexão
Fatores
Latência, Paralisação
Quem é afetado
Servidor inteiro
Quando
Quando junta muita gente, Sempre
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura), Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Servidor: permitir aumentar o número de gateways, fazer o personagem continuar de onde estava ao reconectar por outro gateway quando um cair (reconexão de sessão). Cliente: reconectar automaticamente quando o gateway cair.
O que fazer (Equipe de infraestrutura)
Escalar os gateways horizontalmente (adicionar máquinas), monitorar CPU, número de conexões e latência de processamento de cada gateway.
Números de referência
Dentro do mesmo data center, cada passagem normalmente leva menos de 1 ms. Com o gateway sobrecarregado, sobe para dezenas ou centenas de ms.
No gráfico
Sobe com a carga · Latência de processamento do gateway, CPU e conexões do gateway
Onde olhar
CPU e número de conexões do gateway, Recv-Q dos sockets do gateway (ss, netstat) e diferença de latência antes e depois do gateway. Em chamadas HTTP ou gRPC que passam pela service mesh, comparar a métrica padrão do Istio istio_request_duration_milliseconds separando quem envia (reporter=source) e quem recebe (reporter=destination)
Confirma se
O tempo de processamento do servidor do jogo não muda, só a latência no trecho do gateway sobe, e nesse momento a CPU do gateway satura ou o Recv-Q acumula
Descarta se
Rotas que não passam pelo gateway (conexão direta, outro gateway) igualmente lentas: aponta para a conexão ou para o servidor do jogo
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
Com uma service mesh (Istio, por exemplo), o proxy sidecar (Envoy) que fica ao lado de cada servidor acrescenta mais uma etapa. As requisições entre serviços passam pelo sidecar de quem envia e depois pelo sidecar de quem recebe, e quanto mais funções o proxy ganha, como coleta de logs e métricas, mais crescem o tempo de processamento e o tempo de espera.
Casos reais
Riot Games 2020: Sobrecarga de hosts de borda nos servidores do League of Legends na Europa e no Brasil

Fontes

  1. The Unique Architecture behind Amazon Games’ Seamless MMO New World AWS
    No New World, o cliente se conecta a um de 4 servidores de entrada (REP) com endereço público e se comunica com os servidores de simulação (hubs) que ficam atrás deles
  2. Designs, Lessons and Advice from Building Large Distributed Systems Google
    Keynote do LADIS 2009 (Jeff Dean). Ida e volta dentro do mesmo data center: cerca de 0,5 ms
  3. Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
    Quando a fila cresce por sobrecarga, a espera chega a várias vezes o tempo de processamento (com processamento de 100 ms e fila de 10 vezes o número de threads, 1,1 s)
  4. Performance and Scalability Istio
    No modo sidecar, a requisição passa pelo proxy sidecar de quem envia e depois pelo de quem recebe; quanto mais funções, mais longo o caminho de processamento dentro do proxy, e a coleta de telemetria aumenta a espera da requisição seguinte
  5. What is Envoy Envoy
    O Envoy é um processo separado que roda ao lado de cada servidor de aplicação, e o app envia e recebe tudo pelo Envoy em localhost
  6. Istio Standard Metrics Istio
    istio_request_duration_milliseconds (distribuição do tempo de processamento de requisições HTTP e gRPC); o label reporter distingue o proxy de quem envia (source) e o de quem recebe (destination)
  7. netstat(8) — Linux manual page net-tools
    Recv-Q: número de bytes em um socket conectado que o programa do usuário ainda não leu

Veja também

Mesma camada: L13 Arquitetura e operação de servidores

Mesmo sintoma (Input lag) em outras camadas

Ver o card interativo, com figuras e simulações