Gerenciar o tráfego e a carga das suas cargas de trabalho no Google Cloud

Last reviewed 2023-11-13 UTC

Quando você executa uma pilha de aplicativos em recursos distribuídos na nuvem, o tráfego de rede precisa ser roteado de maneira eficiente para os recursos disponíveis em vários locais. Nesta parte do Guia de confiabilidade da infraestrutura do Google Cloud, descrevemos técnicas de gerenciamento de tráfego e carga que podem ser usadas para melhorar a confiabilidade das cargas de trabalho na nuvem.

Planejamento de capacidade

Para garantir que o aplicativo implantado no Google Cloud tenha recursos de infraestrutura adequados, você precisa estimar a capacidade necessária e gerenciar a capacidade implantada. Nesta seção, fornecemos diretrizes para ajudar você a planejar e gerenciar a capacidade.

Prever a carga do aplicativo

Ao prever a carga, considere fatores como o número de usuários e a taxa em que o aplicativo pode receber solicitações. Nas previsões, considere tendências históricas de carregamento, variações sazonais, picos de carga durante eventos especiais e crescimento impulsionado por mudanças nos negócios, como expansão para novas geografias.

Estimar requisitos de capacidade

Com base na arquitetura de implantação e nos objetivos de desempenho e confiabilidade do aplicativo, estime a quantidade de recursos do Google Cloud necessários para lidar com a carga esperada. Por exemplo, se você planeja usar grupos gerenciados de instâncias (MIGs) do Compute Engine, decida o tamanho de cada MIG, tipo de máquina de VM e o número, tipo e tamanho de discos permanentes. É possível usar a calculadora de preços do Google Cloud para estimar o custo dos recursos do Google Cloud.

Planejar uma redundância adequada

Ao estimar os requisitos de capacidade, forneça redundância adequada para cada componente da pilha do aplicativo. Por exemplo, para conseguir redundância N+1, cada componente na pilha do aplicativo precisa ter pelo menos um componente redundante que seja além do mínimo necessário para processar a carga da previsão.

Comparar o aplicativo

Execute testes de carga para determinar a eficiência dos recursos do aplicativo. A eficiência do recurso é a relação entre a carga no aplicativo e os recursos, como CPU e memória, que o aplicativo consome. A eficiência de recursos de um aplicativo pode se deteriorar quando a carga é excepcionalmente alta, e a eficiência pode mudar com o tempo. Realize os testes de carga para condições normais e de pico e repita os testes de comparação em intervalos regulares.

Gerenciar cotas

As cotas de serviço do Google Cloud são limites por projeto que ajudam a controlar o consumo de recursos da nuvem. As cotas são de dois tipos: cotas de recursos são os recursos máximos que você pode criar, como o número de clusters regionais do Google Kubernetes Engine (GKE) em uma região. As cotas de taxa limitam o número de solicitações de API que podem ser enviadas a um serviço em um período específico. As cotas podem ser zonais, regionais ou globais. Revise as cotas de recursos atuais e as cotas de taxa de API para os serviços que você planeja usar nos seus projetos. Verifique se as cotas são suficientes para a capacidade necessária. Quando necessário, é possível solicitar mais cotas.

Reservar capacidade computacional

Para garantir que a capacidade de recursos do Compute Engine esteja disponível quando necessário, crie reservas. Uma reserva oferece capacidade garantida em uma zona específica para um número específico de VMs de um tipo de máquina escolhido por você. Uma reserva pode ser específica para um projeto ou compartilhada entre vários projetos. Para mais informações sobre reservas, incluindo considerações sobre faturamento, consulte Reservas de recursos zonais do Compute Engine.

Monitorar a utilização e reavaliar os requisitos periodicamente

Depois de implantar os recursos necessários, monitore a utilização da capacidade. Talvez você encontre oportunidades para otimizar custos removendo recursos inativos. Reavalie periodicamente os requisitos de capacidade e considere qualquer mudança no comportamento do aplicativo, nos objetivos de desempenho e confiabilidade, na carga do usuário e no seu orçamento de TI.

