sql >> Base de Datos >  >> RDS >> Mysql

AWS Lambda:almacenamiento en caché de MySQL

Lo primero sería entender cómo require funciona en NodeJS. Te recomiendo que revises este artículo si estás interesado en saber más al respecto.

Ahora, una vez que haya requerido su conexión, la tendrá para siempre y no será requerida nuevamente. Esto coincide con lo que está buscando, ya que no desea sobrecargar su base de datos creando una nueva conexión cada vez.

Pero, hay un problema...

Arranque en frío de Lambda

Siempre que invoque una función de Lambda por primera vez, activará un contenedor con su función dentro y lo mantendrá vivo durante aproximadamente 5 minutos. Es muy probable (aunque no está garantizado) que acceda al mismo contenedor siempre que realice una solicitud a la vez. Pero, ¿qué sucede si tiene 2 solicitudes al mismo tiempo? Luego, se hará girar otro contenedor en paralelo con el contenedor anterior, ya calentado. Acaba de crear otra conexión en su base de datos y ahora tiene 2 contenedores. Ahora, ¿adivina qué sucede si tienes 3 solicitudes simultáneas? ¡Sí! Un contenedor más, lo que equivale a una conexión DB más.

Siempre que haya nuevas solicitudes a sus funciones de Lambda, de forma predeterminada, se ampliarán para satisfacer la demanda (puede configurarlo en la consola para limitar la ejecución a tantas ejecuciones simultáneas como desee, respetando los límites de su cuenta)

No puede asegurarse de tener una cantidad fija de conexiones a su base de datos simplemente requiriendo su código tras la invocación de una función. Lo bueno es que esto no es tu culpa. Así es como se comportan las funciones de Lambda.

...otro enfoque es

para almacenar en caché los datos que desee en un sistema de almacenamiento en caché real, como ElasticCache , por ejemplo. A continuación, podría activar una función Lambda mediante un evento de CloudWatch que se ejecuta en una determinada frecuencia de tiempo. Esta función luego consultaría su base de datos y almacenaría los resultados en su caché externo. De esta manera, se asegura de que su conexión de base de datos solo se abra con un Lambda a la vez, ya que respetará el evento de CloudWatch, que se ejecuta solo una vez por disparador.

EDITAR :después de que el OP envió un enlace en las secciones de comentarios, he decidido agregar un poco más de información para aclarar lo que quiere decir el artículo mencionado

Del artículo:

Y esto es exactamente lo que estás haciendo. ¡Y esto funciona! Pero el problema es si tienes N conexiones (Solicitudes Lambda) al mismo tiempo. Si no establece ningún límite, de forma predeterminada, se pueden activar hasta 1000 funciones de Lambda al mismo tiempo. Ahora, si luego realiza otras 1000 solicitudes simultáneamente en los próximos 5 minutos, es muy probable que no abra nuevas conexiones, porque ya se abrieron en invocaciones anteriores y los contenedores aún están activos.