Présentation
Il est souvent considéré que les files d'attente basées sur Postgres ne sont pas scalable. Cependant, avec les bonnes optimisations, Postgres peut gérer de grandes charges de travail. Dans cet article, nous allons voir comment optimiser les files d'attente basées sur Postgres pour atteindre 30 000 exécutions de workflow par seconde sur des milliers de serveurs.
Fonctionnement des files d'attente
Les files d'attente basées sur Postgres fonctionnent en ajoutant des workflows à une table de files d'attente, puis en les traitant par les workers. Cependant, lorsque plusieurs workers traitent les mêmes workflows, des contenus apparaissent. Pour résoudre ce problème, Postgres fournit des clauses de verrouillage, telles que FOR UPDATE SKIP LOCKED, qui permettent de verrouiller les lignes pour empêcher d'autres workers de les traiter en même temps.
Optimisations
Pour améliorer les performances, nous avons appliqué plusieurs optimisations. Tout d'abord, nous avons utilisé les clauses de verrouillage pour éviter les contenus. Ensuite, nous avons ajusté les niveaux d'isolation des transactions pour éviter les échecs de sérialisation. Enfin, nous avons optimisé les index pour réduire l'utilisation du CPU et améliorer les performances.
Résultats
Grâce à ces optimisations, nous avons pu atteindre 30 000 exécutions de workflow par seconde, soit 80 milliards par mois. Les optimisations ont également réduit l'utilisation du CPU et amélioré la fiabilité du système. Nous avons montré que les files d'attente basées sur Postgres peuvent être scalable et performantes avec les bonnes optimisations.