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
- Funções do Cloud Run
- 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:
- Veja e responda às recomendações de otimização de custos no Hub de recomendações.
- Receba notificações por e-mail sobre possíveis aumentos no uso de recursos e no custo configurando alertas de orçamento.
- Gerencie e responda a alertas de maneira programática usando os serviços do Pub/Sub e do Cloud Run functions.
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) 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 o Cloud Run functions 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 Run functions, atribua um rótulo consistente a todas as funções do Cloud Run e do Cloud Run 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 convencionais 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.
- Quando você quiser pausar o faturamento dos recursos de CPU alocados para uma VM inativa, mas não quiser excluí-la nem interrompê-la, suspenda a VM e, em seguida, retome a VM quando necessário. Essa opção pode ser útil para cargas de trabalho em que a inicialização pós-inicialização ou as tarefas de inicialização levam muito tempo.
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 com a licença de terceiros, é possível criar e usar uma imagem personalizada 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 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 horizontal de pods (HPA), o Autoescalonador de Pods Vertical (VPA), o escalonador automático de cluster (CA) ou o 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 optimization-utilization 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.
Funções do Cloud Run
Nesta seção, fornecemos orientação para ajudar a otimizar o custo dos recursos do Cloud Run 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 Run 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 Run 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 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 que 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
- Saiba como otimizar o custo dos recursos do GKE:
- Execute aplicativos do Kubernetes otimizados para custo no GKE: práticas recomendadas
- Práticas recomendadas para reduzir o provisionamento em excesso do GKE
- Reduzir custos diminuindo os clusters do GKE fora do horário de pico
- Executar aplicativos da Web no GKE usando VMs Spot com custo otimizado
- Estime seus custos do GKE no início do ciclo de desenvolvimento usando o GitLab
- Série de vídeos: otimização de custos do GKE
- Treinamento: otimizar custos para o GKE
- Saiba como otimizar o custo dos recursos do Cloud Run e do Cloud Run functions:
- Otimize os custos de armazenamento, bancos de dados, redes e operações:
- Explore as outras categorias do Framework da arquitetura do Google Cloud