스크립트
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.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기