Mejorando los protocolos de bases de datos: una perspectiva de experiencia del desarrollador

2025-04-05

Este artículo analiza las deficiencias en los protocolos de cliente de bases de datos SQL, específicamente MySQL y PostgreSQL. El autor señala problemas con la gestión de conexiones, la recuperación de errores y las sentencias preparadas, lo que lleva a un aumento en la complejidad del desarrollo. Por ejemplo, el estado mutable de la conexión dificulta la recuperación de errores, mientras que la naturaleza de ámbito de sesión de las sentencias preparadas limita su uso en grupos de conexiones. El autor propone mejoras tomando prestado del protocolo Redis, como una fase de configuración explícita, claves de idempotencia e identificadores de sentencias preparadas de ámbito global. Estos cambios simplificarían los flujos de trabajo de desarrollo y mejorarían la fiabilidad de los clientes de bases de datos, dando como resultado una mejor experiencia para el desarrollador y bases de datos más fáciles de usar.

Leer más
Desarrollo

HTTP/2: Por qué no importa en servidores HTTP Ruby

2025-02-25

Esta publicación analiza la relevancia del soporte HTTP/2 en servidores HTTP Ruby como Puma. El autor argumenta que si bien la principal ventaja de HTTP/2, la multiplexación para tiempos de carga de página más rápidos, es significativa en internet, ofrece pocos beneficios en una LAN. La baja latencia y las conexiones de larga duración en una LAN minimizan el impacto del slow start del TCP. Además, la función de push del servidor HTTP/2 resultó perjudicial y ha sido reemplazada por la más elegante 103 Early Hints. El autor aboga por dejar el manejo de HTTP/2 a los balanceadores de carga o proxies inversos, simplificando la implementación y el mantenimiento del servidor de aplicaciones.

Leer más
Desarrollo Rendimiento de Red

El Mito de la Aplicación Rails Limitada por E/S

2025-01-25

Es una creencia común que las aplicaciones Rails son inherentemente limitadas por E/S, con la base de datos como el principal cuello de botella de rendimiento, lo que hace que el rendimiento de Ruby sea menos crítico. Esta publicación cuestiona esa idea. Si bien la base de datos es de hecho un cuello de botella de escalabilidad, el autor argumenta que esto no significa que la aplicación pase la mayor parte de su tiempo esperando E/S. El análisis de las mejoras de rendimiento de YJIT y los problemas de rendimiento comunes (como los índices de base de datos faltantes) sugiere que muchas aplicaciones Rails son en realidad limitadas por la CPU. La publicación destaca la confusión entre la inanición de la CPU y la espera de E/S, y enfatiza que la elección del modelo de ejecución correcto (asincrónico, con subprocesos o basado en procesos) depende de la proporción E/S/CPU de la aplicación. El autor pide atención al rendimiento de Ruby y señala oportunidades de optimización dentro del propio Rails.

Leer más
Desarrollo

Optimizando JSON en Ruby: Una historia de asignación de pila e inline

2025-01-02

Esta publicación de blog, la cuarta parte de una serie sobre la optimización del rendimiento de JSON en Ruby, detalla el recorrido del autor para mejorar la velocidad de serialización JSON de Ruby. A través de micro-benchmarks y perfiles meticulosos, el autor explora técnicas de asignación de pila e inline. Al cambiar la asignación de búfer del montón a la pila y usar inline estratégicamente, se obtienen ganancias significativas de rendimiento. Sin embargo, el artículo destaca la importancia de equilibrar las mejoras de micro-benchmark con el rendimiento de las aplicaciones del mundo real, mostrando un caso en el que la optimización impactó negativamente en conjuntos de datos más grandes.

Leer más
Desarrollo

Optimizando el JSON de Ruby: Parte 1

2024-12-18

Esta entrada de blog detalla cómo el autor optimizó la gema `json` de Ruby para convertirla en uno de los analizadores y generadores JSON más rápidos. En lugar de técnicas complejas, se aplicaron optimizaciones sencillas basadas en el perfilado, como evitar comprobaciones redundantes, priorizar las condiciones más baratas, reducir los costes de configuración y utilizar tablas de búsqueda. Estas mejoras se aplican tanto al código C como al código Ruby. Las optimizaciones aumentaron significativamente el rendimiento de la gema `json`, haciéndola competitiva con alternativas como `oj`, reduciendo la necesidad de parches de mono y solucionando problemas de estabilidad y compatibilidad asociados con `oj`.

Leer más