Présentation de PgDog
PgDog est un proxy conçu pour mettre à l’échelle Postgres, notamment grâce à son fonctionnement de pooler de connexions. Cette fonctionnalité permet à de nombreuses applications clientes d’utiliser la même base de données sans dépasser la limite de connexions.
Il existe déjà de nombreux outils de poolage de connexions, tels que PgBouncer, RDS Proxy, Pgpool-II et Supavisor. La question se pose donc : pourquoi créer un autre outil ?
Limites des outils existants
La plupart des outils de l’écosystème Postgres suivent la philosophie UNIX, qui préconise de faire une chose et de la faire bien. Cependant, cela peut introduire ce que l’on appelle des « abstractions leaky ».
Lorsque vous déployez PgBouncer ou RDS Proxy, vous devez souvent modifier votre code d’application pour tenir compte des compromis liés à l’utilisation de ces outils. Cela peut être particulièrement difficile si vous avez déjà une application existante avec des milliers de lignes de code.
Fonctionnement de PgDog
PgDog est conçu pour éviter ces problèmes. Il intègre un analyseur SQL qui peut détecter les instructions SET, extraire les noms et les valeurs des variables, et les stocker pour chaque connexion client.
Lorsqu’un client exécute une requête, PgDog vérifie d’abord si son état correspond à celui du serveur, et si ce n’est pas le cas, il met à jour l’état en exécutant une série d’instructions SET.
SET statement_timeout TO '5m';
Cela permet de conserver les fonctionnalités de Postgres, comme la sécurité au niveau des lignes (RLS), qui reposent sur des variables de session.
Autres fonctionnalités de PgDog
PgDog prend également en charge les commandes LISTEN et NOTIFY, qui implémentent une file d’attente de publication/abonnement à l’intérieur de Postgres. Cela permet aux applications clientes de communiquer entre elles sans avoir besoin d’ajouter une autre base de données à leur pile.
De plus, PgDog est conçu pour être multithreadé, ce qui signifie qu’il peut servir un grand nombre de clients et de requêtes par seconde à partir d’un seul processus. Cela permet d’améliorer l’efficacité et la fiabilité du poolage de connexions.
PgDog est actuellement utilisé en production et a déjà prouvé son efficacité en poolant des connexions à 2 millions de requêtes par seconde. Il est open source et peut être déployé partout gratuitement.