Y esto cambió la responsabilidad de tener que pensar en las computadoras y simplemente dejarlo todo en manos de Amazon. Y luego, unos años después, comenzamos a ver el surgimiento de plataformas como servicio, lo que transfirió más responsabilidad donde tenías que preocuparte menos por la computadora en la que se ejecuta tu aplicación y simplemente dejar eso en manos de tu proveedor de la nube. Y luego, unos años después, nuevamente, vimos el surgimiento de funciones como servicio con AWS Lambda, um, en la nube. No puedo pensar en otros ejemplos en este momento, pero fue genial porque nos preocupamos menos por nuestros servidores. Y nos enfocamos únicamente en construir el código que ejecuta nuestras aplicaciones. Y esto fue genial porque podías escalar tu aplicación casi infinitamente porque, en caso de que haya un aumento repentino de tráfico en tu aplicación, puedes escalar hasta tener 1,000 instancias de funciones ejecutándose al mismo tiempo.
Y luego, en caso de que no haya tráfico, se reduciría a cero y solo pagarías por lo que realmente uses en lugar de tener un servidor en funcionamiento durante mucho tiempo. Pero esto trajo algunos desafíos, especialmente cuando se trataba de trabajar con bases de datos relacionales. En esta charla, hablaré sobre tres desafíos concretos que, um, bueno, los desarrolladores y los equipos experimentaron. Y el más grande de todos ellos fue la gestión de conexiones y cómo manejar las conexiones a tu base de datos. Tomemos como ejemplo una función, que está representada por este hermoso OVNI aquí. Um, si tu función tuviera que interactuar con la base de datos y estás utilizando un generador de consultas o un conector de base de datos, si sigues la configuración predeterminada, es probable que se abran múltiples conexiones. Y esto está bien si tienes un solo Lambda que se ejecuta una vez cada mucho tiempo, porque tu base de datos estaría bastante relajada, pero el desafío principal surge cuando tienes un aumento repentino de tráfico y tienes un enjambre completo de Lambdas.
Y no uno o dos, tres, tantos cuatro, sino un enjambre completo. Y en este caso, tu base de datos está en un estado de pánico porque generalmente tiene un número limitado de conexiones en un momento dado. Y antes de que te des cuenta, te quedarás sin conexiones y tus datos y tus funciones comenzarán a generar errores y fallarán. Y esto no es ideal porque lamentablemente tu base de datos no puede escalar junto con tus funciones en el entorno serverless. Otros problemas que aún experimentamos con serverless incluyen los tiempos de espera de las funciones, lo cual no es ideal para trabajar con procesos de larga duración. Por ejemplo, si tienes una operación por lotes que tarda una hora en completarse, la mayoría de los proveedores de la nube suelen tener un tiempo establecido de cuánto tiempo debe ejecutarse tu función, lo cual no es ideal si tienes un proceso que dura mucho tiempo. Otro desafío con el que todavía nos encontramos es el inicio en frío, lo cual afecta la latencia de tu función y no brinda una experiencia óptima para tus usuarios. Pero no todo es tan malo porque encontramos soluciones y eso es genial, porque impulsa la innovación. Y una de ellas fue establecer el tamaño del grupo de conexiones al conectarse a tu base de datos en uno. Entonces, en lugar de tener múltiples conexiones, puedes limitarlo a solo una. Sin embargo, esto no es ideal, porque si tienes, por ejemplo, una operación por lotes que inserta mil registros, entonces se ejecutarían de forma secuencial en lugar de paralela, lo que lo hace un poco lento. Eso está bien. Tenemos otra posibilidad, que es definir un límite de concurrencia. Entonces, en caso de que haya un aumento repentino de tráfico, tu proveedor de la nube generalmente establece cuántas Lambdas puedes ejecutar en un momento dado. Entonces, en este caso, puedes ir a tu consola de AWS, por ejemplo, y luego puedes limitar en lugar de tener 100 Lambdas ejecutándose simultáneamente, puedes tener, digamos, 10 o 20 en cualquier momento. Pero la solución más robusta de todas es utilizar un grupo de conexiones externo como PG Bouncer, que se encargará de administrar todas las conexiones que van a tu base de datos.
Comments