Estratégias de arquitetura para otimizar os custos dos componentes

Aplica-se a esta recomendação da lista de verificação de Otimização de Custos do Azure Well-Architected Framework:

CO:07 Otimize os custos dos componentes. Remova ou otimize regularmente componentes de carga de trabalho legados, desnecessários e subutilizados, incluindo recursos de aplicativos, recursos de plataforma e recursos.

Este guia descreve as recomendações para otimizar os custos dos componentes da carga de trabalho. A otimização dos custos dos componentes refere-se ao processo de avaliar e melhorar a eficiência de custos de elementos individuais dentro de uma carga de trabalho. Ele enfatiza a revisão contínua e a possível remoção ou melhoria de componentes desatualizados, desnecessários ou raramente usados, como funcionalidades da aplicação, funcionalidades da plataforma e recursos. Ele também cobre a otimização de custos de ambientes de recuperação de desastres e como evitar a introdução de componentes não otimizados. As diretrizes neste artigo se aplicam a cargas de trabalho existentes que não estão na fase de design. Negligenciar a otimização regular de componentes pode levar a custos inflacionados, desperdício de recursos e cargas de trabalho ineficientes que drenam tempo e dinheiro.

Definições

Term Definition
Funcionalidade da aplicação Um recurso distinto dentro do software de aplicativo que permite que os usuários executem tarefas específicas ou acessem informações específicas.
Funcionalidade da plataforma Uma funcionalidade ou capacidade específica fornecida por uma plataforma. Pode variar dependendo da plataforma, mas, geralmente, os recursos da plataforma são projetados para melhorar a experiência do usuário, melhorar a produtividade ou permitir tarefas ou ações específicas.
Resource Uma única entidade ou componente que pode criar, configurar e utilizar num fornecedor de serviços de nuvem.

A otimização dos componentes da carga de trabalho consiste em refinar os vários elementos de uma carga de trabalho, incluindo recursos de aplicativos, recursos de plataforma e recursos. O objetivo é garantir que a carga de trabalho use todos os componentes de forma eficiente e econômica. As estratégias incluem remover, modificar e evitar componentes que fazem com que o utilizador gaste mais do que precisa. O processo de otimização de custos de componentes garante que aloque recursos para funcionalidades e componentes que oferecem mais valor, evitando gastos desnecessários.

Otimize as funcionalidades da aplicação

A otimização dos recursos da aplicação é o processo de remover, reinvestir ou monetizar os recursos da aplicação com base no valor. Garante que aloque recursos às funcionalidades da aplicação que fornecem o maior valor aos clientes. A otimização dos recursos do aplicativo ajuda a evitar o investimento em recursos que contribuem para a dívida técnica ou não geram retorno suficiente sobre o investimento.

Avaliar o valor da funcionalidade da aplicação

Para determinar o valor de um recurso, considere os seus efeitos na aplicação geral e o valor que ele fornece aos clientes. Alguns fatores a considerar incluem:

  • Necessidades do cliente: avalie o quão bem o recurso atende às necessidades e expectativas dos clientes. O feedback dos clientes, pesquisas e dados de uso podem ser valiosos para entender o valor percebido.

  • Objetivos de negócio: Avalie como o recurso se alinha com os objetivos estratégicos do negócio. Considere como os recursos suportam a geração de receita, a satisfação do cliente ou a vantagem competitiva.

  • Efeito na experiência do utilizador: determine o efeito que o recurso tem na melhoria da experiência do utilizador e na melhoria da usabilidade ou produtividade.

  • Diferenciação: Avalie se o recurso oferece um fator diferenciador ou vantagem competitiva em comparação com outras aplicações no mercado.

Avalie o custo da funcionalidade da aplicação

