Otimizar custos: computação, contêineres e sem servidor

Last reviewed 2023-07-12 UTC

Este documento no Framework da arquitetura do Google Cloud fornece recomendações para ajudar você a otimizar o custo de suas máquinas virtuais (VMs, na sigla em inglês), contêineres e recursos sem servidor no Google Cloud.

As orientações nesta seção são destinadas a arquitetos, desenvolvedores e administradores responsáveis por provisionar e gerenciar recursos de computação para cargas de trabalho na nuvem.

Os recursos de computação são a parte mais importante da sua infraestrutura em nuvem. Ao migrar suas cargas de trabalho para o Google Cloud, a primeira opção típica é o Compute Engine, que permite provisionar e gerenciar VMs com eficiência na nuvem. O Compute Engine oferece uma ampla variedade de tipos de máquinas e está disponível globalmente em todas as regiões do Google Cloud. Os tipos de máquina predefinidos e personalizados do Compute Engine permitem que você provisione VMs que oferecem capacidade de computação semelhante à sua infraestrutura local, acelerando o processo de migração. O Compute Engine oferece a vantagem de pagar somente pela infraestrutura utilizada e economia significativa à medida que usa mais recursos de computação com descontos por uso prolongado.

Além do Compute Engine, o Google Cloud oferece contêineres e serviços de computação sem servidor. A abordagem sem servidor pode ser mais econômica para novos serviços que nem sempre estão em execução (por exemplo, APIs, processamento de dados e processamento de eventos).

Além das recomendações gerais, este documento fornece orientações para ajudar a otimizar o custo dos recursos de computação ao usar os seguintes produtos:

  • Compute Engine
  • Google Kubernetes Engine (GKE)
  • Cloud Run
  • Cloud Functions
  • App Engine

Recomendações gerais

As recomendações a seguir são aplicáveis a todos os serviços de computação, contêineres e sem servidor no Google Cloud discutidos nesta seção.

Rastrear o uso e o custo

Use as seguintes ferramentas e técnicas para monitorar o uso e o custo dos recursos:

Controlar o provisionamento de recursos

Use as recomendações a seguir para controlar a quantidade de recursos provisionados na nuvem e o local onde eles são criados:

  • Para garantir que o consumo e o custo dos recursos não excedam a previsão, use as cotas de recursos.
  • Provisione recursos na região de menor custo que atenda aos requisitos de latência da carga de trabalho. Para controlar onde os recursos são provisionados, use a restrição da política da organização gcp.resourceLocations.

Receber descontos por uso contínuo

Os descontos por uso contínuo (CUDs, na sigla em inglês) são ideais para cargas de trabalho com necessidades previsíveis de recursos. Depois de migrar sua carga de trabalho para o Google Cloud, encontre o valor de referência para os recursos necessários e tenha descontos mais detalhados pelo uso contínuo. Por exemplo, compre um compromisso de um ou três anos e receba um desconto substancial nos preços de VM do Compute Engine.

Automatizar o rastreamento de custos usando rótulos

Defina e atribua rótulos de maneira consistente. Veja a seguir exemplos de como usar rótulos para automatizar o rastreamento de custos:

  • Para VMs que apenas os desenvolvedores usam durante o horário comercial, atribua o rótulo env: development. Use o Cloud Scheduler para configurar uma Função do Cloud sem servidor para encerrar essas VMs após o horário comercial e reiniciá-las quando necessário.

  • Para um aplicativo que tem vários serviços do Cloud Run e instâncias do Cloud Functions, atribua um rótulo consistente a todas as funções do Cloud Run e do Cloud Functions. Identifique as áreas de alto custo e tome medidas para reduzir custos.

Personalizar relatórios de faturamento

Configure os relatórios do Cloud Billing configurando os filtros necessários e agrupando os dados conforme necessário (por exemplo, por projetos, serviços ou rótulos).

Promova uma cultura de economia de custos

