Skip to content

Latest commit

 

History

History
130 lines (121 loc) · 10.1 KB

AutoScaling.md

File metadata and controls

130 lines (121 loc) · 10.1 KB

Auto Scaling

O Amazon Auto Scaling é um serviço versátil que oferece ajustes automáticos de capacidade não apenas para instâncias da Amazon EC2, mas também para outros recursos da AWS. Ao dimensionar recursos de forma dinâmica com base em métricas predefinidas, como utilização de CPU ou tráfego de rede, o Auto Scaling permite otimizar o desempenho e a eficiência de custos. Além disso, ele se integra perfeitamente a vários serviços da AWS, permitindo dimensionamento dinâmico em uma ampla variedade de recursos.

Recursos

  • Dimensionamento dinâmico: O Auto Scaling ajusta automaticamente o número de instâncias da EC2, serviços Docker em execução no ECS, clusters Kubernetes no EKS, capacidade de leitura/gravação no DynamoDB, instâncias de banco de dados Aurora e outros recursos, em resposta às mudanças na demanda, garantindo que suas aplicações tenham a quantidade adequada de recursos a todo momento.
  • Políticas de dimensionamento: Você pode definir políticas de dimensionamento que determinam quando e como dimensionar suas instâncias EC2, serviços Docker, capacidade de leitura/gravação no DynamoDB, entre outros, com base em métricas como utilização de CPU, tráfego de rede ou métricas personalizadas.
  • Integração com serviços da AWS: O Auto Scaling pode ser integrado a outros serviços da AWS, como o Amazon CloudWatch, Elastic Load Balancing, AWS Identity and Access Management (IAM), para obter um dimensionamento mais eficiente e dinâmico em uma variedade de recursos.
  • Monitoramento da saúde das instâncias: O Auto Scaling monitora continuamente a saúde de suas instâncias EC2, contêineres, bancos de dados, etc., e substitui as instâncias não saudáveis para manter a capacidade e disponibilidade desejadas.
  • Dimensionamento agendado: É possível definir ações de dimensionamento agendadas para ajustar automaticamente a capacidade de suas instâncias, contêineres, bancos de dados, etc., com base em padrões previsíveis, como aumentar durante horários de pico e reduzir durante horários de menor demanda.
  • Integração com o AWS Elastic Beanstalk: O Auto Scaling pode ser usado com o AWS Elastic Beanstalk para dimensionar automaticamente suas aplicações web com base em padrões de tráfego.

Termos e Conceitos

Escalabilidade

  • Escalabilidade significa que a aplicação/sistema pode lidar com cargas maiores ao se adaptar.
  • Há dois tipos de escalabilidade:
    • Escalabilidade Vertical
      • Escalabilidade Vertical significa aumentar o tamanho da instância.
      • Melhorar qualquer parte da instância.
      • Sua aplicação roda em um t2.micro, escalar verticalmente significa rodá-la em um t2.large, por exemplo.
      • A escalabilidade vertical é muito comum para sistemas não distribuídos, como um banco de dados.
      • Geralmente, há um limite para o quanto você pode escalar verticalmente (limite de hardware).
    • Escalabilidade Horizontal (= elasticidade)
      • Escalabilidade Horizontal significa aumentar o número de instâncias/sistemas para sua aplicação.
      • A escalabilidade horizontal implica em sistemas distribuídos.
      • Isso é muito comum em aplicações web/aplicações modernas.

Disponibilidade

  • A Alta Disponibilidade geralmente está associada à escalabilidade horizontal.
  • Alta disponibilidade significa executar sua aplicação/sistema em pelo menos 2 Zonas de Disponibilidade.
  • O objetivo da alta disponibilidade é sobreviver à perda de um centro de dados (desastre).

Escalabilidade vs Elasticidade (vs Agilidade)

  • Escalabilidade: capacidade de acomodar uma carga maior tornando o hardware mais poderoso (escalar para cima) ou adicionando nós (escalar para fora)
  • Elasticidade: uma vez que um sistema é escalável, a elasticidade significa que haverá algum "auto-escalonamento" para que o sistema possa se adaptar à carga. Isso é "amigável à nuvem", pagamento por uso, atende à demanda, otimiza custos
  • Agilidade: (não relacionado à escalabilidade - distrativo) novos recursos de TI estão a apenas um clique de distância, o que significa que você reduz o tempo para disponibilizar esses recursos para seus desenvolvedores de semanas para apenas minutos.

Grupos de Auto Dimensionamento - Estratégias de Dimensionamento

  • Dimensionamento Manual: atualiza o tamanho de um Grupo de Auto Dimensionamento manualmente
  • Dimensionamento Dinâmico: responde à demanda em constante mudança
    • Dimensionamento Simples / por Etapas
      • Quando um alarme CloudWatch é acionado (por exemplo, CPU > 70%), então adicione 2 unidades
      • Quando um alarme CloudWatch é acionado (por exemplo, CPU < 30%), então remova
      • (Ajusta o número de instâncias em execução com base na demanda da aplicação)
    • Dimensionamento por Acompanhamento de Alvo
      • Exemplo: quero que a CPU média do Grupo de Auto Dimensionamento fique em torno de 40%
    • Dimensionamento Agendado
      • Antecipe um dimensionamento com base em padrões de uso conhecidos
      • Exemplo: aumente a capacidade mínima para 10 às 17h de quarta-feira
      (O Auto Dimensionamento ajuda a garantir que sua aplicação tenha a capacidade necessária para lidar tanto com a demanda atual quanto com a futura)
  • Dimensionamento Preditivo
    • Utiliza aprendizado de máquina para prever o tráfego futuro com antecedência
    • Provisiona automaticamente o número correto de recursos com antecedência

Boas Práticas

  • Defina políticas de dimensionamento adequadas: Analise as métricas de desempenho da sua aplicação e a demanda esperada para definir políticas de dimensionamento que garantam uma alocação ótima de recursos, seja para instâncias EC2, serviços Docker, instâncias de banco de dados, etc.
  • Utilize dimensionamento dinâmico: Habilite o dimensionamento dinâmico com base em métricas em tempo real para ajustar automaticamente o número de instâncias, contêineres, capacidade de leitura/gravação no DynamoDB, etc., em resposta às mudanças na demanda, garantindo um desempenho e eficiência de custo ótimos.
  • Monitore e otimize: Monitore regularmente e analise o desempenho da sua aplicação, e ajuste as políticas de dimensionamento conforme necessário para otimizar a alocação de recursos e manter um desempenho ideal em diversos recursos da AWS.
  • Habilite o monitoramento detalhado: Ative o monitoramento detalhado para seus grupos de dimensionamento automático para coletar métricas mais granulares e tomar decisões de dimensionamento mais informadas, independentemente do recurso utilizado.
  • Utilize o dimensionamento agendado: Aproveite as ações de dimensionamento agendadas para ajustar automaticamente a capacidade das suas instâncias, contêineres, bancos de dados, etc., com base em padrões previsíveis, como aumentar durante horários de pico e reduzir durante horários de menor demanda.
  • Integre com outros serviços da AWS: Aproveite a integração com outros serviços da AWS, como Amazon CloudWatch, Elastic Load Balancing, AWS Identity and Access Management (IAM), para obter um dimensionamento mais eficiente e dinâmico em uma variedade de recursos.
  • Otimizar o período de espera: Configure um período de espera apropriado para evitar que o dimensionamento automático inicie ou termine instâncias adicionais imediatamente após uma atividade de dimensionamento, permitindo tempo para que as novas instâncias se estabilizem, seja para instâncias EC2, serviços Docker, instâncias de banco de dados, etc.