É essencial que entenda o custo associado a cada recurso para uma alocação e otimização de recursos eficazes. Considere vários aspetos ao avaliar custos, tais como:

  • Esforço de desenvolvimento: avalie o tempo, os recursos e a experiência necessários para desenvolver e manter o recurso ou os recursos circundantes. Recursos subutilizados muitas vezes se tornam uma fonte chave de dívida técnica.

  • Manutenção e suporte: considere os custos contínuos associados à manutenção e suporte ao recurso, incluindo correções de bugs, atualizações de segurança e solução de problemas.

  • Utilização de infraestrutura e recursos: avalie o efeito do recurso nos requisitos de infraestrutura, incluindo recursos do servidor, armazenamento e largura de banda.

  • Complexidade da integração: avalie a complexidade e o custo da integração do recurso com outros sistemas ou serviços de terceiros.

  • Considerações de desempenho: avalie o efeito do recurso no desempenho da aplicação, incluindo escalabilidade, tempo de resposta e uso de recursos.

Analisar o valor da funcionalidade da aplicação com as partes interessadas

Analise o valor dos recursos do aplicativo com as partes interessadas envolvendo pessoal-chave, como gerentes de produto, desenvolvedores de software e analistas de negócios, para avaliar o valor de recursos específicos nos objetivos de negócios. Esta colaboração é essencial para a otimização de custos, pois fornece informações sobre os esforços de manutenção e identifica funcionalidades que podem prejudicar a produtividade ou prejudicar o desenvolvimento de funcionalidades novas e valiosas. A sua equipa de desenvolvimento pode fornecer informações importantes sobre quanto trabalho é necessário para manter determinadas funcionalidades. Encoraje-os a falar sobre recursos que podem dar mais trabalho do que benefício, especialmente se esses recursos distraírem a equipa de criar novos.

Determine o futuro da funcionalidade

Com base na sua análise e avaliação, determine o futuro dos recursos do aplicativo. Remova, reinvista ou rentabilize qualquer funcionalidade de aplicação que não proporcione um retorno sobre o investimento:

  • Remoção: considere o fim da vida útil planejado de um recurso de aplicativo com base em dados. As razões para a remoção de recursos podem incluir baixa procura por parte dos clientes, custos de manutenção elevados, complexidade ou redundância cuja correção não compensa o esforço. Crie um plano para a remoção, que pode envolver a refatoração do código, a atualização de dependências ou a reorganização da interface do usuário.

    Ícone de risco Risco: Pode remover inadvertidamente funcionalidades que são críticas para determinados utilizadores ou cenários e que podem afetar negativamente o desempenho, as operações e a segurança na sua aplicação.

  • Reinvestir: Alguns recursos da aplicação podem não acrescentar valor suficiente no seu estado atual, mas podem acrescentar valor se reinvestir neles. Reinvestimento significa reformular ou promover a funcionalidade da aplicação. Priorizar as melhorias identificadas com base no seu valor e viabilidade. Determine o plano e o cronograma para a implementação das alterações. Considere fatores como recursos de desenvolvimento, dependências e o efeito potencial na aplicação.

  • Monetizar: Transforme os recursos da aplicação numa oportunidade de geração de receitas por meio da monetização. Às vezes, os recursos agregam valor aos usuários, mas não valem o investimento atual. Explore oportunidades para rentabilizar estas funcionalidades, tais como oferecê-las como suplementos pagos separados ou licenciá-las a outras empresas.

Otimize os recursos de carga de trabalho

A otimização dos recursos da carga de trabalho envolve a remoção de quaisquer recursos que não estejam a ser utilizados e a otimização de quaisquer recursos subutilizados de que a carga de trabalho precisa. Este esforço pode economizar dinheiro, evitar desperdícios e garantir que a carga de trabalho use apenas os recursos que agregam valor.

Remova os recursos de carga de trabalho não utilizados. Os recursos não utilizados são serviços implementados que a sua carga de trabalho ou processos de operações não usam. Esses recursos podem estar ociosos a longo prazo, órfãos ou esquecidos. Eles não fornecem retorno sobre o investimento, e deve removê-los. As causas comuns de recursos não utilizados incluem:

  • Alertas.
  • Compilações de demonstração.
  • Desmantelamento do ambiente.
  • Desativação de funcionalidades.
  • Endereços IP.
  • Firewalls de rede.
  • Prova de conceito.
  • Capturas instantâneas.
  • Contas de armazenamento.
  • Ambientes de teste temporários.
  • Ambientes temporários de triagem.