Treine seus desenvolvedores e operadores na infraestrutura em nuvem. Crie e promova programas de aprendizado usando aulas tradicionais ou on-line, grupos de discussão, avaliações de pares, programação de pares e jogos de economia de custos. Conforme mostrado na pesquisa DORA do Google, a cultura organizacional é um elemento fundamental para melhorar o desempenho, reduzir o retrabalho e o esgotamento, além de otimizar o custo. Ao conceder aos funcionários visibilidade sobre o custo dos recursos, você os ajuda a alinhar as prioridades e atividades com os objetivos e as restrições da empresa.

Compute Engine

Nesta seção, fornecemos orientação para ajudar a otimizar o custo dos recursos do Compute Engine. Além dessa orientação, recomendamos que você siga as recomendações gerais discutidas anteriormente.

Noções básicas sobre o modelo de faturamento

Para saber mais sobre as opções de faturamento do Compute Engine, consulte Preços.

Analisar o consumo de recursos

Para entender o consumo de recursos no Compute Engine, exporte os dados de uso para o BigQuery. Consulte o armazenamento de dados do BigQuery para analisar as tendências de uso da CPU virtual (vCPU) do seu projeto e determinar o número de vCPUs que podem ser recuperadas. Se você tiver definido limites para o número de núcleos por projeto, analise as tendências de uso para identificar anomalias e tomar ações corretivas.

Recuperar recursos inativos

Use as recomendações a seguir para identificar e recuperar VMs e discos não utilizados, como VMs para projetos de prova de conceito que não tiveram prioridade:

  • Use o recomendador de VM inativa para identificar VMs inativas e discos permanentes com base nas métricas de uso.
  • Antes de excluir recursos, avalie o possível impacto da ação e planeje recriar os recursos, se necessário.
  • Antes de excluir uma VM, considere criar um snapshot. Ao excluir uma VM, os discos anexados serão excluídos, a menos que você tenha selecionado a opção Manter disco.
  • Quando possível, interrompa as VMs em vez de excluí-las. Quando você interrompe uma VM, a instância é encerrada, mas os discos e endereços IP são mantidos até que você os desanexe ou exclua.

Ajustar a capacidade para corresponder à demanda

Programar o início e a interrupção automáticas das VMs Por exemplo, se uma VM for usada somente oito horas por dia durante cinco dias por semana (ou seja, 40 horas na semana), é possível reduzir os custos em 75% interrompendo a VM durante o período de 128 horas na semana em que a VM não é usada.

Faça o escalonamento automático da capacidade de computação com base na demanda usando grupos de instâncias gerenciadas. É possível fazer escalonamento automático da capacidade com base nos parâmetros importantes para sua empresa, por exemplo, uso da CPU ou capacidade de balanceamento de carga.

Escolher tipos de máquina apropriados

Dimensione as VMs para atender aos requisitos de computação da carga de trabalho usando o recomendador do tipo de máquina de VM.

Para cargas de trabalho com requisitos de recursos previsíveis, adapte o tipo de máquina às suas necessidades e economize dinheiro usando VMs personalizadas.

Para cargas de trabalho de processamento em lote que são tolerantes a falhas, use as VMs do Spot. A computação de alto desempenho (HPC), o Big Data, a transcodificação de mídia, os pipelines de integração contínua e entrega contínua (CI/CD) e os aplicativos da Web sem estado são exemplos de cargas de trabalho que podem ser implantadas em VMs do Spot. Para um exemplo de como a Descartes Labs reduziu os custos de análise usando Spot VMs (a versão mais antiga das Spot VMs) para processar imagens de satélite, consulte o estudo de caso Descartes Labs.

Avaliar opções de licenciamento

Ao migrar cargas de trabalho de terceiros para o Google Cloud, você pode reduzir os custos trazendo suas próprias licenças (BYOL, na sigla em inglês). Por exemplo, para implantar VMs do Microsoft Windows Server, em vez de usar uma imagem premium que gera mais custos para a licença de terceiros, é possível criar e usar uma imagem personalizada do BYOL do Windows. Você paga apenas pela infraestrutura de VM usada no Google Cloud. Essa estratégia ajuda você a manter o valor dos seus investimentos atuais em licenças de terceiros.

