Práticas recomendadas de teste de carga

Nesta página, apresentamos as práticas recomendadas para teste de carga do serviço do Cloud Run para determinar se ele é escalonado durante o uso em produção e encontrar gargalos que impeçam o escalonamento.

Testes anteriores ao teste de carga

Identifique e resolva problemas de simultaneidade em um pequeno ambiente de teste ou desenvolvimento antes de continuar o teste de carga. Meça a simultaneidade do contêiner antes de executar um teste de carga e verifique se o serviço do Cloud Run é iniciado de maneira confiável.

Concentre os testes de contêiner em pequenas contagens incrementais em execuções escalonadas manualmente. É possível aproximar o escalonamento manual no Cloud Run ao definir o máximo de instâncias como o valor até o qual você quer escalonar.

Se você criou ou alterou a imagem do contêiner recentemente, teste isso de maneira independente antes de executar um teste de carga.

Verifique também outros tipos de problemas de desempenho, como latência excessiva e uso de CPU, antes de executar um teste de carga em grande escala.

Usar max instances de forma adequada

O Cloud Run aplica o máximo de instâncias para limitar o escalonamento de um serviço. O número máximo padrão de instâncias é 100. Se você acha que o teste de carga pode exceder esse padrão, trabalhe com a equipe de conta do Google e defina um novo valor máximo. Se você ainda não tiver um relacionamento com uma equipe de conta, entre em contato com a equipe de vendas do Google Cloud.

O número máximo de instâncias que pode ser selecionado depende dos limites de CPU e limites de memória, bem como da região de implantação.

Esses limites são gerenciados por um limite de cota e podem aumentar mediante uma solicitação de aumento de limite de cota.

Teste de carga na região us-central1

A região us-central1 do Google Cloud oferece um limite de cota alto, portanto, o Google recomenda o teste de carga em us-central1. Trabalhe com sua equipe de conta e envie um caso de suporte com detalhes sobre o horário e a escala do teste, se você espera se aproximar dos limites de cota.

Testar o uso apropriado da CPU e o perfil de inicialização do serviço

Em um cenário ideal, você implanta uma versão de teste do serviço no Cloud Run e a carrega de forma direta. No entanto, em alguns casos, pode não ser possível implantar uma versão de teste do serviço. Por exemplo, o serviço do Cloud Run pode fazer parte de um ecossistema complexo que é difícil de replicar em um ambiente de teste.

Nesses casos, é possível aproximar o desempenho do serviço simulando-o com um serviço mais simples que tem uso de CPU e tempos de inicialização comparáveis. O tempo de inicialização é particularmente importante para escalonamento rápido. Lembre-se de que testar com algo muito simples também é problemático. Por exemplo, evite testar com um serviço hello world simples que retorna solicitações recebidas sem qualquer processamento.

Usar um arcabouço de testes para gerar cargas

É possível gerar cargas de teste através de um pico de tráfego controlado usando um arcabouço de testes, como o JMeter. É possível usar os grupos de linhas de execução do JMeter e o atraso entre as solicitações de teste do JMeter para aumentar a carga.

Também é possível enviar solicitações HTTP simples ou gravar uma sessão do navegador com o JMeter. O Cloud Run permite testar o serviço sem acesso à internet, pela autenticação do desenvolvedor. Isso permite o acesso por um arcabouço de testes, como o JMeter, em execução em uma máquina virtual do Compute Engine conectada a uma nuvem privada virtual associada ao projeto.

Não gere carga de ferramentas em que a taxa e a simultaneidade não podem ser controladas. O Pub/Sub é uma opção ruim de ferramenta para gerar carga, porque não é possível controlar a taxa de tráfego e o número de clientes. Se você não souber a taxa e a simultaneidade, não saberá o que está testando.

Usar a análise de registro detalhada através de registros exportados

Você precisa de uma análise segundo-a-segundo dos eventos para entender a resposta do serviço do Cloud Run aos picos de tráfego rápidos. A análise de registro é necessária para isso, porque a granularidade dos dados de monitoramento não é detalhada de forma suficiente. A análise de registros também permite investigar os motivos das solicitações com alta latência.

Ao gravar registros, é possível melhorar o desempenho de geração de registros pela gravação direta em stdout em vez de usar uma biblioteca de cliente do Cloud Logging.

Para configurar uma exportação de registros antes de iniciar o teste, crie um coletor de registros com o BigQuery de destino e um filtro de inclusão, como:

resource.type="cloud_run_revision"
resource.labels.service_name="[your app]"

Evitar inicializações a frio falsas

Para minimizar as inicializações a frio vivenciadas pelos usuários, defina o número mínimo de instâncias como pelo menos 1.

Garantir que o serviço seja escalonado de maneira linear

Repita o teste em diferentes cargas para garantir que o serviço do Cloud Run seja escalonado de maneira linear com a carga e não atinja um gargalo limitante com uma carga menor do que a esperada na produção.

Analisar e visualizar os resultados no Colab

Use os gráficos de monitoramento de resumo para entender melhor os resultados e complementar a análise de registro detalhada usando os registros exportados.

Os gráficos de monitoramento ajudam você a descobrir:

  • Com que rapidez, até o segundo mais próximo, novas instâncias são criadas e inicializadas?
  • As solicitações são distribuídas de maneira uniforme entre diferentes instâncias?
  • Com que rapidez a latência em diferentes percentis pode ser reduzida a um valor de estado estável?

É possível usar a interface do usuário do console do Google Cloud para o BigQuery para analisar o esquema de registro exportado e visualizar os resultados. Execute as consultas e indique os resultados usando o Colab, que tem integração pronta com o BigQuery, o Pandas e o Matplotlab. O Colab também se integra facilmente a ferramentas de visualização de dados avançados, como o Seaborn.

Encontrar gargalos

Os testes de carga podem ajudar você a descobrir um código ineficiente e gargalos de escalonamento. Códigos ineficientes geram custos maiores porque precisam lidar com mais tráfego, mas não impedem necessariamente o escalonamento. Por exemplo, uma dependência de uma conversão de banco de dados com bloqueio no nível da tabela pode ser um gargalo que impedirá o escalonamento do serviço do Cloud Run, porque apenas uma transação pode ser executada por vez.

Verificar o desempenho conforme a experiência do cliente

Consulte os registros de consulta capturados pelo JMeter, que incluem latências medidas no cliente. No entanto, como as ferramentas de teste de servidor, como JMeter, não são iguais a navegadores ou cliente móvel, é possível executar um teste com um framework baseado em navegador, como o Selenium Webdriver, ou um framework de teste de cliente móvel. Cuidado com o excesso de latências máximas causadas pela inicialização da conexão TLS que podem distorcer os resultados com outliers.

Resumo das práticas recomendadas

Execute um teste de carga para determinar se a migração para o Cloud Run é a escolha correta e se o serviço pode ser escalonado para o tráfego máximo esperado. Execute o teste com um arcabouço como o JMeter. Exporte os registros para o BigQuery para análise detalhada.

A seguir