COST09-BP03 Fornecer recursos dinamicamente - Pilar Otimização de custos

COST09-BP03 Fornecer recursos dinamicamente

Os recursos são provisionados de maneira planejada. Isso pode ser baseado na demanda, como por meio da escalabilidade automática, ou no tempo, em que a demanda é previsível e os recursos são fornecidos com base no tempo. Esses métodos ocasionam a menor quantidade de superprovisionamento ou subprovisionamento.

Nível de risco exposto se esta prática recomendada não for estabelecida: Baixo

Orientação para implementação

Há várias maneiras de os clientes da AWS aumentarem os recursos disponíveis para suas aplicações e fornecerem recursos para atender à demanda. Uma dessas opções é usar o AWS Programador de Instâncias, que automatiza a inicialização e a interrupção das instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e do Amazon Relational Database Service (Amazon RDS). A outra opção é usar o AWS Auto Scaling, que possibilita escalar automaticamente seus recursos de computação com base na demanda de sua aplicação ou serviço. O fornecimento de recursos com base na demanda permitirá que você pague somente pelos recursos utilizados, reduza os custos lançando recursos quando eles forem necessários e os encerre quando não forem.

O AWS Programador de Instâncias possibilita configurar a interrupção e o início de suas instâncias do Amazon EC2 e do Amazon RDS em horários definidos para que você possa atender à demanda pelos mesmos recursos em um padrão de tempo consistente, por exemplo, acesso diário dos usuários às instâncias do Amazon EC2 às 8h, que não são necessárias após as 18h. Essa solução ajuda a reduzir o custo operacional interrompendo recursos que não estão sendo usados e iniciá-los quando eles são necessários.

Diagrama mostrando a otimização de custos com o uso do AWS Programador de Instâncias.

Otimização de custos com o AWS Programador de Instâncias.

Você também pode configurar facilmente programações para suas instâncias do Amazon EC2 em suas contas e regiões com uma interface de usuário (IU) simples usando a Configuração rápida do AWS Systems Manager. É possível programar instâncias do Amazon EC2 e do Amazon RDS com o AWS Programador de Instâncias e interromper e iniciar instâncias existentes. No entanto, você não pode interromper e iniciar instâncias que façam parte de seu grupo do Auto Scaling (ASG) nem que gerenciem serviços, como o Amazon Redshift ou o Amazon OpenSearch Service. Os grupos do Auto Scaling têm seu próprio agendamento para as instâncias no grupo e essas instâncias são criadas.

O AWS Auto Scaling ajuda você a ajustar sua capacidade para manter uma performance estável e previsível pelo menor custo possível para atender às variações de demanda. Trata-se de um serviço totalmente gerenciado e gratuito para escalar a capacidade de sua aplicação que se integra a instâncias do Amazon EC2 e frotas spot, Amazon ECS, Amazon DynamoDB e Amazon Aurora. O Auto Scaling oferece descoberta automática de recursos para ajudar a encontrar recursos na sua workload que possam ser configurados, tem estratégias de ajuste de escala incorporadas para otimizar a performance, os custos ou um equilíbrio entre os dois, além de oferecer escalabilidade preditiva para ajudar com picos que ocorrem regularmente.

Há várias opções de ajuste de escala disponíveis para escalar seu grupo do Auto Scaling:

  • Manter os níveis de instância atuais em todos os momentos

  • Escalar manualmente

  • Escalar com base em um cronograma

  • Escalar com base na demanda

  • Usar o ajuste de escala preditivo

As políticas do Auto Scaling diferem e podem ser categorizadas como políticas de ajuste de escala dinâmico e programado. As políticas dinâmicas são ajuste de escala manual ou dinâmico, ajuste de escala programado ou preditivo. Você pode usar políticas para ajuste de escala dinâmico, programado e preditivo. Também é possível usar métricas e alarmes do Amazon CloudWatch para acionar eventos de escalabilidade para sua workload. Recomendamos que você use modelos de lançamento, que permitem acessar os recursos e melhorias mais recentes. Nem todos os recursos do Auto Scaling estão disponíveis quando você usa as configurações de inicialização. Por exemplo, você não pode criar um grupo do Auto Scaling que inicie instâncias spot e sob demanda nem que especifique vários tipos de instância. Você deve usar um modelo de inicialização para configurar esses recursos. Ao usar modelos de inicialização, recomendamos que você crie a versão de cada um. Com o versionamento dos modelos de inicialização, você pode criar um subconjunto do conjunto completo de parâmetros. Depois, é possível reutilizá-lo para criar outras versões do mesmo modelo de inicialização.

