Este princípio no pilar de sustentabilidade do Google Cloud Framework Well-Architected fornece recomendações para ajudar você a otimizar o uso de recursos pelas cargas de trabalho em Google Cloud.
Visão geral do princípio
Otimizar o uso de recursos é fundamental para melhorar a sustentabilidade do ambiente de nuvem. Cada recurso provisionado, de ciclos de computação ao armazenamento de dados, afeta diretamente o uso de energia, a intensidade da água e as emissões de carbono. Para reduzir a pegada ambiental das cargas de trabalho, é necessário fazer escolhas informadas ao provisionar, gerenciar e usar recursos de nuvem.
Recomendações
Para otimizar o uso de recursos, considere as recomendações nas seções a seguir.
Implementar 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 infraestrutura inativa ou superprovisionada. A redução do desperdício de energia se traduz em custos e emissões de carbono mais baixos.
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 de escalonamento preferida para a maioria dos aplicativos com priorização da nuvem. Em vez de aumentar o tamanho de cada instância, conhecido como escalonamento vertical, você adiciona instâncias para distribuir a carga. Por exemplo, é possível 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 que têm níveis de carga variáveis.
Configurar políticas de escalonamento adequadas
Configure as configuraçõ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 a profundidade da fila para tarefas assíncronas, a latência de solicitação e as métricas personalizadas do aplicativo. Para evitar o escalonamento frequente e desnecessário ou flapping, 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 escalonamento 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 que têm picos imprevisíveis de carga.
O escalonamento proativo é adequado para cargas de trabalho com padrões previsíveis, como horário de funcionamento 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 processar um nível de carga previsto. Essa técnica evita uma corrida por recursos e garante uma experiência do usuário mais tranquila com maior eficiência. Essa técnica também ajuda a planejar proativamente picos conhecidos de carga, como grandes eventos de vendas e esforços de marketing focados.
Google Cloud Os serviços e recursos gerenciados, como o Autopilot do GKE, o Cloud Run e os MIGs, gerenciam automaticamente o escalonamento proativo aprendendo com os 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 dele 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 contínuo e eficiente.
Usar programação e lotes
O processamento em lote é ideal para cargas de trabalho não urgentes e em grande escala. Os jobs em lote podem ajudar a otimizar as cargas de trabalho para eficiência energética e custo.
Use as técnicas a seguir para implementar a programação e os jobs em lote.
Programar para baixa intensidade de carbono
Programe os jobs em lote para serem executados em regiões com baixa emissão de carbono e durante períodos em que a rede elétrica local tenha uma alta porcentagem de energia limpa. Para identificar os horários do dia com menor intensidade de carbono em uma região, use o relatório de pegada de carbono.
Usar VMs spot para cargas de trabalho não críticas
As VMs spot permitem aproveitar a capacidade não utilizada do Compute Engine com um grande desconto. As VMs spot podem ser preemptivas, mas oferecem uma maneira econômica de processar grandes conjuntos de dados sem a necessidade de recursos dedicados e sempre ativos. As VMs 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 inicialização e encerramento de 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 de recursos.
Usar serviços gerenciados
Serviços gerenciados, como o Batch e o Dataflow processam automaticamente o provisionamento, a programação 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 inativos.
Corresponder famílias de máquinas de VM aos requisitos de carga de trabalho
Os tipos de máquina que podem ser usados para as 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 cargas de trabalho.
| Família de máquinas | Recomendado para tipos de carga de trabalho | Orientações sobre sustentabilidade |
|---|---|---|
| Instâncias de uso geral (E2, N2, N4, Tau T2A/T2D): essas instâncias fornecem uma proporção equilibrada de CPU para memória. | Servidores da Web, microsserviços, bancos de dados pequenos e médios e ambientes de desenvolvimento. | A série E2 é altamente econômica e eficiente em termos de energia devido à sua alocação dinâmica de recursos. A série Tau T2A usa processadores baseados em Arm, que geralmente são mais eficientes em termos de energia por unidade de desempenho para cargas de trabalho em grande escala. |
| Instâncias otimizadas para computação (C2, C3): essas instâncias fornecem 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 baseada 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 otimizadas para 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 de 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 reduzir o tempo total que a CPU passa em um estado ativo estado. |
| Instâncias otimizadas para armazenamento (Z3): Essas instâncias fornecem armazenamento SSD local de alta capacidade e baixa latência. | Data warehousing, análise de registros e bancos de dados SQL, NoSQL e vetoriais. | As instâncias otimizadas para armazenamento processam conjuntos de dados enormes 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 de modelo de ML e inferência, 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 significativamente mais eficiente em termos de energia para treinar modelos grandes do que uma alternativa somente de CPU. Embora uma instância acelerada por GPU tenha um uso de energia nominal maior, a tarefa é concluída muito mais rapidamente. |
Fazer upgrade para os tipos de máquina mais recentes
O uso dos tipos de máquina mais recentes pode ajudar a melhorar a sustentabilidade. Quando os tipos de máquina são atualizados, eles geralmente são projetados para serem mais eficientes em termos de energia e para oferecer 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 os seguintes:
- Núcleos especializados: os avanços nos processadores geralmente incluem núcleos ou instruções especializadas para cargas de trabalho comuns. Por exemplo, as CPUs podem ter núcleos dedicados para operações vetoriais ou aceleradores de IA integrados. Quando essas tarefas são descarregadas da CPU principal, elas são concluídas com mais eficiência 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 o 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 sejam executados com eficiência máxima e entrem em estados de baixa energia quando estão inativos, o que minimiza o consumo de energia.
As melhorias técnicas na arquitetura de chips 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 desempenho de preço 40% maior em comparação com as VMs C3 para o mesmo consumo de energia. O processador C4A oferece 60% mais eficiência energética do que os processadores x86 comparáveis. Esses recursos de desempenho permitem concluir tarefas mais rapidamente 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 uso intensivo de computação, como jobs em lote e treinamento de modelo de ML.
- Utilização ideal de recursos: os tipos de máquina mais recentes geralmente são mais adequados para softwares modernos e são mais compatíveis com recursos avançados de plataformas de nuvem. Esses tipos de máquina normalmente permitem uma 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 em contêineres
É possível usar serviços totalmente gerenciados baseados em contêineres, como o GKE e o Cloud Run, como parte da estratégia de computação em nuvem sustentável. Esses serviços ajudam a otimizar a utilização de recursos e automatizar o gerenciamento de recursos.
Aproveitar o recurso de redução da escala a zero do Cloud Run
O Cloud Run oferece um ambiente sem servidor gerenciado que escalona 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 por infraestrutura inativa. Os recursos são ativados apenas 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, é possível usar GPUs com o Cloud Run, o 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 a automatizar a otimização de recursos, o GKE oferece as seguintes técnicas:
- Empacotamento: O Autopilot do GKE empacota de maneira inteligente vários contêineres nos nós disponíveis. O empacotamento maximiza a utilização de cada nó e reduz o número de nós inativos 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 o 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 ou 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 de pods multidimensional 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 pod. Essa técnica ajuda a garantir a menor pegada de energia possível para o desempenho necessário.
- Programação com reconhecimento de topologia (TAS): o TAS melhora a eficiência da rede para cargas de trabalho de IA e ML no GKE, colocando pods com base na estrutura física da infraestrutura do data center. O TAS coloca cargas de trabalho estrategicamente para minimizar os saltos de rede. Essa colocação ajuda a reduzir a latência de comunicação e o consumo de energia. Ao otimizar o alinhamento físico de nós e 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 a programação com reconhecimento de carbono
No Google, mudamos continuamente nossas cargas de trabalho para locais e horários que fornecem a eletricidade mais limpa. Também reutilizamos ou aproveitamos, equipamentos mais antigos para casos de uso alternativos. É possível usar essa estratégia de programação com reconhecimento de carbono para garantir que as cargas de trabalho em contêineres usem energia limpa.
Para implementar a programação com reconhecimento de carbono, você precisa de informações sobre a combinação de energia que alimenta os data centers em uma região em tempo real. É possível acessar essas informações em um formato legível por máquina no repositório Carbon free energy for Google Cloud regions no GitHub ou em um conjunto de dados público do BigQuery. Os dados de combinação de grade e intensidade de carbono por hora usados para calcular o conjunto de dados anual de carbono do Google são provenientes do Electricity Maps.
Para implementar a programação com reconhecimento de carbono, recomendamos as seguintes técnicas:
- Mudança geográfica: programe as 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 fora do horário de pico ou quando a energia renovável for mais abundante. Essa abordagem é conhecida como mudança temporal e ajuda a reduzir a pegada de carbono geral, aproveitando fontes de energia mais limpas quando disponíveis.
Projetar recuperação de desastres com eficiência energética
A preparação para a recuperação de desastres (DR) geralmente envolve o provisionamento prévio de recursos redundantes em uma região secundária. No entanto, recursos inativos 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):
- Priorizar a DR a frio: mantenha os recursos na região de DR desativados ou em um estado de redução da escala a zero. Essa abordagem ajuda a eliminar a pegada de carbono de recursos de computação inativos.
- Aproveitar o failover sem servidor: use serviços sem servidor gerenciados 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.
- Automatizar a recuperação com infraestrutura como código (IaC): em vez de manter recursos no site de DR em execução (quente), 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 de desperdício de energia. Para reduzir a redundância, use as seguintes abordagens:
- Preferir ativo-ativo em vez de ativo-passivo: em uma configuração ativo-passiva, os recursos no site passivo ficam inativos, o que resulta em desperdício de energia. Uma arquitetura ativo-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 infraestrutura.
- Redundância de tamanho adequado: replique dados e serviços entre regiões apenas quando a replicação for necessária para atender aos requisitos de alta disponibilidade ou DR. Cada réplica adicional aumenta o custo de energia do armazenamento permanente e da saída de rede.