Skip to content
tutorials

Tu próxima cola de mensajes es Postgres

Las colas de mensajes dedicadas como Kafka y SQS a menudo introducen una complejidad y un costo innecesarios en tu stack. Descubre la extensión ligera que convierte tu base de datos Postgres existente en un broker de mensajes de alto rendimiento.

Dani Roth
Tu próxima cola de mensajes es Postgres

El argumento contra la hinchazón de los brokers

Los brokers de mensajes dedicados como SQS, Kafka y RabbitMQ introducen una sobrecarga operativa significativa y, a menudo, oculta. Gestionas una infraestructura separada, incurriendo en costos de aprovisionamiento, despliegue, monitoreo y escalado de servicios distintos. Esto añade latencia de red y aumenta críticamente la carga cognitiva para los desarrolladores que integran y depuran múltiples sistemas distribuidos, forzando una complejidad innecesaria en tu stack.

Tu base de datos Postgres existente ofrece una alternativa robusta y confiable, eliminando la hinchazón de los brokers. Construido sobre el cumplimiento ACID y un poder transaccional probado en batalla, Postgres proporciona una base sólida para una puesta en cola confiable, asegurando la integridad de los datos incluso ante fallos. Maneja cómodamente millones de filas y miles de solicitudes por segundo; por ejemplo, una prueba con 2 CPUs y 2GB de RAM procesó 100,000 mensajes en 9 segundos, con un promedio de 11,100 mensajes/segundo.

PGMQ formaliza este potente patrón como una extensión ligera y sencilla. Ofrece una API similar a SQS directamente dentro de Postgres, permitiendo la creación de colas, el envío de mensajes con retrasos opcionales y el consumo con tiempos de espera de visibilidad (VT) para garantizar la entrega exactamente una vez. Esto significa que obtienes una cola de mensajes completamente funcional, con bibliotecas cliente para Rust, Python y TypeScript, sin añadir un solo servicio nuevo a tu stack.

De cero a cola en 5 líneas de SQL

Crea colas con SQL puro. Llama a pgmq.create('my_queue'); cada cola se convierte en su propia tabla de Postgres. Envía mensajes usando pgmq.send('my_queue', '{"job_id": 123}'). Esto integra los mensajes como JSON directamente dentro de Postgres, simplificando tu modelo de datos.

Implementa la entrega programada con pgmq.send(). Añade un parámetro delay (por ejemplo, pgmq.send('my_queue', '{"task": "future"}', 30)). El mensaje entra en la cola pero permanece no consumible durante 30 segundos, permitiendo una programación de tareas avanzada sin servicios cron externos.

Consume mensajes mediante pgmq.read('my_queue', 30, 1). El parámetro crítico vt (visibility timeout) hace que los mensajes leídos sean invisibles durante la duración especificada (por ejemplo, 30 segundos). Esto asegura la entrega exactamente una vez: ningún otro trabajador puede procesar el mismo mensaje durante su ventana activa. Si no se procesa o elimina dentro del VT, reaparece en la cola.

Una vez procesados, elimina los mensajes. Usa pgmq.delete('my_queue', message_id) para eliminar permanentemente un mensaje. Alternativamente, pgmq.archive('my_queue', message_id) elimina el mensaje de la cola activa y lo mueve a una tabla de archivo dedicada, proporcionando un registro histórico para auditoría o reprocesamiento.

¿Pero realmente escala?

"Pero no escala", dirás. Este es el estribillo común contra las bases de datos como colas. Postgres, sin embargo, maneja cómodamente millones de filas y miles de solicitudes por segundo. PGMQ aprovecha esta capacidad inherente, convirtiendo una debilidad percibida en una fortaleza para aplicaciones distribuidas.

Una prueba de estrés reciente validó el rendimiento de PGMQ en recursos limitados. Los investigadores aprovisionaron un contenedor Docker con solo 2 CPUs y 2GB de RAM. Luego inyectaron 100,000 mensajes en una cola de PGMQ. Esta configuración refleja entornos de servicio en vivo típicos, haciendo que los resultados sean altamente relevantes.

