Oubliez SQS, RabbitMQ et Kafka. Utilisez simplement Postgres.

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

스크립트

00:00:00SQS, Kafka et RabbitMQ peuvent aller à la poubelle, car vous pouvez désormais gérer vos files d'attente directement
00:00:05dans Postgres avec PGMQ. Et j'entends déjà certains dire que ça ne passe pas à l'échelle.
00:00:11Eh bien, si, en fait, car Postgres peut gérer confortablement des millions de lignes et
00:00:15des milliers de requêtes par seconde. Donc, si vous souhaitez garder une infrastructure simple,
00:00:20nous allons voir aujourd'hui comment créer des applications distribuées à fort volume avec PGMQ.
00:00:30Bon, trêve de bavardages, passons directement à la démo. J'ai configuré un projet
00:00:34avec Docker et installé PGMQ. Vous pouvez l'utiliser sous deux formes : soit en SQL pur, soit via l'une des
00:00:41bibliothèques clientes officielles comme Rust ou Python, en plus de plusieurs bibliothèques communautaires comme Ruby ou
00:00:47différentes variantes de TypeScript. Comme nous ne serons jamais d'accord sur le langage, je vais faire cette démo
00:00:52uniquement en SQL. Commençons par créer une nouvelle file d'attente. On exécute select pgmq.create, puis on passe
00:00:58le nom de la file d'attente. Ici, chaque file est une table à part entière. Si l'on regarde directement dans la base de données,
00:01:04on peut voir que la nouvelle table existe désormais. On peut ensuite envoyer des messages dans notre file en spécifiant son nom,
00:01:09puis le message au format JSON. Il est possible d'ajouter un délai en option. Ainsi, le message est poussé dans la
00:01:15file, mais ne peut pas être consommé avant, disons, cinq secondes. Bon, nos messages sont maintenant dans la file.
00:01:20Consommons-les. On peut le faire avec la commande read. VT correspond au délai de visibilité (visibility timeout).
00:01:26Ici, cela signifie que les messages que vous lisez resteront visibles pendant 30 secondes, empêchant tout autre processus de les récupérer.
00:01:31C'est ainsi que PGMQ garantit une livraison unique (exactly-once). Quantity représente ensuite le nombre de messages que nous souhaitons
00:01:38lire. S'ils ne sont pas supprimés ou archivés dans ce laps de temps, ils redeviennent visibles. Pour ce faire,
00:01:44vous pouvez exécuter archive, qui supprime le message de la file et l'ajoute à la table d'archives, ou simplement
00:01:49exécuter delete. Par exemple, ici, je supprime le message avec l'ID 2. Et petite parenthèse, si vous trouvez cela
00:01:54utile, vous nous rendriez un énorme service en vous abonnant à la chaîne. Cela nous aide à continuer à créer du contenu gratuit
00:01:59pour aider le maximum de développeurs. Bon, passons maintenant au test de charge de PGMQ. D'abord, j'ajoute 100 000 lignes
00:02:06dans la file. Cela prend environ 0,4 seconde. Je vais ensuite lancer 100 workers pour traiter chacun un lot de 10 tâches
00:02:13et voir combien de temps il faut pour tout lire. Ici, tout ce que fait le worker, c'est lire le message,
00:02:18consigner ce qu'il a lu, puis le supprimer. Bien sûr, en production, vous feriez quelque chose de plus utile avec ces données,
00:02:23mais je cherche uniquement à tester directement les performances de PGMQ ici. Et cela a pris neuf secondes.
00:02:29Chaque worker a traité en moyenne 111 messages par second, soit un total combiné d'environ 11 100 messages par seconde.
00:02:37J'ai volontairement limité le conteneur Docker à deux processeurs et deux gigaoctets de mémoire, ce qui est typique pour un service en direct.
00:02:44Comme je l'ai mentionné plus tôt, vous pouvez aussi utiliser les bibliothèques clientes pour interagir avec PGMQ.
00:02:49En utilisant TypeScript avec Prisma, nous pouvons créer une file, envoyer un message, lire un lot de messages, et vous pouvez
00:02:55faire exactement de même avec Python. Donc, si vous voulez éviter les dépendances superflues, vous pouvez réellement exécuter
00:03:01des files d'attente à grande échelle directement dans Postgres grâce à PGMQ. Et nous allons encore plus loin en remplaçant une grande partie
00:03:08de la stack par Postgres, ce que je détaille dans cette vidéo.

핵심 요약

L'utilisation de PGMQ avec Postgres permet de remplacer des outils tiers comme SQS, Kafka ou RabbitMQ tout en traitant plus de 11 000 messages par seconde avec des ressources matérielles limitées.

하이라이트

  • Postgres gère des millions de lignes et des milliers de requêtes par seconde avec PGMQ.

  • PGMQ crée chaque file d'attente sous forme de table à part entière dans la base de données.

  • Le délai de visibilité (VT) bloque la lecture d'un message pendant 30 secondes pour garantir une livraison unique.

  • L'insertion de 100 000 lignes dans la file d'attente prend environ 0,4 seconde.

  • Un conteneur Docker limité à deux processeurs et deux gigaoctets de mémoire traite 11 100 messages par seconde.

타임라인

Gestion des files d'attente dans Postgres avec PGMQ

  • Postgres remplace les solutions traditionnelles comme SQS, Kafka et RabbitMQ.
  • L'infrastructure reste simple tout en gérant un fort volume de requêtes.

Les files d'attente s'exécutent directement dans Postgres grâce à l'extension PGMQ. Cette approche répond aux contraintes de passage à l'échelle pour la création d'applications distribuées.

Démonstration des commandes SQL et du cycle de vie des messages

  • Chaque file d'attente correspond à une table dédiée dans la base de données.
  • La commande read applique un délai de visibilité pour empêcher la double lecture.
  • L'archivage ou la suppression retire définitivement le message de la file active.

La configuration s'effectue en SQL pur ou via des bibliothèques clientes. L'envoi de messages accepte des formats JSON ainsi que des délais optionnels avant consommation.

Test de charge et performances sous contrainte matérielle

  • Cent mille lignes s'insèrent en 0,4 seconde dans la file.
  • Cent workers traitent 11 100 messages par seconde au total.
  • Le test s'exécute sur un conteneur bridé à deux processeurs et deux gigaoctets de mémoire.

Les performances de PGMQ démontrent une efficacité élevée même avec des ressources matérielles modestes. L'intégration avec des langages comme TypeScript ou Python simplifie l'utilisation des files d'attente à grande échelle.

커뮤니티 글

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

이 영상에 대해 글쓰기