trilha

System Design/04 - Cloud Design Patterns/Messaging2 min

Priority Queue

Perguntas-guia
  • Que problema isso resolve?
  • Quando usar / quando NÃO usar?
  • Qual o principal trade-off?
  • Como isso falha em produção?

Conceito

Processar mensagens por importância, não por ordem de chegada — para que trabalho urgente não espere atrás de trabalho volumoso.

Duas implementações

Abordagem Como funciona
Filas separadas Uma fila por prioridade; consumidores leem a alta primeiro
Fila única com atributo O broker ordena por prioridade dentro da fila

Filas separadas são mais comuns porque a maioria dos brokers gerenciados não implementa prioridade nativa — e porque permitem dimensionar consumidores independentemente por faixa.

O problema da inanição

Se os consumidores sempre esvaziam a fila alta antes de olhar a baixa, e a fila alta nunca esvazia, a baixa nunca é processada.

As correções:

Técnica Como
Consumidores dedicados 8 workers na alta, 2 na baixa — a baixa sempre progride
Round-robin ponderado Ler 4 da alta para cada 1 da baixa
Envelhecimento Mensagem antiga sobe de prioridade com o tempo

Trade-offs

Prioridade resolve um problema real e cria dois.

O primeiro é a inflação de prioridade: se quem define a prioridade é quem produz a mensagem, tudo vira urgente. Sem um critério objetivo e um teto para a fatia de alta prioridade, o mecanismo se anula.

O segundo é a complexidade operacional: mais filas para monitorar, mais dimensionamento, e métricas que precisam ser separadas por faixa — uma latência agregada saudável pode esconder uma fila baixa completamente parada.

Há também um caminho mais simples que frequentemente resolve o mesmo problema: separar por tipo de trabalho em vez de por prioridade. Uma fila para operações interativas e outra para lotes, cada uma com seus workers, elimina a interferência sem exigir política de prioridade — e é essencialmente um Bulkhead.

Duas ou três faixas costumam ser suficientes. Sistemas com dez níveis de prioridade acabam usando dois na prática.

Exemplo prático

Uma plataforma com clientes em planos diferentes:

fila-premium   →  8 workers
fila-padrao    →  4 workers
fila-lote      →  2 workers

Cada faixa tem capacidade garantida. Um cliente premium não espera atrás de uma importação de 100 mil registros; e a fila de lote, mesmo com prioridade baixa, sempre progride, porque tem workers próprios.

Essa é a diferença entre prioridade por consumidores dedicados e prioridade estrita: a primeira garante um mínimo a todos, a segunda pode deixar o trabalho de baixa prioridade parado indefinidamente.

Relacionado


Parte de Messaging · roadmap.sh/system-design

Buscar

Busca por título, seção e texto das notas