Política de escalabilidade baseada na Amazon SQS - Amazon EC2 Auto Scaling

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Política de escalabilidade baseada na Amazon SQS

Importante

As informações e etapas a seguir mostram como calcular o backlog de SQS filas da Amazon por instância usando o atributo ApproximateNumberOfMessages queue antes de publicá-lo como uma métrica personalizada para. CloudWatch No entanto, é possível economizar o custo e o esforço investidos na publicação de sua própria métrica usando a matemática em métricas. Para obter mais informações, consulte Crie uma política de escalabilidade de rastreamento de metas usando matemática métrica.

Esta seção mostra como escalar seu grupo de Auto Scaling em resposta às mudanças na carga do sistema em uma fila do Amazon Simple Queue Service (AmazonSQS). Para saber mais sobre como você pode usar a AmazonSQS, consulte o Guia do desenvolvedor do Amazon Simple Queue Service.

Há alguns cenários em que você pode pensar em escalar em resposta à atividade em uma SQS fila da Amazon. Por exemplo, suponha que você tenha uma aplicação Web que permita aos usuários fazer upload de imagens e usá-las online. Nesse cenário, cada imagem requer redimensionamento e codificação antes de poder ser publicada. O aplicativo é executado em EC2 instâncias em um grupo de Auto Scaling e está configurado para lidar com suas taxas de upload típicas. Instâncias não íntegras são encerradas e substituídas para manter os níveis de instância atuais em todos os momentos. O aplicativo coloca os dados brutos de bitmap das imagens em uma SQS fila para processamento. Ela processa as imagens e, em seguida, publica as imagens processadas onde possam ser visualizadas pelos usuários. A arquitetura desse cenário funcionará bem se o número de uploads de imagem não variar ao longo do tempo. No entanto, se o número de uploads mudar ao longo do tempo, você pode considerar o uso da escalabilidade dinâmica para dimensionar a capacidade do grupo do Auto Scaling.

Usar o monitoramento do objetivo com a métrica correta

Se você usar uma política de escalabilidade de rastreamento de metas com base em uma métrica de SQS fila personalizada da Amazon, a escalabilidade dinâmica pode se ajustar à curva de demanda do seu aplicativo com mais eficiência. Para obter mais informações sobre como escolher métricas para rastreamento de destino, consulte Escolher métricas.

O problema de usar uma SQS métrica CloudWatch da Amazon, como ApproximateNumberOfMessagesVisible para rastreamento de alvos, é que o número de mensagens na fila pode não mudar proporcionalmente ao tamanho do grupo Auto Scaling que processa as mensagens da fila. Isso porque o número de mensagens em sua SQS fila não define apenas o número de instâncias necessárias. O número de instâncias no grupo do Auto Scaling pode ser determinado por vários fatores, incluindo o tempo necessário para processar uma mensagem e a quantidade de latência (atraso na fila) aceitável.

A solução é usar uma métrica backlog por instância com o valor de destino sendo o backlog aceitável por instância a ser mantido. Você pode calcular esses números da seguinte maneira:

  • Backlog por instância: para calcular seu backlog por instância, comece com o atributo ApproximateNumberOfMessages queue para determinar o tamanho da SQS fila (número de mensagens disponíveis para recuperação da fila). Divida esse número pela capacidade de execução da frota, que para um grupo do Auto Scaling é o número de instâncias no estado InService, para obter o backlog por instância.

  • Backlog aceitável por instância: para calcular o valor de destino, primeiro determine o que a aplicação pode aceitar em termos de latência. Em seguida, pegue o valor de latência aceitável e divida-o pelo tempo médio que uma EC2 instância leva para processar uma mensagem.

Como exemplo, digamos que você tenha um grupo do Auto Scaling com 10 instâncias e o número de mensagens visíveis na fila (ApproximateNumberOfMessages) seja de 1.500. Se o tempo médio de processamento for de 0,1 segundo para cada mensagem e a latência mais longa aceitável for de 10 segundos, o backlog aceitável por instância será 10/0,1, o que equivale a 100 mensagens. Isso significa que 100 é o valor de destino da sua política de rastreamento de destino. O evento de aumento horizontal da escala ocorrerá quando o backlog por instância atingir o valor desejado. Como o backlog por instância já está em 150 mensagens (1.500 mensagens/10 instâncias), o grupo passa por um aumento da escala na horizontal com 5 instâncias para manter a proporção em relação ao valor do objetivo.

Os procedimentos a seguir demonstram como publicar a métrica personalizada e criar a política de escalabilidade com monitoramento do objetivo que configura o grupo do Auto Scaling para escalar com base nesses cálculos.

Importante

Para reduzir custos, lembre-se de usar a matemática em métricas. Para obter mais informações, consulte Crie uma política de escalabilidade de rastreamento de metas usando matemática métrica.

Existem três partes principais nessa configuração:

  • Um grupo de Auto Scaling para gerenciar EC2 instâncias com o objetivo de processar mensagens de uma SQS fila.

  • Uma métrica personalizada para enviar à Amazon CloudWatch que mede o número de mensagens na fila por EC2 instância no grupo Auto Scaling.

  • Uma política de rastreamento de metas que configura seu grupo de Auto Scaling para escalar com base na métrica personalizada e em um valor alvo definido. CloudWatch os alarmes invocam a política de escalabilidade.

O diagrama a seguir ilustra a arquitetura dessa configuração.

Diagrama arquitetônico do Amazon EC2 Auto Scaling usando filas

Limitações e pré-requisitos

Para usar essa configuração, é necessário estar ciente das seguintes limitações:

  • Você deve usar o AWS CLI ou an SDK para publicar sua métrica personalizada em CloudWatch. Em seguida, você pode monitorar sua métrica com AWS Management Console o.

  • O console do Amazon EC2 Auto Scaling não oferece suporte a políticas de escalabilidade de rastreamento de metas que usam métricas personalizadas. Você deve usar o AWS CLI ou an SDK para especificar uma métrica personalizada para sua política de escalabilidade.

As seções a seguir orientam você a usar o AWS CLI para as tarefas que você precisa realizar. Por exemplo, para obter dados métricos que reflitam o uso atual da fila, você usa o SQS get-queue-attributescomando. Verifique se você tem o CLI instalado e configurado.

Antes de começar, você deve ter uma SQS fila da Amazon para usar. As seções a seguir pressupõem que você já tenha uma fila (padrão ouFIFO), um grupo de Auto Scaling EC2 e instâncias executando o aplicativo que usa a fila. Para obter mais informações sobre a AmazonSQS, consulte o Guia do desenvolvedor do Amazon Simple Queue Service.

Amazon SQS e proteção escalável de instâncias

As mensagens que não foram processadas no momento em que uma instância é encerrada são retornadas à SQS fila, onde podem ser processadas por outra instância que ainda está em execução. Para aplicações em que tarefas de execução longa são executadas, você pode, opcionalmente, usar a proteção de redução de escala na horizontal de instâncias para ter controle sobre quais trabalhadores de fila são terminados quando o grupo do Auto Scaling sofre redução de escala na horizontal.

O pseudocódigo a seguir mostra uma maneira de proteger processos de trabalho orientados por fila de longa execução contra o término da redução de escala na horizontal.

while (true) { SetInstanceProtection(False); Work = GetNextWorkUnit(); SetInstanceProtection(True); ProcessWorkUnit(Work); SetInstanceProtection(False); }

Para obter mais informações, consulte Projete seus aplicativos para lidar com o encerramento de instâncias com elegância.