Esse princípio no pilar de sustentabilidade do Google Cloud Well-Architected Framework fornece recomendações para ajudar você a otimizar o uso de recursos pelas cargas de trabalho no Google Cloud.
Visão geral do princípio
Otimizar o uso de recursos é fundamental para aumentar a sustentabilidade do seu ambiente de nuvem. Cada recurso provisionado, desde ciclos de computação até armazenamento de dados, afeta diretamente o uso de energia, a intensidade da água e as emissões de carbono. Para reduzir o impacto ambiental das suas cargas de trabalho, é necessário fazer escolhas conscientes ao provisionar, gerenciar e usar recursos da nuvem.
Recomendações
Para otimizar o uso de recursos, considere as recomendações nas seções a seguir.
Implementar o escalonamento automático e dinâmico
O escalonamento automático e dinâmico garante que o uso de recursos seja ideal, o que ajuda a evitar o desperdício de energia de infraestruturas ociosas ou provisionadas em excesso. A redução no desperdício de energia se traduz em custos e emissões de carbono menores.
Use as técnicas a seguir para implementar a escalonabilidade automática e dinâmica.
Usar o escalonamento horizontal
O escalonamento horizontal é a técnica preferida para a maioria dos aplicativos prioritários para a nuvem. Em vez de aumentar o tamanho de cada instância, o que é conhecido como escalonamento vertical, você adiciona instâncias para distribuir a carga. Por exemplo, você pode usar grupos gerenciados de instâncias (MIGs) para escalonar horizontalmente automaticamente um grupo de VMs do Compute Engine. A infraestrutura escalonada horizontalmente é mais resiliente porque a falha de uma instância não afeta a disponibilidade do aplicativo. O escalonamento horizontal também é uma técnica eficiente em termos de recursos para aplicativos com níveis de carga variáveis.
Configurar políticas de escalonamento adequadas
Configure as opções de escalonamento automático com base nos requisitos das cargas de trabalho. Defina métricas e limites personalizados específicos para o comportamento do aplicativo. Em vez de depender apenas da utilização da CPU, considere métricas como profundidade da fila para tarefas assíncronas, latência de solicitação e métricas personalizadas de aplicativos. Para evitar escalonamento frequente e desnecessário ou oscilação, defina políticas de escalonamento claras. Por exemplo, para cargas de trabalho implantadas no Google Kubernetes Engine (GKE), configure uma política de escalonamento automático de cluster adequada.
Combinar o dimensionamento reativo e proativo
Com o escalonamento reativo, o sistema é escalonado em resposta a mudanças de carga em tempo real. Essa técnica é adequada para aplicativos com picos imprevisíveis de carga.
O escalonamento proativo é adequado para cargas de trabalho com padrões previsíveis, como horário comercial diário fixo e geração de relatórios semanais. Para essas cargas de trabalho, use o escalonamento automático programado para provisionar recursos antecipadamente para que eles possam lidar com um nível de carga previsto. Essa técnica evita uma disputa por recursos e garante uma experiência do usuário mais tranquila e com maior eficiência. Essa técnica também ajuda você a planejar de forma proativa picos conhecidos de carga, como grandes eventos de vendas e esforços de marketing focados.
Google Cloud serviços e recursos gerenciados, como o Autopilot do GKE, o Cloud Run e os MIGs, gerenciam automaticamente o escalonamento proativo aprendendo com seus padrões de carga de trabalho. Por padrão, quando um serviço do Cloud Run não recebe tráfego, ele é escalonado para zero instâncias.
Projetar aplicativos sem estado
Para que um aplicativo seja escalonado horizontalmente, os componentes precisam ser sem estado. Isso significa que a sessão ou os dados de um usuário específico não estão vinculados a uma única instância de computação. Quando você armazena o estado da sessão fora da instância de computação, como no Memorystore para Redis, qualquer instância de computação pode processar solicitações de qualquer usuário. Essa abordagem de design permite um escalonamento horizontal eficiente e sem interrupções.
Usar programação e lotes
O processamento em lote é ideal para cargas de trabalho em grande escala e não urgentes. Os jobs em lote podem ajudar a otimizar suas cargas de trabalho para eficiência energética e custo.
Use as técnicas a seguir para implementar o agendamento e os trabalhos em lote.
Programação para baixa intensidade de carbono
Programe a execução dos seus jobs em lote em regiões de baixa emissão de carbono e durante períodos em que a rede elétrica local tem uma alta porcentagem de energia limpa. Para identificar os horários do dia com menos emissão de carbono em uma região, use o relatório de Pegada de carbono.
Usar VMs do Spot para cargas de trabalho não essenciais
As VMs spot permitem aproveitar a capacidade não utilizada do Compute Engine com um grande desconto. As VMs spot podem ser interrompidas, mas oferecem uma maneira econômica de processar grandes conjuntos de dados sem a necessidade de recursos dedicados e sempre ativos. As VMs do Spot são ideais para jobs em lote não críticos e tolerantes a falhas.
Consolidar e paralelizar jobs
Para reduzir a sobrecarga de iniciar e encerrar jobs individuais, agrupe jobs semelhantes em um único lote grande. Execute essas cargas de trabalho de alto volume em serviços como o Batch. O serviço provisiona e gerencia automaticamente a infraestrutura necessária, o que ajuda a garantir a utilização ideal dos recursos.
Usar serviços gerenciados
Serviços gerenciados, como o Batch e o Dataflow, processam automaticamente o provisionamento, o agendamento e o monitoramento de recursos. A plataforma de nuvem processa a otimização de recursos. Você pode se concentrar na lógica do aplicativo. Por exemplo, o Dataflow escalona automaticamente o número de workers com base no volume de dados no pipeline, para que você não pague por recursos ociosos.
Corresponder famílias de máquinas de VM aos requisitos de carga de trabalho
Os tipos de máquinas que podem ser usados nas VMs do Compute Engine são agrupados em famílias de máquinas, que são otimizadas para diferentes cargas de trabalho. Escolha as famílias de máquinas adequadas com base nos requisitos das suas cargas de trabalho.
| Família de máquinas | Recomendado para tipos de carga de trabalho | Orientação sobre sustentabilidade |
|---|---|---|
| Instâncias de uso geral (E2, N2, N4, Tau T2A/T2D): Essas instâncias oferecem uma proporção equilibrada de CPU para memória. | Servidores da Web, microsserviços, bancos de dados pequenos a médios e ambientes de desenvolvimento. | A série E2 é altamente econômica e eficiente em termos de energia devido à alocação dinâmica de recursos. A série Tau T2A usa processadores baseados em Arm, que costumam ser mais eficientes em termos de energia por unidade de desempenho para cargas de trabalho em grande escala. |
| Instâncias com otimização para computação (C2, C3): essas instâncias oferecem uma alta proporção de vCPU para memória e alto desempenho por núcleo. | Computação de alto desempenho (HPC), processamento em lote, servidores de jogos e análise de dados com base em CPU. | Uma instância da série C permite concluir tarefas com uso intensivo de CPU mais rapidamente, o que reduz o tempo total de computação e o consumo de energia do job. |
| Instâncias com otimização de memória (M3, M2): essas instâncias são projetadas para cargas de trabalho que exigem uma grande quantidade de memória. | Grandes bancos de dados e data warehouses na memória, como SAP HANA ou análise na memória. | As instâncias com otimização de memória permitem a consolidação de cargas de trabalho com uso intensivo de memória em menos nós físicos. Essa consolidação reduz a energia total necessária em comparação com o uso de várias instâncias menores. A memória de alto desempenho reduz a latência de acesso a dados, o que pode diminuir o tempo total que a CPU passa em um estado ativo. |
| Instâncias otimizadas para armazenamento (Z3) : essas instâncias oferecem armazenamento SSD local de alta capacidade de processamento e baixa latência. | Armazenamento em data warehouse, análise de registros e bancos de dados SQL, NoSQL e vetoriais. | As instâncias otimizadas para armazenamento processam grandes conjuntos de dados localmente, o que ajuda a eliminar a energia usada para a saída de dados de rede entre locais. Ao usar o armazenamento local para tarefas de alta IOPS, você evita o provisionamento excessivo de várias instâncias padrão. |
| Instâncias otimizadas para acelerador (A3, A2, G2): essas instâncias são criadas para cargas de trabalho aceleradas por GPU e TPU, como IA, ML e HPC. | Treinamento e inferência de modelos de ML e simulações científicas. | As TPUs são projetadas para oferecer eficiência energética ideal. Elas oferecem mais computações por watt. Uma instância acelerada por GPU, como a série A3 com GPUs NVIDIA H100, pode ser muito mais eficiente em termos de energia para treinar modelos grandes do que uma alternativa somente com CPU. Embora uma instância acelerada por GPU tenha um uso de energia nominal maior, a tarefa é concluída muito mais rápido. |
Fazer upgrade para os tipos de máquinas mais recentes
O uso dos tipos de máquina mais recentes pode ajudar a melhorar a sustentabilidade. Quando os tipos de máquinas são atualizados, eles geralmente são projetados para serem mais eficientes em termos de energia e oferecerem maior desempenho por watt. As VMs que usam os tipos de máquina mais recentes podem concluir a mesma quantidade de trabalho com menor consumo de energia.
CPUs, GPUs e TPUs geralmente se beneficiam de avanços técnicos na arquitetura de chips, como:
- Núcleos especializados: os avanços nos processadores geralmente incluem núcleos ou instruções especializados para cargas de trabalho comuns. Por exemplo, as CPUs podem ter núcleos dedicados para operações de vetor ou aceleradores de IA integrados. Quando essas tarefas são descarregadas da CPU principal, elas são concluídas de maneira mais eficiente e consomem menos energia.
- Gerenciamento de energia aprimorado: os avanços nas arquiteturas de chips geralmente incluem recursos de gerenciamento de energia mais sofisticados, como ajuste dinâmico de tensão e frequência com base na carga de trabalho. Esses recursos de gerenciamento de energia permitem que os chips funcionem com eficiência máxima e entrem em estados de baixo consumo quando estão ociosos, o que minimiza o consumo de energia.
As melhorias técnicas na arquitetura do chip oferecem os seguintes benefícios diretos para sustentabilidade e custo:
- Maior desempenho por watt: essa é uma métrica fundamental para a sustentabilidade. Por exemplo, as VMs C4 demonstram um custo-benefício 40% maior quando comparadas às VMs C3 para o mesmo consumo de energia. O processador C4A oferece 60% mais eficiência energética em comparação com processadores x86 semelhantes. Com esses recursos, você pode concluir tarefas mais rápido ou usar menos instâncias para a mesma carga.
- Menor consumo total de energia: com processadores aprimorados, os recursos de computação são usados por um período mais curto para uma determinada tarefa, o que reduz o uso geral de energia e a pegada de carbono. O impacto de carbono é particularmente alto para cargas de trabalho de curta duração e com uso intensivo de computação, como jobs em lote e treinamento de modelo de ML.
- Utilização ideal de recursos: os tipos de máquinas mais recentes geralmente são mais adequados para softwares modernos e mais compatíveis com recursos avançados de plataformas de nuvem. Esses tipos de máquinas geralmente permitem melhor utilização de recursos, o que reduz a necessidade de provisionamento excessivo e ajuda a garantir que cada watt de energia seja usado de forma produtiva.
Implantar aplicativos conteinerizados
É possível usar serviços totalmente gerenciados e baseados em contêineres, como o GKE e o Cloud Run, como parte da sua estratégia de computação em nuvem sustentável. Esses serviços ajudam a otimizar a utilização de recursos e automatizar o gerenciamento deles.
Aproveite o recurso de escalonamento até zero do Cloud Run
O Cloud Run oferece um ambiente sem servidor gerenciado que dimensiona automaticamente as instâncias para zero quando não há tráfego de entrada para um serviço ou quando um job é concluído. O escalonamento automático ajuda a eliminar o consumo de energia da infraestrutura ociosa. Os recursos são ativados somente quando processam solicitações ativamente. Essa estratégia é altamente eficaz para cargas de trabalho intermitentes ou orientadas a eventos. Para cargas de trabalho de IA, use GPUs com o Cloud Run, que permite consumir e pagar por GPUs apenas quando elas são usadas.
Automatizar a otimização de recursos usando o GKE
O GKE é uma plataforma de orquestração de contêineres que garante que os aplicativos usem apenas os recursos de que precisam. Para ajudar você a automatizar a otimização de recursos, o GKE oferece as seguintes técnicas:
- Empacotamento por classes: o GKE Autopilot empacota de maneira inteligente vários contêineres nos nós disponíveis. O bin packing maximiza a utilização de cada nó e reduz o número de nós ociosos ou subutilizados, o que ajuda a reduzir o consumo de energia.
- Escalonamento automático horizontal de pods (HPA): com o HPA, o número de réplicas de contêiner (pods) é ajustado automaticamente com base em métricas predefinidas, como uso da CPU ou métricas personalizadas específicas do aplicativo. Por exemplo, se o aplicativo tiver um pico de tráfego, o GKE vai adicionar pods para atender à demanda. Quando o tráfego diminui, o GKE reduz o número de pods. Esse escalonamento dinâmico evita o provisionamento excessivo de recursos, para que você não pague nem ative capacidade de computação desnecessária.
- Escalonamento automático vertical de pods (VPA): é possível configurar o GKE para ajustar automaticamente as alocações e os limites de CPU e memória para contêineres individuais. Essa configuração garante que um contêiner não receba mais recursos do que precisa, o que ajuda a evitar o provisionamento excessivo de recursos.
- Escalonamento automático multidimensional de pods do GKE: para cargas de trabalho complexas, é possível configurar o HPA e o VPA simultaneamente para otimizar o número de pods e o tamanho de cada um deles. Essa técnica ajuda a garantir o menor consumo de energia possível para a performance necessária.
- Programação com reconhecimento de topologia (TAS): a TAS melhora a eficiência da rede para cargas de trabalho de IA e ML no GKE ao posicionar pods com base na estrutura física da infraestrutura do data center. O TAS aloca estrategicamente as cargas de trabalho para minimizar os saltos de rede. Essa colocalização ajuda a reduzir a latência de comunicação e o consumo de energia. Ao otimizar o alinhamento físico dos nós e do hardware especializado, o TAS acelera a conclusão de tarefas e maximiza a eficiência energética de cargas de trabalho de IA e ML em grande escala.
Configurar o agendamento com reconhecimento de emissões de carbono
No Google, mudamos continuamente nossas cargas de trabalho para locais e horários que oferecem a eletricidade mais limpa. Também reutilizamos ou coletamos equipamentos mais antigos para casos de uso alternativos. Use essa estratégia de programação com reconhecimento de carbono para garantir que suas cargas de trabalho em contêineres usem energia limpa.
Para implementar o agendamento com reconhecimento de carbono, você precisa de informações em tempo real sobre o mix de energia que alimenta os data centers em uma região. Você pode acessar essas informações em um formato legível por máquina no repositório Energia livre de carbono para regiões de Google Cloud no GitHub ou em um conjunto de dados público do BigQuery. Os dados de intensidade de carbono e mistura de rede por hora usados para calcular o conjunto de dados anual de carbono do Google são provenientes do Electricity Maps.
Para implementar o agendamento com reconhecimento de carbono, recomendamos as seguintes técnicas:
- Mudança geográfica: programe suas cargas de trabalho para serem executadas em regiões que usam uma proporção maior de fontes de energia renovável. Essa abordagem permite usar redes elétricas mais limpas.
- Mudança temporal: para cargas de trabalho não críticas e flexíveis, como o processamento em lote, configure as cargas de trabalho para serem executadas durante horários de menor movimento ou quando a energia renovável estiver mais disponível. Essa abordagem é conhecida como mudança temporal e ajuda a reduzir a pegada de carbono geral aproveitando fontes de energia mais limpas quando elas estão disponíveis.
Projetar uma recuperação de desastres com eficiência energética
A preparação para a recuperação de desastres (DR, na sigla em inglês) geralmente envolve o pré-provisionamento de recursos redundantes em uma região secundária. No entanto, recursos ociosos ou subutilizados podem causar um desperdício significativo de energia. Escolha estratégias de DR que maximizem a utilização de recursos e minimizem o impacto de carbono sem comprometer os objetivos de tempo de recuperação (RTO).
Otimizar para eficiência de inicialização a frio
Use as abordagens a seguir para minimizar ou eliminar recursos ativos na região secundária (DR):
- Priorize a DR fria: mantenha os recursos na região de DR desligados ou em um estado de escalonamento para zero. Essa abordagem ajuda a eliminar a pegada de carbono dos recursos de computação ociosos.
- Aproveite o failover sem servidor: use serviços gerenciados sem servidor como o Cloud Run para endpoints de DR. O Cloud Run é escalonado para zero quando não está em uso. Assim, é possível manter uma topologia de DR que não consome energia até que o tráfego seja desviado para a região de DR.
- Automatize a recuperação com infraestrutura como código (IaC): em vez de manter os recursos em execução (quente) no site de DR, use uma ferramenta de IaC, como o Terraform, para provisionar ambientes rapidamente apenas quando necessário.
Equilibrar redundância e utilização
A redundância de recursos é um dos principais fatores do desperdício de energia. Para reduzir a redundância, use as seguintes abordagens:
- Prefira ativo-ativo em vez de ativo-passivo: em uma configuração ativo-passivo, os recursos no site passivo ficam ociosos, o que resulta em desperdício de energia. Uma arquitetura ativa-ativa com tamanho ideal garante que todos os recursos provisionados nas duas regiões atendam ativamente ao tráfego. Essa abordagem ajuda a maximizar a eficiência energética da sua infraestrutura.
- Redundância adequada: replique dados e serviços em regiões somente quando a replicação for necessária para atender aos requisitos de alta disponibilidade ou de DR. Cada réplica adicional aumenta o custo de energia do armazenamento persistente e da saída de rede.