Améliorer les protocoles de bases de données : le point de vue de l’expérience développeur

2025-04-05

Cet article traite des lacunes des protocoles clients des bases de données SQL, notamment MySQL et PostgreSQL. L’auteur souligne les problèmes de gestion des connexions, de récupération d’erreurs et d’instructions préparées, ce qui entraîne une complexité de développement accrue. Par exemple, l’état mutable de la connexion rend la récupération d’erreurs difficile, tandis que la nature à portée de session des instructions préparées limite leur utilisation dans les pools de connexions. L’auteur propose des améliorations en s’inspirant du protocole Redis, telles qu’une phase de configuration explicite, des clés d’idempotence et des identifiants d’instructions préparées à portée globale. Ces changements simplifieraient les workflows de développement et amélioreraient la fiabilité des clients de bases de données, pour une meilleure expérience développeur et des bases de données plus conviviales.

Lire plus
Développement protocole

HTTP/2 : Pourquoi cela n'a pas d'importance dans les serveurs HTTP Ruby

2025-02-25

Cet article discute de la pertinence de la prise en charge d'HTTP/2 dans les serveurs HTTP Ruby tels que Puma. L'auteur soutient que si le principal avantage d'HTTP/2, le multiplexage pour des temps de chargement de page plus rapides, est significatif sur Internet, il offre peu d'avantages sur un réseau local. La faible latence et les connexions longue durée sur un réseau local minimisent l'impact du slow start TCP. De plus, la fonctionnalité de push du serveur HTTP/2 s'est avérée préjudiciable et a été remplacée par la fonctionnalité 103 Early Hints plus élégante. L'auteur préconise de laisser la gestion d'HTTP/2 aux équilibreurs de charge ou aux proxies inversés, simplifiant ainsi le déploiement et la maintenance du serveur d'applications.

Lire plus
Développement Performances Réseau

Le Mythe de l'Application Rails Liée à l'E/S

2025-01-25

Il est communément admis que les applications Rails sont intrinsèquement liées à l'E/S, la base de données étant le principal goulot d'étranglement des performances, ce qui rend les performances de Ruby moins critiques. Cet article remet en question cette idée. Bien que la base de données soit effectivement un goulot d'étranglement pour le scaling, l'auteur soutient que cela ne signifie pas que l'application passe la majeure partie de son temps à attendre l'E/S. L'analyse des améliorations de performances de YJIT et des problèmes de performances courants (comme les index de base de données manquants) suggère que de nombreuses applications Rails sont en réalité liées au processeur. L'article souligne la confusion entre la famine du processeur et l'attente de l'E/S, et souligne que le choix du modèle d'exécution approprié (asynchrone, threadé ou basé sur les processus) dépend du ratio E/S/CPU de l'application. L'auteur appelle à une attention accrue sur les performances de Ruby et souligne les possibilités d'optimisation au sein de Rails lui-même.

Lire plus
Développement

Optimisation du JSON Ruby : une histoire d’allocation de pile et d’intégration en ligne

2025-01-02

Cet article de blog, quatrième partie d’une série sur l’optimisation des performances de JSON en Ruby, détaille le parcours de l’auteur pour améliorer la vitesse de sérialisation JSON de Ruby. Grâce à des micro-benchmarks et à un profilage méticuleux, l’auteur explore des techniques d’allocation de pile et d’intégration en ligne. En déplaçant l’allocation de tampon de la mémoire système vers la pile et en utilisant l’intégration en ligne de manière stratégique, des gains de performances significatifs sont obtenus. Toutefois, l’article souligne l’importance de trouver un équilibre entre les améliorations des micro-benchmarks et les performances des applications réelles, en montrant un cas où l’optimisation a eu un impact négatif sur les ensembles de données plus importants.

Lire plus
Développement

Optimisation du JSON Ruby : Partie 1

2024-12-18

Cet article de blog explique comment l’auteur a optimisé la gemme `json` de Ruby pour en faire l’un des analyseurs et générateurs JSON les plus rapides. Au lieu de techniques complexes, des optimisations simples ont été appliquées sur la base du profilage, telles que l’évitement des vérifications redondantes, la priorisation des conditions moins coûteuses, la réduction des coûts de configuration et l’utilisation de tables de recherche. Ces améliorations s’appliquent au code C et au code Ruby. Les optimisations ont considérablement amélioré les performances de la gemme `json`, la rendant compétitive par rapport à des alternatives telles que `oj`, réduisant le besoin de correctifs de type « monkey patch » et résolvant les problèmes de stabilité et de compatibilité liés à `oj`.

Lire plus