Para remover recursos não utilizados em uma carga de trabalho, considere estas etapas:

  1. Faça um inventário: realize um inventário completo de todos os recursos dentro da carga de trabalho em todos os ambientes.

  2. Encontrar recursos órfãos: os recursos podem ficar órfãos quando não forem mais necessários ou quando os recursos pai forem removidos. Por exemplo, pode remover uma máquina virtual, mas a respetiva conta de armazenamento associada não é removida. Revise a carga de trabalho para identificar recursos desnecessários ou órfãos.

  3. Remover componentes ociosos: normalmente há um custo associado a um recurso implantado. Mesmo que o recurso permita parar ou realocar, pode continuar a pagar pelo recurso. Considere a remoção de recursos ociosos. Se precisar dos dados, faça backup deles primeiro e, em seguida, remova o recurso. É melhor reimplementar o recurso e restaurar os dados do que permitir que o recurso permaneça ocioso.

Otimizar recursos subutilizados. Recursos subutilizados representam despesas desperdiçadas à medida que paga pela capacidade de recursos que não é totalmente utilizada. Identifique e otimize esses recursos para reduzir custos e alocar recursos de forma mais eficaz. Para avaliar e otimizar o custo de recursos subutilizados, siga estas etapas:

  1. Monitorize os recursos: use ferramentas para monitorizar a quantidade de CPU, memória e armazenamento que realmente utiliza. Escolha o melhor plano que corresponda às suas necessidades com base nessas informações.

  2. Analise a utilização: Observe os dados para descobrir quais recursos não utiliza. Preste atenção aos recursos que têm baixo uso ao longo do tempo ou grandes diferenças no uso entre períodos de pico e de menor atividade.

  3. Dimensionamento correto: verifique se há muitos recursos alocados a funcionalidades que não estão a ser utilizadas. Em caso afirmativo, ajuste o seu tamanho para corresponder melhor ao que realmente precisa.

  4. Dimensionamento automático: Utilize o dimensionamento automático para ajustar os recursos que utiliza consoante a carga de utilização. Certifique-se de definir um limite máximo de escala para evitar picos repentinos que podem ser caros e desnecessários.

Depois de fazer esses ajustes, teste para se certificar de que tudo ainda funciona como deveria. Monitore continuamente a utilização de recursos e ajuste a alocação de recursos à medida que as demandas de carga de trabalho mudam ao longo do tempo. Analise e otimize regularmente a utilização de recursos para manter a eficiência de custos e a otimização do desempenho.