É possível usar o AWS Auto Scaling ou incorporar ajuste de escala em seu código com as APIs da AWS ou SDKs. Isso reduz os custos gerais da workload removendo o custo operacional de fazer alterações manualmente em seu ambiente, e alterações podem ser realizadas muito mais rapidamente. Isso também atende à mobilização de recursos da workload de acordo com sua demanda a qualquer momento. Para seguir essa prática recomendada e fornecer recursos de forma dinâmica para sua organização, você precisa entender a escalabilidade horizontal e vertical na Nuvem AWS, bem como a natureza das aplicações executadas em instâncias do Amazon EC2. É melhor para sua equipe de gerenciamento financeiro na nuvem trabalhar com equipes técnicas a fim de seguir essa prática recomendada.

O Elastic Load Balancing (Elastic Load Balancing) ajuda a escalar distribuindo a demanda entre vários recursos. Com o uso do ASG e do Elastic Load Balancing, você pode gerenciar as solicitações recebidas roteando o tráfego de forma ideal para que nenhuma instância fique sobrecarregada em um grupo do Auto Scaling. As solicitações seriam distribuídas entre todos os destinos de um grupo-alvo de forma contínua, sem considerar a capacidade nem a utilização.

As métricas típicas podem ser métricas padrão do Amazon EC2, como utilização de CPU, throughput de rede e latência de solicitação/resposta observada pelo Elastic Load Balancing. Quando possível, você deve usar uma métrica que seja indicativa da experiência do cliente. Normalmente é uma métrica personalizada que pode se originar do código da aplicação em sua workload. Para elaborar como atender à demanda dinamicamente neste documento, vamos agrupar o Auto Scaling em duas categorias, como modelos de fornecimento baseados na demanda e baseados no tempo, e nos aprofundarmos em cada uma delas.

Fornecimento baseado em demanda: Utilize a elasticidade da nuvem para fornecer recursos para atender às mudanças na demanda, confiando no estado de demanda quase em tempo real. Para fornecimento baseado em demanda, use as APIs ou os recursos de serviço para variar programaticamente a quantidade de recursos de nuvem em sua arquitetura. Isso permite que você ajuste a escala de componentes em sua arquitetura e aumente o número de recursos durante picos de demanda a fim de manter a performance e reduzir a capacidade quando a demanda diminui para reduzir os custos.

Diagrama descrevendo as políticas de ajuste de escala com base na demanda, como ajuste de escala simples/em etapas e rastreamento de metas.

Políticas de ajuste de escala dinâmico com base na demanda

  • Ajuste de escala simples/em etapas: Monitora métricas e adiciona/remove instâncias de acordo com as etapas definidas manualmente pelos clientes.

  • Monitoramento de objetivo: Mecanismo de controle semelhante a um termostato que adiciona ou remove instâncias automaticamente para manter as métricas em uma meta definida pelo cliente.

Ao arquitetar com uma abordagem baseada em demanda, tenha em mente dois pontos essenciais. Primeiro, entenda a rapidez com que você deve provisionar novos recursos. Segundo, entenda que o tamanho da margem entre oferta e demanda mudará. Você deve estar pronto para lidar com a taxa de alteração na demanda e também estar pronto para falhas de recursos.

Oferta baseada em tempo: Uma abordagem baseada em tempo alinha a capacidade de recurso a uma demanda que é previsível ou bem definida no tempo. Essa abordagem costuma não depender dos níveis de utilização dos recursos. Uma abordagem baseada em tempo garante que os recursos estejam disponíveis no momento específico em que são necessários e podem ser fornecidos sem nenhum atraso devido a procedimentos de inicialização e verificações do sistema ou de consistência. Usando uma abordagem baseada em tempo, você pode fornecer recursos adicionais ou aumentar a capacidade durante períodos ocupados.

Diagrama descrevendo as políticas de ajuste de escala baseado em tempo, como ajuste de escala programado e preditivo.

Políticas de ajuste de escala baseado em tempo