Cien trabajadores concurrentes procesaron los 100,000 mensajes en apenas 9 segundos. Cada trabajador leyó, registró y eliminó mensajes en lotes. Esto se traduce en un rendimiento combinado que supera los 11,100 mensajes por segundo. Para obtener documentación completa y más ejemplos, consulte el repositorio oficial de Postgres Message Queue (PGMQ).

Tal rendimiento invalida inequívocamente el mito de que 'no escala' para prácticamente todas las aplicaciones del mundo real. PGMQ demuestra que Postgres no solo es viable, sino altamente eficiente como cola de mensajes, eliminando la sobrecarga operativa de intermediarios dedicados para la mayoría de los casos de uso. Mantenga su infraestructura simple.

¿Te está gustando? Recibe uno así en tu bandeja cada mañana.

un correo al día · date de baja en dos clics · sin rastreadores de terceros

Integración de PGMQ en su aplicación

Integre PGMQ directamente en su pila de aplicaciones. Vaya más allá del SQL puro con bibliotecas de cliente robustas para lenguajes populares. El soporte oficial potencia las integraciones de Python y Rust, ofreciendo interfaces idiomáticas. Las bibliotecas impulsadas por la comunidad extienden aún más PGMQ a Ruby y múltiples variantes de TypeScript, incluida una experiencia fluida con Prisma.

Cree productores con un código mínimo. Un productor de Python envía un mensaje con una simple llamada send(), especificando el nombre de la cola y la carga útil JSON. Esto refleja el comando SQL pgmq.send(), abstrayendo la interacción con la base de datos para usted.

Los trabajadores consumen mensajes de manera eficiente. Utilice la función read() de una biblioteca de cliente para obtener un lote de mensajes, respetando el tiempo de espera de visibilidad (VT). Después del procesamiento, llame a delete() o archive() para eliminar los mensajes, asegurando una entrega exactamente una vez y evitando el reprocesamiento. Este patrón maneja tareas de alto volumen.

Unificar sus capas de datos y mensajería dentro de Postgres simplifica su infraestructura. Elimine la sobrecarga operativa de intermediarios de mensajes separados, reduciendo la latencia de red y la carga cognitiva. Esta consolidación agiliza el desarrollo, las pruebas y la implementación, lo que resulta en un sistema más robusto y fácil de mantener.

Preguntas frecuentes

¿Qué es PGMQ?

PGMQ (Postgres Message Queue) es una extensión ligera para PostgreSQL que permite la funcionalidad de cola de mensajes directamente dentro de la base de datos, ofreciendo una alternativa a servicios como AWS SQS, RabbitMQ o Kafka.

¿Cómo garantiza PGMQ la entrega exactamente una vez?

PGMQ utiliza un 'tiempo de espera de visibilidad'. Cuando se lee un mensaje, se vuelve invisible para otros consumidores durante un período determinado. El consumidor debe eliminar o archivar el mensaje dentro de ese tiempo. Si falla, el mensaje reaparece para que otro consumidor lo procese, evitando la pérdida de datos.

¿Puede PGMQ manejar tráfico a nivel de producción?

Sí. Las pruebas de rendimiento muestran que PGMQ puede procesar más de 11,000 mensajes por segundo en hardware modesto (por ejemplo, un contenedor de 2 CPU). Esto es más que suficiente para muchas aplicaciones distribuidas de alto volumen.

¿Cuál es el principal beneficio de usar Postgres como cola de mensajes?

El beneficio principal es la simplificación de la infraestructura. Al aprovechar su base de datos existente, reduce las dependencias, disminuye la sobrecarga operativa y simplifica toda su pila tecnológica sin sacrificar el rendimiento para la mayoría de los casos de uso comunes.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only

Para builders

Esta página está trabajando para la herramienta de otro.

La leen los agentes de IA. Aterrizan compradores. Responde en ocho idiomas y vía MCP. Tu herramienta puede tener una igual — publicada en 24 horas.