Otimize os recursos de recuperação de desastres. A otimização de ambientes de recuperação de desastres visa garantir que os recursos alocados para a recuperação de desastres sejam usados de forma eficiente. Uma estratégia de recuperação de desastres morna (ativo-passivo) é uma fonte comum de subutilização. Numa estratégia de disaster recovery warm, um ambiente recebe toda a carga, enquanto o outro ambiente fica ocioso até que haja um cenário de desastre. Para otimizar um ambiente de recuperação de desastres, considere como uma abordagem hot (active-active), uma abordagem cold (active-off) ou uma abordagem active-redeploy pode ajudar a evitar recursos subutilizados. Aqui está uma visão geral dessas três abordagens de recuperação de desastres:

  • Planos ativos: Os ambientes primário e secundário atendem ao tráfego simultaneamente. A sua carga de trabalho pode equilibrar cargas entre estes ambientes e responder às demandas em tempo real. Distribuir a carga entre dois ambientes ativos permite-lhe usar recursos mais baratos, reduzir gargalos de ponto único e utilizar as capacidades ao máximo. Pode conduzir a custos reduzidos em termos de desperdício de recursos ou de inatividade. Uma abordagem hot pode exigir mais investimento em sincronização e manutenção da paridade entre os dois ambientes.

  • Planos a frio: um modelo de recuperação de desastres a frio envolve um ambiente em espera que permanece inativo até que um desastre desencadeie a necessidade de failover. Como o ambiente de espera não está em execução ativa, os custos relacionados a operações de computação, armazenamento e rede são minimizados. As suas despesas giram em torno do armazenamento de backups, imagens de máquinas virtuais (VM) ou modelos. O failover no modelo frio pode levar mais tempo porque os recursos precisam ser inicializados e os dados podem precisar ser restaurados. Certifique-se de que o tempo de recuperação esteja alinhado com os objetivos de tempo de recuperação (RTO) da sua empresa antes de se comprometer com essa abordagem.

  • Redeploy ativo: Esta estratégia usa a infraestrutura como código. Quando ocorre um evento de failover, implementa o ambiente secundário, usando modelos e scripts predefinidos. Sem recursos de computação pré-implantados no ambiente de recuperação de desastres, poupa nos custos associados à manutenção de recursos ociosos. Só incorre em custos durante a implantação real num cenário de failover. Como a abordagem fria, este modelo pode introduzir tempos de recuperação mais longos, especialmente se a complexidade da infraestrutura for alta. Deve testar e medir o tempo de recuperação para garantir que este cumpra o seu objetivo de tempo de recuperação.

Otimize os recursos da plataforma

A otimização dos recursos da plataforma envolve a eliminação ou atualização de recursos da plataforma, como camadas de desempenho e definições de configuração, para otimizar custos. Ele ajuda a alinhar os gastos com os requisitos da carga de trabalho e evita gastos desnecessários em recursos desnecessários. Aqui estão algumas dicas para otimizar o custo dos recursos da plataforma:

  • Conheça as capacidades dos produtos que compra: antes de poder otimizar, precisa de um inventário claro dos serviços e das suas funcionalidades pelas suas plataformas na nuvem. Entenda os recursos e funcionalidades das plataformas ou serviços no seu ambiente de trabalho. Tenha em atenção o nível específico que escolheu e as funcionalidades que cada nível oferece. Por exemplo, se não precisar de dimensionamento automático ou rede avançada, um plano de camada inferior pode ser suficiente.

  • Desativar recursos não utilizados: identifique e desative os recursos da plataforma que custam dinheiro. Você pode ter snapshots de armazenamento desnecessários, discos não utilizados, recursos de segurança redundantes ou recursos de rede subutilizados.

  • Utilize as versões certas: as versões mais recentes de um serviço podem fornecer desempenho semelhante pelo mesmo preço. Por exemplo, uma máquina virtual com hardware mais recente geralmente pode fornecer o mesmo desempenho por menos dinheiro.

  • Use as configurações corretas: você pode estar pagando por mais disponibilidade ou desempenho do que precisa. Eliminar as garantias de disponibilidade ou desempenho de que a carga de trabalho não necessita.

  • Elimine a automação desnecessária: avalie os seus processos de automação e elimine qualquer automação não utilizada que possa incorrer em custos extras.

  • Elimine a redundância de ferramentas: Livre-se de ferramentas de que não precisa ou ferramentas que fornecem a mesma função. Avalie a redundância potencial nas ferramentas que utiliza para criar software, escrever código, segurança e monitorização. Por exemplo, se utilizar o GitHub Actions para criar o seu software, não precisará de comprar outra ferramenta que crie software. Antes de comprar recursos ou ferramentas, verifique se já há uma ferramenta no seu ambiente de trabalho que possa fazer o trabalho. Elimine a redundância de ferramentas para evitar o desperdício de dinheiro e aproveitar ao máximo o que já tem.

Seja metódico nos esforços de otimização

