Olvídate de SQS, RabbitMQ y Kafka. Usa simplemente Postgres.

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

스크립트

00:00:00SQS, Kafka y RabbitMQ pueden irse directamente a la basura porque ahora puedes gestionar tus colas directamente
00:00:05dentro de Postgres con PGMQ. Y ya puedo escuchar a la gente diciendo: pero eso no escala.
00:00:11Bueno, en realidad sí lo hace, porque Postgres puede manejar cómodamente millones de filas y
00:00:15miles de solicitudes por segundo. Así que si quieres mantener tu infraestructura simple,
00:00:20hoy exploraremos cómo construir aplicaciones distribuidas de alto volumen con PGMQ.
00:00:30Bien, sin rodeos. Vamos a saltar directo a la demostración. He configurado un proyecto
00:00:34con Docker e instalado PGMQ. Puedes usarlo en dos modalidades: solo SQL o con una de las
00:00:41librerías de cliente oficiales como Rust o Python, además de un montón de librerías de la comunidad como Ruby o múltiples
00:00:47variantes de TypeScript. Como nunca nos pondremos de acuerdo en el lenguaje, ejecutaré esta demostración con
00:00:52la opción exclusiva de SQL. Comencemos creando una nueva cola. Ejecutamos select pgmq.create y luego pasamos
00:00:58el nombre de la cola. Cada cola aquí es su propia tabla. Si observamos la base de datos directamente,
00:01:04podemos ver que la nueva tabla ahora existe. Luego podemos enviar mensajes a nuestra cola especificando el nombre de la cola,
00:01:09y después el mensaje en formato JSON. Opcionalmente podrías incluir un retraso. Así el mensaje se envía a la
00:01:15cola, pero no se puede consumir durante, digamos, cinco segundos. Bien, ahora ya tenemos los mensajes en la cola.
00:01:20Vamos a consumirlos. Podemos hacer esto con el comando read. VT es el tiempo de visibilidad (visibility timeout). Y aquí significa
00:01:26que los mensajes que leas estarán visibles durante 30 segundos, para que ningún otro proceso pueda tomarlos.
00:01:31Así es como PGMQ garantiza una entrega exactamente única (exactly-once). Quantity es entonces la cantidad de mensajes que deseamos
00:01:38leer. Y si no se eliminan o archivan dentro de ese lapso, volverán a estar visibles. Y para hacer
00:01:44eso, puedes ejecutar archive, que elimina de la cola y añade a la tabla de archivo, o simplemente
00:01:49ejecutar delete. Por ejemplo, aquí, elimino el mensaje con ID dos. Y como nota al margen, si encuentras esto
00:01:54útil, nos harías un favor enorme suscribiéndote al canal. Nos ayuda a seguir creando contenido gratuito
00:01:59para ayudar a tantos desarrolladores como sea posible. Muy bien, vamos a probar los límites de PGMQ. Primero, agregaré 100,000 filas
00:02:06a la cola. Esto toma aproximadamente 0.4 segundos. Ahora lanzaré 100 trabajadores para que cada uno procese un trabajo en
00:02:13lotes de 10 y ver cuánto tiempo toma leerlos todos. Aquí, todo lo que hace el trabajador es leer el
00:02:18mensaje, registrar lo que leyó y luego eliminarlo. Por supuesto, querrías hacer algo con esos datos,
00:02:23pero aquí solo me interesa probar directamente el rendimiento de PGMQ. Y eso tomó nueve segundos.
00:02:29Cada trabajador procesó en promedio 111 mensajes por segundo. En total, alrededor de 11,100 mensajes por segundo.
00:02:37Limité a propósito el contenedor de Docker a dos CPU y dos gigabytes de memoria, típico para un servicio
00:02:44en producción. Ahora, como mencioné antes, también puedes usar las librerías de cliente para interactuar con PGMQ.
00:02:49Usando TypeScript con Prisma, podemos crear una cola, enviar un mensaje, leer un lote de mensajes, y también
00:02:55puedes hacer lo mismo con Python. Así que si no quieres dependencias adicionales, puedes ejecutar colas
00:03:01a escala dentro de Postgres con PGMQ de verdad. Y llevamos esto mucho más allá al reemplazar la mayor parte posible
00:03:08de la arquitectura con Postgres, lo cual cubro en este video.

핵심 요약

PGMQ reemplaza sistemas externos de colas como SQS o RabbitMQ permitiendo gestionar millones de filas y procesar 11,100 mensajes por segundo directamente dentro de Postgres.

하이라이트

  • PGMQ gestiona colas de mensajes directamente dentro de Postgres como tablas independientes.

  • Postgres procesa 100,000 filas en 0.4 segundos usando PGMQ.

  • Un contenedor de Docker con dos CPU y dos gigabytes de memoria procesa aproximadamente 11,100 mensajes por segundo con PGMQ.

  • El tiempo de visibilidad o visibility timeout asegura una entrega exactamente única evitando que múltiples procesos tomen el mismo mensaje.

  • PGMQ ofrece opciones de uso mediante comandos SQL puros o a través de librerías de cliente oficiales para Rust, Python, Ruby y TypeScript.

타임라인

Gestión de colas directamente en Postgres

  • Las colas de mensajes operan de manera nativa dentro de Postgres mediante PGMQ.
  • Postgres maneja millones de filas y miles de solicitudes por segundo para aplicaciones distribuidas.

Las herramientas tradicionales de colas resultan innecesarias cuando Postgres soporta la carga de trabajo de infraestructura distribuida. Cada cola funciona como su propia tabla dentro de la base de datos.

Demostración de comandos SQL y consumo de mensajes

  • La creación de una nueva cola se ejecuta mediante la función pgmq.create.
  • Los mensajes se envían en formato JSON con la opción de incluir un retraso temporal.
  • El parámetro de tiempo de visibilidad asegura una entrega exactamente única al bloquear mensajes leídos durante un intervalo determinado.

El uso exclusivo de SQL permite configurar y operar las colas sin dependencias adicionales. Las funciones de lectura, archivo y eliminación permiten controlar el ciclo de vida completo de cada mensaje dentro de la tabla.

Pruebas de rendimiento con PGMQ

  • La inserción de 100,000 filas en la cola toma aproximadamente 0.4 segundos.
  • Cien trabajadores concurrentes procesan 111 mensajes por segundo cada uno, alcanzando un total de 11,100 mensajes por segundo.
  • Las librerías de cliente para TypeScript y Python permiten integrar PGMQ en diferentes entornos de desarrollo.

Las pruebas de rendimiento demuestran la viabilidad de PGMQ en entornos con recursos limitados, como un contenedor de Docker restringido a dos CPU y dos gigabytes de memoria. La arquitectura simplifica la infraestructura al concentrar la lógica en Postgres.

커뮤니티 글

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

이 영상에 대해 글쓰기