Skip to main content

Gestión de MySQL para aplicaciones Serverless

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 de 5)
Cargando…

Normalmente para la mayoría de las aplicaciones Serverless suelen emplear, DynamoDB si corren en el ecosistema Amazon, BigTable si están en Google, MongoDB on-premise y otros. 

Pero todavía quedan muchos amantes de los RDBS (Relational Data Base Systems), por ejemplo, MySQL. Pero que hacemos si queremos emplear MySQL en desarrollos Serverless como AWS Lambda, Google Cloud Functions y Azure Functions.

En estos escenarios, las aplicaciones serverless escalan casi infinitamente creando instancias separadas para cada usuario concurrente. Este es un gran handicap para soluciones de RDBS como MySQL, ya que las conexiones disponibles pueden crecer rápidamente debido a que las funciones concurrentes compiten por el acceso.

Reutilizar las conexiones de la base de datos no ayuda, e incluso el lanzamiento de Aurora Serverless no resuelve el problema del número máximo de conexiones (max_connections).

Hay algunos trucos que podemos usar para mitigar el problema, aun así, usar MySQL en aplicaciones Serverless es un engorro.

¿Qué es Serverless MySQL?

Serverless MySQL, es un wrapper que nos facilita el empleo del módulo de NodeJS de MySQL de Doug Wilson.

Este módulo puede supervisar el número de conexiones que se utilizan y, en función de los parámetros de configuración que se le definan, gestionar dichas conexiones. Para permitir que miles de ejecuciones concurrentes compartan estas conexiones, reutilizará las conexiones cuando sea posible, limpiará los hilos zombies, establecerá límites de conexión por usuario y realizará reintentos utilizando algoritmos de backoff de confianza.

También simplifica drásticamente las transacciones, ofreciéndole un patrón simple y consistente para manejar flujos de trabajo comunes.

Cómo usar Serverless MySQL

Serverless MySQL es un wrapper del módulo mysql, por lo que soporta casi todo lo que está implementado en él. Utiliza las mismas opciones de conexión, proporciona un método query() que acepta los mismos parámetros (excepto el callback), y devuelve los resultados de la consulta exactamente como los devuelve el mysql original.

Hay varias opciones de configuración soportadas (incluyendo llamadas de eventos) detalladas en la documentación (https://www.npmjs.com/package/mysql-serverless?activeTab=readme).

¿Qué tal el rendimiento?

A continuación, hay un ejemplo de una prueba que se muestran en la documentación del módulo (https://www.npmjs.com/package/serverless-mysql) usando AWS Lambda y Aurora Serverless. Aurora Serverless se configuró con 2 ACUs (y no se autoescaló), por lo que sólo había 90 conexiones disponibles para

 el cluster MySQL. La función Lambda se configuró con 1.024 MB de memoria. Esta prueba simuló 500 usuarios por segundo durante un minuto. Cada usuario ejecutó una consulta de muestra recuperando algunas filas de una tabla.                En el gráfico siguiente se puede ver que el tiempo medio de respuesta fue de 41 ms (mín. 20 ms, máx. 3743 ms) con errores CERO.

 

 

Conclusiones

Trabajar con aplicaciones Serverless atacando a bases de datos relacionales, permite crear una integración entre la tecnología “legacy friendly” sobre las bases de datos ya existentes. Además, que el módulo trabaje como un wrapper sobre el conector estándar de MySQL desde NodeJS, hace que sea más robusto y que su curva de aprendizaje sea mínima.

En cuanto a los rendimientos reflejados en la web de los desarrolladores, dan unos índices de éxito del 100%. Además, se muestran unas medias de tiempo de respuesta bastante bajas, a pesar de haberse implementado el sistema de gestión de conexiones.

A parte de lo mostrado en el artículo, el módulo funciona perfectamente en clúster. De esta forma, se pueden tener múltiples instancias de aplicaciones serveless, leyendo de instancias esclavas de un clúster MySQL. De esta forma, para los procesos de lectura de datos, los tiempos de respuesta de las operaciones pueden quedar aún más reducido.

La tecnología es muy prometedora, con el tiempo mostrará nuevas características.

Jose Antonio Jamilena Daza

Jose Antonio Jamilena Daza

Jose Antonio Jamilena Daza ha escrito 1 entradas


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.