Prevenir componentes não otimizados é garantir proativamente que os componentes sejam essenciais e otimizados antes de adicionar ou modificar. A melhor maneira de se livrar dos resíduos é evitá-los em primeiro lugar. Utilize estratégias que evitem despesas desnecessárias, abordando ineficiências na raiz, garantindo que uma carga de trabalho seja executada de forma rentável desde o início. Para ajudar a prevenir o desperdício, considere estas estratégias:

  • Encontre a causa raiz antes de alterar as soluções: Antes de corrigir um problema, certifique-se de que sabe o que realmente o está a causar. Por exemplo, se o seu site estiver lento, não mude imediatamente para um novo sistema. Primeiro, descubra por que é lento. Você pode descobrir que o problema real é outra coisa, como consultas de banco de dados ruins. Corrija o problema real para poupar tempo e dinheiro.

  • Aplicar metadados: aplique metadados para organizar e controlar recursos. Você pode usar metadados para categorizar e agrupar recursos, facilitando o rastreamento, a exclusão e a prevenção de recursos órfãos. Crie uma estratégia de metadados consistente entre recursos. Considere adicionar proprietários, a duração prevista do recurso (por exemplo, sunset-30d) ou outras tags.

  • Documente alterações não padrão: documente quaisquer alterações feitas na sua infraestrutura ou configurações realizadas fora do processo de controlo normal da sua carga de trabalho para reduzir custos imprevistos. Por exemplo, pode aumentar as capacidades de dimensionamento (para cima ou para fora) de um recurso para atender a uma procura de curto prazo ou fazer a triagem de um problema, mas esquecer-se de voltar a reduzir a sua escala. Faça uma lista de alterações não padrão e use-a como um lembrete para reverter as alterações quando elas não forem mais necessárias.

  • Mantenha as coisas simples: simplifique a sua infraestrutura e minimize a complexidade para ajudar a reduzir custos. Use apenas os recursos e serviços necessários que atendam às suas necessidades.

Facilitador do Microsoft Azure

Otimizando recursos do aplicativo: você pode usar o Azure Monitor e o Application Insights para monitorar o uso do seu aplicativo e identificar áreas que são ou não usadas. Com base nos insights coletados, pode tomar decisões informadas para remover ou otimizar recursos não utilizados ou subutilizados.

Otimizando recursos de carga de trabalho e recursos da plataforma: o Assistente do Azure fornece recomendações de custo para identificar e eliminar recursos não utilizados. Você pode usar o Advisor para analisar o uso de recursos e receber sugestões sobre recursos a serem removidos ou reduzidos. A pasta de trabalho de Otimização de Custos no Assistente do Azure serve como um ponto central para algumas das ferramentas mais usadas que podem ajudá-lo a impulsionar as metas de utilização e eficiência. Ele oferece uma variedade de recomendações, incluindo recomendações de custos do Assistente do Azure. Também ajuda a identificar recursos ociosos e a gerir máquinas virtuais indevidamente desalocadas.

O Azure Monitor suporta workbooks. Com livros do Azure Monitor, pode localizar ou criar um livro que localiza e comunica recursos órfãos num âmbito definido. Você pode usar a Automação do Azure para desligar máquinas virtuais durante períodos de inatividade. Os desligamentos de recursos ajudam a reduzir custos, minimizando o uso de recursos ociosos.

Os stacks de implantação ajudam a evitar recursos órfãos. Implemente os seus ficheiros Bicep ou templates ARM como uma pilha de implementação e defina a respetiva definição actionOnUnmanage como eliminar. Quando remove um recurso do template, a stack apaga esse recurso na próxima implantação. Revise os resultados da simulação what-if da stack de implementação antes de aplicar uma alteração que apague recursos.

Pode utilizar o recurso de dimensionamento automático no Azure para dimensionar automaticamente a sua aplicação com base em condições predefinidas, para que não seja necessário provisionar capacidade excessiva. O dimensionamento automático pode ajudá-lo a alocar recursos de forma eficiente e econômica.

De uma perspetiva de design, os balanceadores de carga do Azure podem distribuir cargas entre zonas de disponibilidade e regiões. Esses balanceadores de carga podem ajudar a eliminar recursos ociosos, por exemplo, em abordagens de recuperação de desastres.

Lista de verificação de otimização de custos

Consulte o conjunto completo de recomendações.