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á.
Ajuste de escala baseado no Amazon SQS
Importante
As informações e etapas a seguir mostram como calcular o backlog de filas do Amazon SQS 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 Criação de uma política de escalabilidade com monitoramento de destino com a matemática em métricas.
Esta seção mostra como dimensionar o grupo do Auto Scaling em resposta às alterações na carga do sistema em uma fila do Amazon Simple Queue Service (Amazon SQS). Para saber mais sobre como você pode usar o Amazon SQS, consulte o Guia do desenvolvedor do Amazon Simple Queue Service.
Há alguns cenários em que se pode cogitar a escalabilidade em resposta à atividade em uma fila do Amazon SQS. 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. A aplicação coloca os dados de bitmap brutos das imagens em uma fila do SQS 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.
Conteúdo
Usar o monitoramento do objetivo com a métrica correta
Se você usar uma política de escalabilidade com monitoramento de objetivo baseada em uma métrica de fila do Amazon SQS personalizada, a escalabilidade dinâmica poderá se ajustar à curva de demanda da aplicação de forma mais eficaz. Para obter mais informações sobre como escolher métricas para rastreamento de destino, consulte Escolher métricas.
O problema com o uso de uma métrica do CloudWatch Amazon SQS, como ApproximateNumberOfMessagesVisible
para rastreamento de metas, é que o número de mensagens na fila pode não mudar proporcionalmente ao tamanho do grupo de Auto Scaling que processa as mensagens da fila. Isso ocorre porque número de mensagens na fila do SQS não define exclusivamente o número de instâncias necessário. 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 o backlog por instância, comece com o atributo da fila
ApproximateNumberOfMessages
para determinar o comprimento da fila do SQS (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 estadoInService
, 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 Criação de uma política de escalabilidade com monitoramento de destino com a matemática em métricas.
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 fila do SQS.
-
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.

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 um SDK para publicar sua métrica personalizada no. 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 um 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 comando SQS. get-queue-attributes
Antes de começar, é necessário ter uma fila do Amazon SQS para usar. As seções a seguir pressupõem que você já tenha uma fila (padrão ou FIFO), um grupo de Auto Scaling EC2 e instâncias executando o aplicativo que usa a fila. Para obter mais informações sobre o Amazon SQS, consulte o Guia do desenvolvedor do Amazon Simple Queue Service.
Amazon SQS e proteção contra redução de escala na horizontal de instâncias
As mensagens que não foram processadas no momento em que uma instância foi terminada são devolvidas para a fila do SQS na qual elas podem ser processadas por uma outra instância que ainda esteja 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 suas aplicações para lidar com a terminação de instâncias sem problemas.