Voltar
1 milhão de durable workflows por segundo no Postgres

DBOS chega a 1 milhão de durable workflows por segundo no Postgres com sharding via PgDog

Aprofundamento CEVIU

Aprofundamento

A DBOS mediu durable workflows no-op (sem steps) em Postgres sharded com PgDog. O resultado escalou de forma linear: 20 mil workflows por segundo com um servidor RDS db.m7i.4xlarge (16 cores, 64 GB de RAM) até 1 milhão por segundo com 50 shards. Foram 48 processos worker por shard, 2.400 no total, todos conectados a um roteador PgDog no próprio host. Os workflows entram numa única fila durável, com shard key aleatória uniforme.

Para a escala ser linear, cada operação de um workflow precisa cair em um único shard. Por isso a DBOS adicionou a coluna shard_key à tabela workflow_status e às dependentes, como workflow_steps. O dequeue também passou a ser por shard: cada processo percorre os shards um de cada vez. O problema apareceu entre 8 e 16 shards (cerca de 200 mil workflows/s). Qualquer perturbação, como um VACUUM grande, derrubava o cluster inteiro sem recuperação. A causa era um loop de feedback no dequeue com FOR UPDATE SKIP LOCKED: dequeues mais lentos atraem mais processos concorrentes, que geram mais contenção de lock, e a query precisa varrer mais linhas bloqueadas até achar uma livre. A correção foram advisory locks do Postgres, com poucos "dequeue locks" por shard. Quem não consegue o lock não espera e passa para o próximo shard.

O que mudou

Em 1 de maio de 2026, o CEVIU noticiou "Escala da Execução de Workflows no Postgres": um único servidor sustentava 144 mil escritas brutas e 43 mil workflows duráveis por segundo, com gargalos em WAL flushing e contenção de lock de tabela. Agora o teste usa 20 mil workflows/s por shard como teto sustentável e vai a 1 milhão por segundo com sharding. O gargalo relevante também mudou: em escala horizontal, o problema foi a contenção no dequeue, não o WAL de um nó. Os números dos dois testes não são diretamente comparáveis, já que o material não detalha se a configuração é a mesma.

Por que isso importa

Para quem opera filas ou orquestração sobre Postgres, a leitura é que sharding sozinho não basta. Se o seu worker faz polling com SKIP LOCKED em muitos processos, vale observar a latência do dequeue por shard e limitar a concorrência. Um VACUUM pesado pode virar incidente global sem esse freio. Em custo, o teste mostra o preço da escala: 50 instâncias RDS de grande porte para 1 milhão por segundo, num benchmark de workflows no-op.

Linha do tempo

  1. CEVIU noticia que um Postgres único sustenta 43 mil workflows duráveis por segundo.

  2. DBOS chega a 1 milhão de workflows por segundo com 50 shards e PgDog, usando advisory locks no dequeue.

Perguntas frequentes

O Postgres escala para 1 milhão de workflows por segundo?

Com sharding, sim, segundo o benchmark da DBOS. Foram 50 servidores Postgres com PgDog, cada um sustentando 20 mil workflows por segundo. Os workflows eram no-op, sem steps, então cargas reais podem render menos.

O que causava a queda de desempenho acima de 8 a 16 shards?

Um loop de feedback de contenção no dequeue. Quando um shard desacelerava, mais processos tentavam desenfileirar dele ao mesmo tempo, o que aumentava a disputa por locks e deixava as queries ainda mais lentas. O resultado era um colapso que não se recuperava.

Como os advisory locks resolveram o problema?

Cada shard tem poucos dequeue locks. O processo precisa obter um para desenfileirar e, se não conseguir, segue para o próximo shard sem esperar. Isso limita a concorrência por shard e quebra o loop.

Preciso usar o PgDog para obter esse resultado?

Não necessariamente. A DBOS afirma que resultados semelhantes são possíveis com qualquer engine de sharding e cita Citus, Neki e Multigres como alternativas. O PgDog foi escolhido por ser leve e open-source.

Fontes

Avalie este artigo:
Categoria
CEVIU DevOps
Publicado
30 de outubro de 2026
Editoria
CEVIU DevOps

Quer receber mais sobre CEVIU DevOps?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser