Práticas de engenharia de software sustentável no AKS (Serviço de Kubernetes do Azure)
Os princípios de engenharia de software sustentável são um conjunto de competências para ajudar você a definir, criar e executar aplicativos sustentáveis. A meta geral é reduzir a pegada de carbono em todos os aspectos do seu aplicativo. As diretrizes do Azure Well-Architected Framework para sustentabilidade estão alinhadas aos Princípios da Engenharia de Software Sustentável da Green Software Foundation e fornecem uma visão geral dos princípios da engenharia de software sustentável.
A engenharia de software sustentável é uma mudança nas prioridades e no foco. Em muitos casos, a maneira como a maioria dos softwares é criada e executada realça o desempenho rápido e a baixa latência. A engenharia de software sustentável se concentra em reduzir o máximo possível as emissões de carbono.
- A aplicação de princípios de engenharia de software sustentável pode proporcionar um desempenho mais rápido ou menor latência, como por exemplo reduzindo o network traversal total.
- Reduzir as emissões de carbono pode causar um desempenho mais lento ou aumentar a latência, por exemplo, atrasando as cargas de trabalho de baixa prioridade.
As diretrizes a seguir se concentram nos serviços que você está criando ou operando no Azure com o Serviço de Kubernetes do Azure (AKS). Este artigo inclui listas de verificação de design e configuração, melhores práticas de design e opções de configuração. Antes de usar os princípios de engenharia de software sustentável no seu aplicativo, examine as prioridades, as necessidades e as vantagens/desvantagens de seu aplicativo.
Pré-requisitos
- Entender as diretrizes de sustentabilidade do Well-Architected Framework pode ajudar a produzir uma arquitetura de nuvem de alta qualidade, estável e eficiente. Recomendamos que você comece lendo mais sobre cargas de trabalho sustentáveis e examinando a carga de trabalho por meio da avaliação da Revisão do Microsoft Azure Well-Architected.
- É essencial ter requisitos de negócios claramente definidos ao criar aplicativos, pois eles podem ter um impacto direto nas arquiteturas e configurações do cluster e da carga de trabalho. Ao criar ou atualizar aplicativos existentes, examine as áreas de design de sustentabilidade do Well-Architected Framework, juntamente com o ciclo de vida holístico do aplicativo.
Entender o modelo de responsabilidade compartilhada
A sustentabilidade é uma responsabilidade compartilhada entre o provedor de nuvem e o cliente ou parceiro que cria e implanta clusters do AKS na plataforma. A implantação do AKS não o torna sustentável automaticamente, mesmo que os data centers sejam otimizados para sustentabilidade. Aplicativos não otimizados adequadamente ainda podem emitir mais carbono do que o necessário.
Saiba mais sobre o modelo de responsabilidade compartilhada para sustentabilidade.
Princípios de design
Eficiência de Carbono: emita a menor quantidade de carbono possível.
Um aplicativo de nuvem eficiente em termos de emissões de carbono é um aplicativo otimizado, e o ponto de partida é a otimização de custo.
Eficiência Energética: use a menor quantidade de energia possível.
Uma maneira de aumentar a eficiência energética é executar o aplicativo no menor número de servidores possível, com os servidores em execução na taxa de utilização mais alta, aumentando também a eficiência de hardware.
Eficiência de Hardware: use a menor quantidade de carbono incorporado possível.
Existem duas abordagens principais para a eficiência de hardware:
- Para dispositivos de usuário final, ele está estendendo o tempo de vida do hardware.
- Para computação em nuvem, está aumentando a utilização de recursos.
Conscientização de Carbono: faça mais quando a eletricidade for mais limpa e faça menos quando a eletricidade estiver mais suja.
Ter conscientização de carbono significa responder a mudanças na intensidade de carbono, aumentando ou diminuindo a demanda.
Padrões e práticas de design
Antes de examinar as recomendações detalhadas em cada uma das áreas de design, recomendamos que você considere cuidadosamente os seguintes padrões de design para criar cargas de trabalho sustentáveis no AKS:
Design do aplicativo
Explore esta seção para saber mais sobre como otimizar os aplicativos para obter um design de aplicativo mais sustentável.
Design para dimensionamento independente dos componentes lógicos
Uma arquitetura de microsserviço pode reduzir os recursos de computação necessários, pois permite o dimensionamento independente dos componentes lógicos e garante que eles sejam colocados em escala de acordo com a demanda.
- Use o Dapr Framework ou outros projetos CNCF para ajudar a separar a funcionalidade do aplicativo em microsserviços diferentes e para permitir a colocação em escala independente dos componentes lógicos.
Design para dimensionamento controlado por eventos
Ao dimensionar a carga de trabalho com base em métricas de negócios relevantes, como solicitações HTTP, tamanho da fila e eventos de nuvem, você pode ajudar a reduzir a utilização de recursos e as emissões de carbono.
- Use o Keda ao criar aplicativos controlados por eventos para permitir a redução vertical para zero, quando não houver demanda.
Visar o design sem estado
A remoção do estado do design reduz os dados na memória ou no disco exigidos pela carga de trabalho para funcionar.
- Considere o design sem estado para reduzir a carga de rede, o processamento de dados e os recursos de computação desnecessários.
Plataforma de aplicativos
Explore esta seção para saber como tomar decisões mais bem informadas relacionadas à plataforma no que diz respeito à sustentabilidade.
Habilitar atualizações automáticas de cluster e nó
Um cluster atualizado evita problemas de desempenho desnecessários e garante que você aproveite as melhorias de desempenho e otimizações de computação mais recentes.
- Habilite a atualização automática do cluster e a opção aplicar atualizações de segurança aos nós automaticamente usando o GitHub Actions para garantir que o cluster tenha as melhorias mais recentes.
Instalar complementos e extensões com suporte
Os complementos e extensões contemplados pela política de suporte do AKS oferecem funcionalidades adicionais com suporte para o cluster, permitindo que você aproveite as melhorias de desempenho e as otimizações de energia mais recentes em todo o ciclo de vida do cluster.
- Instale o KEDA como um complemento.
- Instale GitOps e Dapr como extensões.
Conteinerizar a carga de trabalho quando aplicável
Os contêineres permitem reduzir a alocação desnecessária de recursos e fazer melhor uso dos recursos implantados, pois permitem o empacotamento de compartimentos e exigem menos recursos de computação do que as máquinas virtuais.
- Use o Rascunho para simplificar a conteinerização de aplicativos, gerando manifestos do Dockerfiles e do Kubernetes.
Usar hardware com eficiência energética
Os Processadores Nativos de Nuvem da Ampere são criados exclusivamente para atender às necessidades de alto desempenho e eficiência energética da nuvem.
- Avalie se os nós com processadores baseados no Ampere Altra Arm são uma boa opção para as cargas de trabalho.
Corresponder às necessidades de escalabilidade e utilizar recursos de dimensionamento automático e intermitência
Um cluster superdimensionado não maximiza a utilização de recursos de computação e pode levar ao desperdício de energia. Separe os aplicativos em pools de nós diferentes para permitir a colocação em escala correta do cluster e o dimensionamento independente de acordo com os requisitos do aplicativo. À medida que a capacidade no cluster do AKS se esgotar, mude do AKS para a ACI para escalar horizontalmente os pods extras para nós sem servidor e garantir que a carga de trabalho use todos os recursos alocados com eficiência.
- Dimensione seu cluster para corresponder às necessidades de escalabilidade do aplicativo. Use o dimensionador automático de cluster com nós virtuais para rapidamente escalar e maximizar a utilização de recursos de computação.
- Você também pode impor cotas de recursos no nível do namespace e escalar os pools de nós de usuário para 0 quando não houver demanda.
Desativar cargas de trabalho e pools de nós fora do horário comercial
Talvez as cargas de trabalho não precisem ser executadas continuamente e possam ser desativadas para reduzir o desperdício de energia e as emissões de carbono. Você pode desligar completamente (interromper) seus pools de nós em seu cluster do AKS, permitindo que você também economize em custos de computação.
- Use a parada/início do pool de nós para desativar os pools de nós fora do horário comercial.
- Use o dimensionador KEDA CRON para reduzir verticalmente as suas cargas de trabalho (pods) com base no tempo.
Procedimentos operacionais
Explore esta seção para configurar o ambiente a fim de medir e melhorar continuamente o custo e a eficiência de carbono das cargas de trabalho.
Excluir recursos não utilizados
Você deve identificar e excluir recursos não utilizados, como imagens não referenciadas e recursos de armazenamento, pois eles têm um impacto direto na eficiência energética e de hardware. Para garantir a otimização contínua de energia, você deve tratar a identificação e a exclusão de recursos não utilizados como um processo, em vez de uma atividade pontual.
- Use o Assistente do Azure para identificar recursos não utilizados.
- Use o ImageCleaner para limpar imagens obsoletas e remover uma área de risco do cluster.
Marcar seus recursos
Obter as informações e insights certos no momento certo é importante para produzir relatórios sobre desempenho e utilização de recursos.
- Defina as marcas do Azure no cluster para habilitar o monitoramento das cargas de trabalho.
Armazenamento
Explore esta seção para saber como criar uma arquitetura de armazenamento de dados mais sustentável e otimizar as implantações existentes.
Otimizar utilização de armazenamento
As operações de recuperação de dados e armazenamento de dados podem ter um impacto substancial na eficiência energética e de hardware. A criação de soluções com o padrão de acesso a dados correto pode reduzir o consumo de energia e o carbono incorporado.
- Entenda as necessidades do aplicativo para escolher o armazenamento apropriado e defini-lo usando classes de armazenamento para evitar a subutilização de armazenamento.
- Considere provisionar volumes dinamicamente para dimensionar automaticamente o número de recursos de armazenamento.
Rede e conectividade
Explore esta seção para saber como aprimorar e otimizar a eficiência de rede para reduzir as emissões de carbono desnecessárias.
Escolher uma região mais próxima dos usuários
A distância de um data center para os usuários tem impacto considerável sobre o consumo de energia e as emissões de carbono. Reduzir a distância que um pacote de rede percorre melhora a eficiência energética e de carbono.
- Examine os requisitos de aplicativo e as áreas geográficas do Azure para escolher uma região mais próxima do destino da maioria dos pacotes de rede.
Reduzir o network traversal entre nós
Colocar nós em uma única região ou em uma única zona de disponibilidade reduz a distância física entre as instâncias. No entanto, para cargas de trabalho comercialmente críticas, você precisa garantir que o cluster esteja distribuído entre várias zonas de disponibilidade, o que pode resultar em mais network transversal e aumento no volume de carbono.
- Implante os nós em um grupo de posicionamento por proximidade para reduzir o network traversal, garantindo que os recursos de computação estejam fisicamente localizados próximos uns dos outros.
- Para cargas de trabalho críticas, configure os grupos de posicionamento por proximidade com as zonas de disponibilidade.
Avaliar usando uma malha de serviço
Uma malha de serviço implanta contêineres extras para comunicação, normalmente em um padrão sidecar, para fornecer mais recursos operacionais, o que leva a um aumento no uso da CPU e no tráfego de rede. No entanto, ela permite desacoplar o aplicativo desses recursos, à medida que os tira da camada de aplicativo e leva para a camada de infraestrutura.
- Considere cuidadosamente o aumento do uso da CPU e do tráfego de rede gerado pelos componentes de comunicação da malha de serviço, antes de tomar a decisão de usar um.
Otimizar a coleção de logs
Enviar e armazenar todos os logs de todas as fontes possíveis (cargas de trabalho, serviços, diagnósticos e atividade de plataforma) pode aumentar o armazenamento e o tráfego de rede, o que aumenta os custos e as emissões de carbono.
- Certifique-se de estar coletando e retendo apenas os dados de log necessários para atender aos requisitos. Configure regras de coleta de dados para as cargas de trabalho do AKS e implemente as considerações de design para otimizar os custos do Log Analytics.
Armazenar em cache os dados estáticos
O uso da CDN (Rede de Distribuição de Conteúdo) é uma abordagem sustentável para otimizar o tráfego de rede, pois reduz a movimentação de dados em uma rede. Ela minimiza a latência por meio do armazenamento de dados estáticos lidos com frequência mais perto dos usuários e ajuda a reduzir o tráfego de rede e a carga do servidor.
- Certifique-se de seguir as melhores práticas da CDN.
- Considere usar a CDN do Azure para reduzir a largura de banda consumida e manter os custos baixos.
Segurança
Explore esta seção para saber mais sobre as recomendações que levam a uma postura de segurança sustentável e do tamanho correto.
Avaliar se o término do TLS deve ser usado
O protocolo TLS garante que todos os dados passados entre o servidor Web e os navegadores da Web permaneçam privados e criptografados. No entanto, encerrar e restabelecer o TLS aumenta a utilização da CPU e pode ser desnecessário em determinadas arquiteturas. Um nível equilibrado de segurança pode oferecer uma carga de trabalho mais sustentável e eficiente em termos de energia, enquanto um nível mais alto de segurança pode aumentar os requisitos de recursos de computação.
- Examine as informações sobre a terminação TLS ao usar o Gateway de Aplicativo ou o Azure Front Door. Determine se você pode encerrar o TLS no gateway de borda e continuar sem o TLS no balanceador de carga de trabalho e carga de trabalho.
Usar ferramentas e controles de segurança de rede nativos de nuvem
O Azure Front Door e o Gateway de Aplicativo ajudam a gerenciar o tráfego de aplicativos Web, enquanto o Firewall de Aplicativo Web do Azure fornece proteção contra os 10 principais ataques do OWASP e bots inválidos de perda de carga na borda da rede. Esses recursos ajudam a remover a transmissão de dados desnecessária e reduzem a carga sobre a infraestrutura de nuvem, com menor largura de banda e menos requisitos de infraestrutura.
- Use o AGIC (Controlador de Entrada de Gateway de Aplicativo) no AKS para filtrar e descarregar o tráfego na borda da rede ao atingir a origem para reduzir o consumo de energia e as emissões de carbono.
Examinar vulnerabilidades
Muitos ataques à infraestrutura de nuvem buscam usar indevidamente os recursos implantados para o ganho direto do invasor, levando a um aumento desnecessário no uso e no custo. As ferramentas de verificação de vulnerabilidade ajudam a minimizar a janela de oportunidade para invasores e atenuar qualquer possível uso mal-intencionado de recursos.
- Siga as recomendações do servidor do Microsoft Defender para Nuvem.
- Execute ferramentas automáticas de verificação de vulnerabilidades, como o Defender para contêineres, para evitar o uso desnecessário de recursos. Essas ferramentas ajudam a identificar vulnerabilidades em suas imagens e minimizar a janela de oportunidade para invasores.
Próximas etapas
Azure Kubernetes Service