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