Esqueça SQS, RabbitMQ e Kafka. Use apenas o Postgres.

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00O SQS, o Kafka e o RabbitMQ podem ir direto para o lixo, porque agora você pode gerenciar suas filas diretamente
00:00:05dentro do Postgres com o PGMQ. E eu já consigo ouvir pessoas dizendo, mas isso não escala.
00:00:11Bem, na verdade escala, porque o Postgres consegue lidar confortavelmente com milhões de linhas e
00:00:15milhares de requisições por segundo. Então, se você quer manter sua infraestrutura simples,
00:00:20hoje vamos explorar a criação de aplicativos distribuídos de alto volume com o PGMQ.
00:00:30Certo, sem enrolação. Vamos pular direto para a demonstração. Eu configurei um projeto
00:00:34com o Docker e instalei o PGMQ. Você pode usá-lo em dois sabores: apenas SQL ou uma das
00:00:41bibliotecas de cliente oficiais, como Rust ou Python, além de várias bibliotecas da comunidade, como Ruby ou múltiplos
00:00:47sabores de TypeScript. Como nunca vamos concordar sobre linguagem, vou rodar esta demonstração com
00:00:52a opção exclusiva de SQL. Vamos começar criando uma nova fila. Executamos select pgmq.create e passamos
00:00:58o nome da fila em si. Cada fila aqui é sua própria tabela. Se olharmos diretamente para o banco de dados,
00:01:04podemos ver que a nova tabela agora existe. Podemos então enviar mensagens para a nossa fila especificando o nome da fila,
00:01:09e depois a mensagem como JSON. Opcionalmente, você pode incluir um atraso. Assim, a mensagem é enviada para a
00:01:15fila, mas não pode ser consumida por digamos cinco segundos. Certo, agora temos as mensagens na fila.
00:01:20Vamos consumi-las. Podemos fazer isso com o comando read. VT é o tempo limite de visibilidade (visibility timeout).
00:01:26E aqui significa que as mensagens que você ler ficarão visíveis por 30 segundos. Assim, nenhum outro processo pode pegá-las.
00:01:31É assim que o PGMQ garante a entrega exatamente uma vez (exactly-once). Quantity é a quantidade de mensagens que desejamos
00:01:38ler. E se elas não forem excluídas ou arquivadas dentro dessa janela, elas se tornarão visíveis novamente. E para fazer
00:01:44isso, você pode executar archive, que exclui da fila e adiciona à tabela de arquivo, ou simplesmente
00:01:49executar delete. Por exemplo, aqui, eu excluo a mensagem com o ID 2. E apenas uma observação, se você achar isso
00:01:54útil, faça-nos um enorme favor se inscrevendo no canal. Isso nos ajuda a continuar criando conteúdo gratuito
00:01:59para ajudar o máximo de desenvolvedores possível. Certo, vamos fazer um teste de estresse no PGMQ. Primeiro, vou adicionar 100.000 linhas
00:02:06à fila. E isso leva aproximadamente 0,4 segundo. Agora vou iniciar 100 workers para cada um processar um trabalho em
00:02:13lotes de 10 e ver quanto tempo leva para ler todas elas. Aqui, tudo o que o worker faz é ler a
00:02:18mensagem, registrar o que leu e depois excluí-la. É claro que você iria querer fazer algo com esses dados.
00:02:23Mas aqui estou preocupado apenas em testar o desempenho do PGMQ diretamente. E isso levou nove segundos.
00:02:29Cada worker processou em média 111 mensagens por segundo. Então, combinados, cerca de 11.100 mensagens por segundo.
00:02:37Eu limitei propositalmente o contêiner Docker a duas CPUs e dois gigabytes de memória, o que é típico para um serviço
00:02:44em produção. Agora, como mencionei antes, você também pode usar as bibliotecas de cliente para interagir com o PGMQ.
00:02:49Usando TypeScript com o Prisma, podemos criar uma fila, enviar uma mensagem, ler um lote de mensagens, e você também
00:02:55pode fazer o mesmo com Python. Portanto, se você não quer dependências extras, pode realmente executar
00:03:01filas em escala dentro do Postgres com o PGMQ. E levamos isso muito mais longe substituindo o máximo
00:03:08possível da stack por Postgres, o que eu cubro neste vídeo.

핵심 요약

O PGMQ permite gerenciar filas de mensagens de alto volume diretamente no PostgreSQL com desempenho superior a 11.000 mensagens por segundo, simplificando a infraestrutura ao eliminar dependências externas.

하이라이트

  • O PGMQ gerencia filas de mensagens diretamente dentro do PostgreSQL, eliminando a necessidade de ferramentas externas como SQS, Kafka ou RabbitMQ.

  • O PGMQ adicionou 100.000 linhas à fila em 0,4 segundo durante um teste de estresse executado em um contêiner Docker limitado a duas CPUs e dois gigabytes de memória.

  • Cem workers processaram 100.000 mensagens em nove segundos, alcançando uma taxa combinada de cerca de 11.100 mensagens por segundo.

  • O PGMQ garante a entrega exatamente uma vez por meio do tempo limite de visibilidade (visibility timeout), impedindo que outros processos acessem mensagens em leitura ativa.

  • O ecossistema do PGMQ suporta tanto a execução exclusiva por comandos SQL quanto bibliotecas de cliente para linguagens como Rust, Python, Ruby e TypeScript.

타임라인

Gerenciamento de filas no Postgres com PGMQ

  • O PGMQ substitui ferramentas tradicionais de filas ao operar diretamente no PostgreSQL.
  • O banco de dados gerencia milhões de linhas e milhares de requisições por segundo para aplicativos distribuídos.

Ferramentas como SQS, Kafka e RabbitMQ tornam-se desnecessárias com o uso do PGMQ para gerenciar filas de mensagens. A infraestrutura permanece simples ao concentrar o processamento de alto volume no próprio PostgreSQL, que lida com milhões de registros de forma estável.

Criação de filas e manipulação de mensagens via SQL

  • Cada fila criada por comando SQL constitui uma tabela própria no banco de dados.
  • As mensagens são enviadas como JSON com suporte opcional a atraso de consumo.
  • O parâmetro de tempo limite de visibilidade (visibility timeout) garante a entrega exatamente uma vez ao bloquear o acesso de outros processos.

O projeto configurado via Docker utiliza comandos SQL para inicializar filas com a função pgmq.create. O envio de mensagens aceita objetos JSON e permite definir intervalos de atraso antes que o consumo seja liberado. Durante a leitura com o comando read, o tempo limite de visibilidade protege o lote de mensagens por um período específico, exigindo exclusão ou arquivamento posterior.

Teste de estresse e desempenho de alto volume

  • A inserção de 100.000 linhas na fila ocorre em aproximadamente 0,4 segundo.
  • Cem workers processam o lote completo em nove segundos com uma média de 111 mensagens por segundo por worker.
  • O desempenho global atinge 11.100 mensagens por segundo em um ambiente restrito a duas CPUs e dois gigabytes de memória.

Um teste de estresse valida a capacidade de processamento do PGMQ sob restrições típicas de produção. Cem workers executam a leitura, o registro e a exclusão de lotes de mensagens simultaneamente. O uso de bibliotecas de cliente em TypeScript com Prisma e Python amplia as opções de integração além do SQL puro.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기