Se você decidir usar uma abordagem BYOL, recomendamos o seguinte:

  • Provisione o número necessário de núcleos de CPU de computação, independentemente da memória, usando tipos de máquina personalizados e limite o custo de licenciamento de terceiros ao número de núcleos de CPU que que você precisa.
  • Reduza o número de vCPUs por núcleo de 2 para 1 desativando multissegmentação simultânea (SMT, na sigla em inglês) e reduza os custos de licenciamento em 50%.

Se as cargas de trabalho de terceiros precisarem de hardware dedicado para atender aos requisitos de segurança ou conformidade, traga suas próprias licenças para nós de locatário individual.

Google Kubernetes Engine

Nesta seção, fornecemos orientação para ajudar a otimizar o custo dos recursos do GKE.

Além das recomendações a seguir, consulte as recomendações gerais discutidas anteriormente:

  • Use o Autopilot do GKE para permitir que o GKE maximize a eficiência da infraestrutura do cluster. Você não precisa monitorar a integridade dos nós, lidar com o empacotamento ou calcular a capacidade necessária para suas cargas de trabalho.
  • Ajuste o escalonamento automático do GKE usando o escalonador automático do pod horizontal (HPA), o escalonador automático do pod vertical (VPA). Autoescalador de cluster (CA) ou provisionamento automático de nós com base nos requisitos da carga de trabalho.
  • Para cargas de trabalho em lote que não sejam sensíveis à latência de inicialização, use o perfil de escalonamento automático otimização-utilização para ajudar a melhorar a utilização do cluster.
  • Usar provisionamento automático de nós para estender o escalonador automático de cluster do GKE e criar e excluir pools de nós com base nos especificações de pods pendentes sem provisionamento excessivo.
  • Use pools de nós separados: um pool de nós estático para carga estática e pools de nós dinâmicos com grupos de escalonamento automático de clusters para carregamentos dinâmicos.
  • Use VMs do Spot para os pools de nós do Kubernetes quando os pods forem tolerantes a falhas e puderem ser encerrados corretamente em menos de 25 segundos. Combinada com o escalonador automático de clusters do GKE, essa estratégia ajuda a garantir que o pool de nós com VMs de menor custo (neste caso, o pool de nós com Spot VMs) seja dimensionado primeiro.
  • Escolha tipos de máquina econômicos (por exemplo: E2, N2D), T2D), que oferecem um desempenho entre 20 e 40% mais alto para pagar o preço.
  • Use a medição de uso do GKE para analisar os perfis de uso dos clusters por namespaces e rótulos. Identifique a equipe ou o aplicativo que está gastando mais, o ambiente ou o componente que causou picos de uso ou custo e a equipe que está desperdiçando recursos.
  • Use cotas de recursos em clusters multilocatários para evitar que qualquer locatário use mais recursos do cluster do que a parcela atribuída a ele.
  • Programe a redução automática de ambientes de desenvolvimento e teste após o horário comercial.
  • Siga as práticas recomendadas para executar aplicativos do Kubernetes otimizados para custo no GKE.

Cloud Run

Nesta seção, fornecemos orientação para ajudar a otimizar o custo dos recursos do Cloud Run.

Além das recomendações a seguir, consulte as recomendações gerais discutidas anteriormente:

  • Ajuste a configuração de simultaneidade (padrão: 80) para reduzir o custo. O Cloud Run determina o número de solicitações a serem enviadas para uma instância com base no uso de CPU e da memória. Ao aumentar a simultaneidade de solicitações, você pode reduzir o número de instâncias necessárias.
  • Defina um limite para o número de instâncias que podem ser implantadas.
  • Faça uma estimativa do número de instâncias necessárias usando a métrica Tempo de instância faturável. Por exemplo, se a métrica mostra 100s/s, cerca de 100 instâncias foram programadas. Adicionar um buffer de 30% para preservar o desempenho ou seja, 130 instâncias para centenas de tráfegos.
  • Para reduzir o impacto das inicializações a frio, configure um número mínimo de instâncias. Quando essas instâncias estão ociosas, elas são cobradas a um décimo do preço.
  • Acompanhe o uso da CPU e ajuste os limites da CPU corretamente.
  • Use o gerenciamento de tráfego para determinar uma configuração econômica.
  • Considere usar o Cloud CDN ou o Firebase Hosting para exibir recursos estáticos.
  • Para aplicativos do Cloud Run que processam solicitações globalmente, considere implantar o aplicativo em várias regiões, porque a transferência de dados entre continentes pode ser caro. Esse design é recomendado se você usa um balanceador de carga e a CDN.
  • Reduza os tempos de inicialização das instâncias, porque o tempo de inicialização também é faturável.
  • Compre descontos por compromisso de uso e economize até 17% no preço sob demanda por um compromisso de um ano.

Cloud Functions

Nesta seção, fornecemos orientação para ajudar a otimizar o custo dos recursos do Cloud Functions.

Além das recomendações a seguir, consulte as recomendações gerais discutidas anteriormente:

  • Observe o tempo de execução das suas funções. Faça testes e comparativos de mercado para criar a menor função que ainda atenda ao limite de desempenho necessário.
  • Se as cargas de trabalho do Cloud Functions forem executadas constantemente, use o GKE ou o Compute Engine para processar as cargas de trabalho. Contêineres ou VMs podem ser opções de baixo custo para cargas de trabalho sempre em execução.
  • Limite o número de instâncias de função que podem coexistir.
  • Comparar o desempenho do ambiente de execução às linguagens de programação do Cloud Functions com a carga de trabalho da função. Programas em linguagens compiladas têm inicializações a frio mais longas, mas mais rápidos. Programas em linguagens interpretadas são mais lentos, mas têm uma sobrecarga de inicialização a frio mais baixa. Funções curtas e simples executadas com frequência podem custar menos em uma linguagem interpretada.
  • Exclua os arquivos temporários gravados no disco local, que é um sistema de arquivos na memória. Eles consomem memória alocada à função e, às vezes, permanecem entre as invocações. Se você não excluir esses arquivos, pode ocorrer um erro de falta de memória e acionar uma inicialização a frio, o que aumenta o tempo de execução e o custo.

App Engine

Nesta seção, fornecemos orientação para ajudar a otimizar o custo dos recursos do App Engine.

Além das recomendações a seguir, consulte as recomendações gerais discutidas anteriormente:

  • Defina o máximo de instâncias com base no seu tráfego e na latência da solicitação. O App Engine geralmente escalona a capacidade com base no tráfego que os aplicativos recebem. É possível controlar o custo limitando o número de instâncias que o App Engine pode criar.
  • Para limitar a memória ou a CPU disponível para o aplicativo, defina uma classe de instância. Para aplicativos que usam muita CPU, aloque mais CPU. Teste algumas configurações para determinar o tamanho ideal.
  • Compare sua carga de trabalho do App Engine em várias linguagens de programação. Por exemplo, uma carga de trabalho implementada em uma linguagem pode precisar de menos instâncias e custo menor para concluir tarefas a tempo que a mesma carga de trabalho programada em outra linguagem.
  • Otimize para menos inicializações a frio. Quando possível, reduza tarefas com uso intensivo da CPU ou de longa duração que ocorrem no escopo global. Tente dividir a tarefa em operações menores que possam ser "carregadas lentamente" no contexto de uma solicitação.
  • Se você espera um tráfego em burst, configure um número mínimo de instâncias ociosas que estejam pré-aquecidas. Se você não estiver esperando tráfego, poderá configurar as instâncias ociosas mínimas como zero.
  • Para equilibrar o desempenho e o custo, execute um teste A/B dividindo o tráfego entre duas versões, cada uma com uma configuração diferente. Monitore o desempenho e o custo de cada versão, ajuste-os conforme necessário e decida a configuração para a qual o tráfego será enviado.
  • Configure a simultaneidade de solicitação e defina o número máximo de solicitações simultâneas maior que o padrão. Quanto mais solicitações cada instância puder processar simultaneamente, mais eficiente será o uso das instâncias existentes para veicular o tráfego.

A seguir