Filas justas do Amazon SQS - Amazon Simple Queue Service

Filas justas do Amazon SQS

As filas justas do Amazon SQS mitigam automaticamente o impacto de vizinhos barulhentos em filas multilocatário que contenham mensagens de várias entidades lógicas, como clientes, aplicações clientes ou tipos de mensagens. Nesses ambientes de filas compartilhadas, uma métrica crítica de desempenho é o tempo de permanência, que mede o tempo total que as mensagens passam em uma fila desde a chegada até o processamento. Quando um locatário cria acúmulo na fila publicando mais mensagens do que o sistema pode suportar, filas justas minimizam o impacto no tempo de permanência de outros locatários.

Estado estacionário

O diagrama a seguir ilustra uma fila multilocatário contendo mensagens de quatro locatários distintos (identificados como A, B, C e D). A fila opera em um estado estável e não há nenhum acúmulo de mensagens, pois os consumidores recebem mensagens assim que elas aparecem na fila. Todos os locatários experimentam tempos de permanência baixos. Nem toda a capacidade do consumidor é totalmente utilizada nesse estado estável.

Uma fila multilocatário que contém mensagens de quatro locatários diferentes (representados por A, B, C, D). A fila está em um estado estável, com mensagens em trânsito distribuídas uniformemente entre os locatários, sem acúmulo e com pouco tempo de permanência para todos.

Impacto de vizinhos barulhentos

O impacto de noisy neighbor (vizinho barulhento) ocorre quando um locatário em uma fila de vários locatários cria um acúmulo, aumentando o tempo de espera das mensagens para todos os outros. Um locatário pode se tornar um vizinho barulhento quando envia um volume maior de mensagens do que outros locatários ou quando os consumidores demoram mais para processar as mensagens desse locatário em particular.

Este diagrama ilustra como o aumento do tráfego do Locatário A cria um acúmulo na fila. Os consumidores estão ocupados processando as mensagens apenas do Locatário A, enquanto as mensagens de outros locatários aguardam, resultando em maiores tempos de espera para todos.

O resultado quando o locatário A aumenta o tráfego e cria um acúmulo na fila. As mensagens do Locatário A estão representadas em excesso no estado de trânsito, e as mensagens de outros locatários ficam presas na lista de pendências, resultando em um maior tempo de espera.

Mitigação com filas justas

O Amazon SQS detecta vizinhos barulhentos monitorando a distribuição de mensagens entre os locatários durante o processamento (o estado “em trânsito”). Quando um locatário tem um número desproporcionalmente grande de mensagens em trânsito em comparação a outros, o Amazon SQS o identifica como um vizinho barulhento e prioriza a entrega de mensagens para outros locatários. Essa abordagem reduz o impacto do tempo de permanência nos outros locatários.

Este diagrama ilustra como as filas justas do Amazon SQS abordam o problema do vizinho barulhento. Quando um locatário (Locatário A) fica barulhento, o Amazon SQS prioriza o retorno de mensagens de outros locatários (B, C e D). Essa priorização ajuda a manter baixos tempos de permanência para os locatários silenciosos — Locatário B, C e D —, enquanto o tempo de permanência das mensagens do Locatário A é elevado até que o acúmulo da fila seja consumido sem afetar outros locatários.

Uma ilustração de como as filas justas resolvem o problema do vizinho barulhento monitorando o estado de trânsito. Quando o Locatário A fica barulhento, o SQS tem como objetivo retornar mensagens de outros locatários (B, C, D) para que as mensagens em trânsito sejam distribuídas uniformemente entre eles. O tempo de permanência dos locatários (B, C, D) permanecerá baixo, enquanto o tempo de permanência das mensagens do Locatário A será elevado até que o acúmulo da fila seja consumido.
nota

O Amazon SQS não limita a taxa de consumo por locatário. Ele permite que os consumidores recebam mensagens de locatários vizinhos barulhentos quando há capacidade de consumo e a fila não tem outras mensagens para retornar. Assim como as filas padrão do Amazon SQS, as filas justas permitem throughput praticamente ilimitado, e não há limites para o número de locatários que você pode ter na fila.

Diferença com filas FIFO

As filas FIFO mantêm uma ordenação estrita, limitando o número de mensagens em trânsito de cada locatário. Embora isso evite vizinhos barulhentos, também limita o throughput de cada locatário. As filas justas são projetadas para cenários de vários locatários em que alto throughput, baixo tempo de permanência e alocação justa de recursos são prioridades. Filas justas permitem que vários consumidores processem mensagens do mesmo locatário simultaneamente, ao mesmo tempo em que ajuda todos os inquilinos a manter tempos de permanência consistentes.

Uso de filas justas

Os produtores de mensagens podem adicionar um identificador de locatário definindo um MessageGroupId em uma mensagem de saída:

// Send message with tenant identifier SendMessageRequest request = new SendMessageRequest() .withQueueUrl(queueUrl) .withMessageBody(messageBody) .withMessageGroupId("tenant-123"); // Tenant identifier sqs.sendMessage(request);

A capacidade de equidade será aplicada automaticamente em todas as filas padrão do Amazon SQS para mensagens com a propriedade MessageGroupId. Nenhuma alteração é necessária no código do consumidor, não há impacto na latência da API e não vem com limitação de taxa de throughput.

Métricas do CloudWatch de filas justas

O Amazon SQS fornece métricas adicionais do CloudWatch que ajudam a monitorar a mitigação do impacto de vizinhos barulhentos. Como exemplo, você pode comparar as métricas Approximate..InQuietGroups com métricas padrão em nível de fila. Durante picos de tráfego para um locatário específico, as métricas gerais do nível da fila podem revelar o aumento dos acúmulos ou a idade das mensagens mais antigas. No entanto, ao analisar os grupos silenciosos isoladamente, você pode identificar que a maioria dos grupos de mensagens não ruidosos ou locatários não são afetados.

Abaixo, você pode encontrar um exemplo em que a métrica padrão do acúmulo da fila (ApproximateNumberOfMessagesVisible) aumenta devido a um locatário barulhento, enquanto o acúmulo para locatários não barulhentos (ApproximateNumberOfMessagesVisibleInQuietGroups) permanece baixo.

Graph showing queue backlog spike for noisy groups while quiet groups remain low.

Para obter uma lista completa das métricas do Amazon SQS CloudWatch e suas descrições, consulte as métricas do CloudWatch para o Amazon SQS.