Escalonamento automático

Quando você executa um aplicativo em recursos distribuídos em vários locais, ele continua disponível durante falhas temporárias em um local. Além disso, a redundância ajuda a garantir que os usuários tenham um comportamento consistente no aplicativo. Por exemplo, quando há um pico na carga, os recursos redundantes garantem que o aplicativo continue a ter um desempenho previsível. No entanto, quando a carga no aplicativo está baixa, a redundância pode resultar no uso ineficiente dos recursos da nuvem.

Por exemplo, o componente do carrinho de compras de um aplicativo de e-commerce pode precisar processar pagamentos para 99,9% dos pedidos dentro de 200 milissegundos após a confirmação do pedido. Para atender a esse requisito durante períodos de alta carga, provisione capacidades de computação e armazenamento redundantes. No entanto, quando a carga no aplicativo estiver baixa, parte da capacidade provisionada poderá permanecer não utilizada ou subutilizada. Para remover os recursos não utilizados, é necessário monitorar a utilização e ajustar a capacidade. O escalonamento automático ajuda a gerenciar a capacidade da nuvem e a manter o nível necessário de disponibilidade sem a sobrecarga operacional do gerenciamento de recursos redundantes. Quando a carga do aplicativo aumenta, o escalonamento automático ajuda a melhorar a disponibilidade do aplicativo provisionando recursos adicionais automaticamente. Durante períodos de baixa carga, o escalonamento automático remove recursos não utilizados e ajuda a reduzir custos.

Certos serviços do Google Cloud, como o Compute Engine, permitem configurar o escalonamento automático para os recursos provisionados. Serviços gerenciados, como o Cloud Run, podem escalonar automaticamente a capacidade sem que você precise configurar nada. Veja a seguir exemplos de serviços do Google Cloud compatíveis com o escalonamento automático. Esta não é uma lista completa.

  • Compute Engine: os MIGs permitem escalonar automaticamente aplicativos sem estado implantados nas VMs do Compute Engine para corresponder à capacidade com a carga atual. Para mais informações, consulte Escalonamento automático de grupos de instâncias.
  • GKE: é possível configurar clusters do GKE para redimensionar automaticamente os pools de nós para corresponder à carga atual. Para mais informações, consulte Escalonador automático de cluster. Para clusters do GKE provisionados no modo Autopilot, o GKE escalona automaticamente os nós e as cargas de trabalho com base no tráfego.
  • Cloud Run: os serviços provisionados no Cloud Run são escalonados automaticamente para o número de instâncias de contêiner necessárias para lidar com a carga atual. Quando não há carga no aplicativo, o número de instâncias de contêiner é zerado automaticamente no serviço. Para mais informações, consulte Sobre o escalonamento automático de instâncias de contêiner.
  • Cloud Functions: cada solicitação para uma função é atribuída a uma instância dela. Se o volume de solicitações de entrada exceder o número de instâncias de função, o Cloud Functions iniciará novas instâncias da função automaticamente. Para mais informações, consulte Ambiente de execução do Cloud Functions.
  • Bigtable: ao criar um cluster em uma instância do Bigtable, é possível configurá-lo para escalonar automaticamente. O Bigtable monitora a CPU e a carga de armazenamento e ajusta o número de nós no cluster para manter as taxas de utilização de destino especificadas. Para mais informações, consulte Escalonamento automático do Bigtable.
  • Dataproc Serverless: quando você envia uma carga de trabalho em lote do Apache Spark, o Dataproc Serverless escalona dinamicamente os recursos da carga de trabalho, como o número de executores, para executar a carga de trabalho de maneira eficiente. Para mais informações, consulte Dataproc sem servidor para escalonamento automático do Spark.

Balanceamento de carga

O balanceamento de carga ajuda a melhorar a confiabilidade do aplicativo roteando o tráfego apenas para os recursos disponíveis e garantindo que os recursos individuais não estejam sobrecarregados.

Considere as seguintes recomendações de design relacionadas à confiabilidade ao escolher e configurar balanceadores de carga para a implantação da nuvem.

Tráfego de balanceamento de carga interno

Configure também o balanceamento de carga do tráfego entre os níveis da pilha de aplicativos, e não apenas para o tráfego entre os clientes externos e o aplicativo. Por exemplo, em uma pilha de aplicativos da Web de três camadas, é possível usar um balanceador de carga interno para uma comunicação confiável entre as camadas da Web e do aplicativo.

Escolher um tipo de balanceador de carga adequado

Para balancear a carga do tráfego externo em um aplicativo distribuído em várias regiões, use um balanceador de carga global ou vários balanceadores regionais. Para mais informações, consulte Benefícios e riscos do balanceamento de carga global para implantações multirregionais.

Se os back-ends estiverem em uma região única e você não precisar dos recursos do balanceamento de carga global, use um balanceador de carga regional, que é resiliente a interrupções de zona.

Ao escolher o tipo de balanceador de carga, considere outros fatores além da disponibilidade, como controle geográfico sobre terminação TLS, desempenho, custo e tipo de tráfego. Para mais informações, consulte Escolher um balanceador de carga.

Configurar verificações de integridade

O escalonamento automático garante que seus aplicativos tenham recursos de infraestrutura adequados para lidar com a carga atual. No entanto, mesmo quando há recursos de infraestrutura suficientes, um aplicativo ou partes dele podem não ser responsivos. Por exemplo, todas as VMs que hospedam seu aplicativo podem estar no estado RUNNING. No entanto, o software do aplicativo implantado em algumas das VMs pode falhar. As verificações de integridade de balanceamento de carga garantem que os balanceadores de carga roteiem o tráfego do aplicativo apenas para os back-ends que respondem. Se os back-ends forem MIGs, configure uma camada extra de verificações de integridade para recuperar automaticamente as VMs que não estão disponíveis. Quando a recuperação automática é configurada para um MIG, as VMs indisponíveis são excluídas proativamente e novas VMs são criadas.

Limitação de taxa

Às vezes, o aplicativo pode apresentar um aumento rápido ou prolongado na carga. Se o aplicativo não foi projetado para processar o aumento de carga, o aplicativo ou os recursos que ele usa podem falhar, tornando o aplicativo indisponível. O aumento da carga pode ser causado por solicitações maliciosas, como ataques de negação de serviço (DDoS) distribuídos baseados na rede. Um pico repentino na carga também pode ocorrer devido a outros motivos, como erros de configuração no software cliente. Para garantir que seu aplicativo possa lidar com carga excessiva, considere usar mecanismos de limitação de taxa adequados. Por exemplo, é possível definir cotas para o número de solicitações de API que um serviço do Google Cloud pode receber.

As técnicas de limitação de taxa também podem ajudar a otimizar o custo da sua infraestrutura em nuvem. Por exemplo, ao definir cotas para recursos específicos no projeto, é possível limitar o faturamento que esses projetos podem gerar.

Nível de serviço de rede

Os níveis de serviço de rede do Google Cloud permitem otimizar a conectividade entre sistemas na Internet e suas cargas de trabalho do Google Cloud. Para aplicativos que atendem usuários globalmente e têm back-ends em mais de uma região, escolha o nível Premium. O tráfego da Internet entra na rede de alto desempenho do Google no ponto de presença (PoP, na sigla em inglês) mais próximo do sistema de envio. Na Rede do Google, o tráfego é roteado do PoP de entrada para o recurso apropriado do Google Cloud, como uma VM do Compute Engine. O tráfego de saída é enviado pela rede do Google e sai no PoP mais próximo do destino. Esse método de roteamento ajuda a melhorar a percepção de disponibilidade dos usuários, reduzindo o número de saltos de rede entre os usuários e os PoPs mais próximos deles.