Você pode usar o ajuste de escala automático programado ou preditivo para implementar uma abordagem baseada em tempo. As workloads podem ser programadas para aumentar ou reduzir a escala horizontalmente em horários definidos (por exemplo, o início do horário comercial), tornando os recursos disponíveis quando os usuários chegarem ou a demanda aumentar. A escalabilidade preditiva usa padrões para aumentar a escala horizontalmente enquanto a escalabilidade programada usa horários predefinidos para isso. Você também pode usar a estratégia de seleção de tipo de instância baseada em atributos (ABS) em grupos do Auto Scaling, o que permite que você expresse seus requisitos de instância como um conjunto de atributos, como vCPU, memória e armazenamento. Isso permite usar automaticamente os tipos de instância de geração mais recente quando eles são lançados e acessar uma variedade mais ampla de capacidade com instâncias spot do Amazon EC2. A frota do Amazon EC2 e o Amazon EC2 Auto Scaling selecionam e executam instâncias que se ajustam aos atributos especificados, eliminando a necessidade de escolher manualmente os tipos de instância.

Você também pode aproveitar as APIs da AWS e os SDKs e o AWS CloudFormation para provisionar e desativar automaticamente ambientes inteiros conforme necessário. Essa abordagem é adequada para ambientes de desenvolvimento ou teste que são executados apenas nos períodos ou horários comerciais definidos. Você pode usar APIs para ajustar a escala dos recursos dentro de um ambiente (ajuste de escala vertical). Por exemplo, você pode escalar uma workload de produção alterando o tamanho ou a classe da instância. Isso pode ser feito interrompendo e iniciando a instância e selecionando a classe ou o tamanho da instância diferente. Essa técnica também pode ser aplicada a outros recursos, como Volumes Elásticos do Amazon EBS, que podem ser modificados para aumentar o tamanho, ajustar a performance (IOPS) ou alterar o tipo de volume durante o uso.

Ao arquitetar com uma abordagem baseada em tempo, tenha em mente dois pontos essenciais. Primeiro, qual é a consistência do padrão de uso? Segundo, qual será o impacto se o padrão mudar? Você pode aumentar a precisão das previsões monitorando suas workloads e usando inteligência de negócios. Se você vir alterações significativas no padrão de uso, poderá ajustar os tempos para garantir que a cobertura seja fornecida.

Etapas da implementação

  • Configure o ajuste de escala programado: Para alterações previsíveis na demanda, o ajuste de escala baseado em tempo pode fornecer a quantidade correta de recursos em tempo hábil. Também será útil se a criação e a configuração de recursos não forem rápidas o suficiente para responder a alterações na demanda. Usando a análise de workload, configure a escalabilidade programada usando o AWS Auto Scaling. Para configurar a programação baseada em tempo, você pode usar o ajuste de escala preditivo do ajuste de escala programado para aumentar o número de instâncias do Amazon EC2 em seus grupos do Auto Scaling com antecedência de acordo com as alterações de carga esperadas ou previsíveis.

  • Configure o ajuste de escala preditivo: O ajuste de escala preditivo permite aumentar com antecedência o número de instâncias do Amazon EC2 em seu grupo do Auto Scaling de padrões diários e semanais nos fluxos de tráfego. Se você tiver picos de tráfego regulares e aplicações que levem muito tempo para serem iniciadas, considere usar a escalabilidade preditiva. A escalabilidade preditiva pode ajudar você a escalar com maior rapidez inicializando a capacidade antes da carga projetada em comparação com a escalabilidade dinâmica isolada, que é reativa por natureza. Por exemplo, se os usuários começarem a usar sua workload no início do horário comercial e não usá-la após o expediente, a escalabilidade preditiva poderá adicionar capacidade antes do horário comercial, o que elimina o atraso da escalabilidade dinâmica para reagir à mudança no tráfego.

  • Configure o ajuste de escala automático dinâmico: Para configurar o ajuste de escala com base nas métricas ativas da workload, use o Auto Scaling. Use a análise e configure o Auto Scaling para iniciar nos níveis de recursos corretos e garanta que a workload escale no tempo necessário. Você pode iniciar e dimensionar automaticamente uma frota de instâncias sob demanda e instâncias spot em um único grupo do Auto Scaling. Além de receber descontos pelo uso de instâncias spot, você pode usar instâncias reservadas ou um Savings Plan para receber taxas com desconto do preço regular da instância sob demanda. Todos esses fatores combinados ajudam você a otimizar sua economia de custos para instâncias do Amazon EC2 e determinar a escala e a performance desejadas para sua aplicação.

Recursos

Documentos relacionados:

Vídeos relacionados:

Exemplos relacionados: