¿Qué es Serverless?
Serverless, como su nombre indica, se refiere a la computación sin servidores. Quizás te preguntes, ¿cómo es posible realizar cálculos sin servidores? En realidad, serverless no significa que literalmente no haya servidores. En cambio, utiliza tecnología para abstraer el concepto de servidores de la lógica empresarial, permitiendo a los desarrolladores centrarse únicamente en sus aplicaciones sin preocuparse por la infraestructura subyacente.
¿Cómo funciona Serverless?
Desde la llegada de Serverless, muchos desarrolladores lo han percibido como una tecnología novedosa, y ciertamente lo es, dada su conveniencia. Sin embargo, no hay que complicarlo ni sentirse intimidado. La lógica subyacente de ejecutar aplicaciones no ha cambiado. Serverless simplemente emplea medios técnicos para ocultarnos las complejidades involucradas, como cualquier otra tecnología en la nube.
Antes de Serverless, implementar una aplicación web era un proceso engorroso. Para ejecutar nuestra aplicación, primero teníamos que construir un entorno de ejecución en el lado del servidor. Esto implicaba comprar máquinas virtuales, inicializar sus entornos, instalar las dependencias necesarias, asegurando la mayor coherencia posible con nuestro entorno de desarrollo local. A continuación, para que nuestra aplicación fuera accesible a los usuarios, necesitábamos comprar un nombre de dominio, registrarlo usando la dirección IP de la máquina virtual, configurar e iniciar Nginx, y finalmente, subir y lanzar el código de la aplicación.
En marcado contraste con el flujo de trabajo tradicional, la implementación Serverless solo requiere tres pasos simples, lo que la convierte en una abstracción extrema de las operaciones del lado del servidor. En esencia, toda la cadena de solicitudes de datos HTTP del usuario sigue siendo cualitativamente igual; Serverless simplemente simplifica el modelo general.
Para explicarlo con más detalle, antes teníamos que construir un entorno de ejecución en el lado del servidor, mientras que las aplicaciones FaaS abstraen este paso en servicios de funciones. Solíamos necesitar balanceo de carga y proxies inversos, pero las aplicaciones FaaS abstraen esto en desencadenadores de funciones HTTP. Solía ser necesario subir el código e iniciar la aplicación, pero las aplicaciones FaaS abstraen esto en código de función.
Cuando un usuario accede por primera vez a un desencadenador de función HTTP, este retiene la solicitud HTTP del usuario y genera una notificación de evento de Solicitud HTTP para el servicio de función.
El servicio de función entonces verifica si hay instancias de función inactivas. Si no hay ninguna disponible, obtiene tu código del repositorio de código de función, inicializa e inicia una instancia de función, ejecuta la función, pasa el objeto de Solicitud HTTP como parámetro y ejecuta la función.
Además, la Respuesta HTTP de la ejecución de la función se devuelve al desencadenador de función, que luego transmite el resultado al cliente usuario que espera.
La diferencia más significativa entre Serverless y las plataformas PaaS de alojamiento de aplicaciones radica en la utilización de recursos, que es la innovación más notable de Serverless. Las instancias de aplicaciones Serverless pueden reducirse a cero, mientras que las plataformas PaaS requieren al menos un servidor o contenedor ejecutándose en todo momento.
Antes de la primera invocación, la ocupación real del servidor de una función es cero. Solo cuando un usuario realiza una solicitud de datos HTTP, el servicio de función se activa mediante el evento HTTP, iniciando una instancia de función. Esto significa que, sin solicitudes de usuario, el servicio de función no tiene instancias en ejecución y no consume recursos del servidor. Por el contrario, crear una instancia de aplicación en una plataforma PaaS normalmente lleva decenas de segundos, y para garantizar la disponibilidad del servicio, al menos un servidor debe ejecutar continuamente tu instancia de aplicación.
Para hacer una analogía, Serverless es como una luz con sensor de voz que se enciende rápidamente cuando alguien está presente y se apaga cuando no hay nadie. En comparación con las luces operadas manualmente tradicionales, las luces con sensor de voz son excelentes en eficiencia energética. Sin embargo, esta capacidad de ahorro de energía depende de la capacidad de la luz con sensor de voz para encenderse rápidamente cuando sea necesario.
De manera similar, la clave de las ventajas de Serverless radica en su rápido tiempo de inicio. ¿Cómo lo logra?
¿Por qué Serverless puede iniciarse tan rápido?
El inicio en frío es originalmente un concepto de PC, que se refiere al proceso de recargar la tabla de la BIOS (esencialmente arrancar desde los controladores de hardware) después de un ciclo de apagado, lo que resulta en tiempos de inicio lentos.
En los entornos de nube actuales, los ciclos de apagado de servidores físicos son casi inexistentes. En el contexto de Serverless, el inicio en frío se refiere a todo el proceso desde la invocación de la función hasta que la instancia de función está lista. Nuestro enfoque aquí es minimizar el tiempo de inicio, ya que tiempos de inicio más cortos se traducen directamente en una mayor utilización de recursos. Los proveedores de nube actuales, aprovechando optimizaciones específicas del lenguaje, han logrado tiempos promedio de inicio en frío entre 100 y 700 milisegundos. Gracias a la compilación Just-In-Time de Google en su motor JavaScript, Node.js cuenta con los inicios en frío más rápidos.
Vale la pena señalar que un servicio Serverless puede comenzar desde cero, ejecutar una función y completar el proceso en 100 milisegundos, una razón clave por la que Serverless puede reducirse a cero con confianza. Al abrir una página web, un tiempo de respuesta de menos de un segundo generalmente se considera excelente. En este contexto, un tiempo de inicio de 100 milisegundos tiene un impacto insignificante en los tiempos de carga de la página.
Además, es seguro asumir que los proveedores de nube continuarán optimizando su infraestructura para tiempos de inicio aún más rápidos, lo que finalmente conducirá a una mayor utilización de recursos. Por ejemplo, descargar el código de la función es un paso que consume mucho tiempo durante los inicios en frío. Por lo tanto, al actualizar el código, los proveedores de nube a menudo inician proactivamente la programación de recursos para descargar y construir imágenes de contenedor para tus instancias de función. Cuando llega la primera solicitud, pueden aprovechar estas imágenes en caché, omitiendo el paso de descarga de código de un inicio en frío y lanzando el contenedor directamente desde la imagen. Esta técnica se conoce como inicio en caliente. En consecuencia, para aplicaciones sensibles a la latencia, podemos utilizar estrategias de inicio en caliente o precalentamiento de instancias para acelerar o evitar por completo los tiempos de inicio en frío.
¿Cómo se estructura Serverless en capas?
Cuando tu instancia Serverless se ejecuta, comprende al menos tres capas: contenedor, tiempo de ejecución y código de función.
Piensa en el contenedor como el sistema operativo (SO). La ejecución de código requiere interactuar con el hardware, y el contenedor simula el kernel y la información del hardware, permitiendo que tu código y tiempo de ejecución funcionen dentro de él. La información del contenedor incluye tamaño de memoria, versión del SO, detalles de la CPU, variables de entorno, etc. Actualmente, las implementaciones de FaaS pueden utilizar contenedores Docker, máquinas virtuales (VMs) o incluso entornos sandbox.
El tiempo de ejecución representa el contexto en el que se ejecuta tu función. La información del tiempo de ejecución incluye el lenguaje de programación y la versión utilizados, como Node.js v10 o Python 3.6; objetos invocables, como el SDK de aliyun; e información del sistema, como variables de entorno.
¿Cuáles son los beneficios de este enfoque en capas? La capa de contenedor ofrece una aplicabilidad más amplia, permitiendo a los proveedores de nube precalentar numerosas instancias de contenedor, fragmentando efectivamente los recursos del servidor físico. Las instancias de tiempo de ejecución, con su menor aplicabilidad, se pueden precalentar en menor cantidad. Una vez que el contenedor y el tiempo de ejecución están fijos, descargar y ejecutar el código se vuelve sencillo. Esta arquitectura en capas permite una optimización eficiente de los recursos, permitiendo una ejecución rápida y rentable de tu código.
Resumen
- La cadena de invocación de una aplicación Serverless pura consta de tres componentes principales: desencadenadores de función, servicio de función y código de función. Estos reemplazan respectivamente las operaciones tradicionales del lado del servidor de balanceo de carga y proxies inversos, servidores y entornos de ejecución de aplicaciones, e implementación de código de aplicación.
- La diferencia más significativa entre Serverless y las plataformas PaaS de alojamiento de aplicaciones tradicionales radica en la capacidad de las aplicaciones Serverless para reducirse a cero e iniciarse rápidamente ante eventos desencadenantes. Las funciones Node.js, por ejemplo, pueden lograr inicio y ejecución en 100 milisegundos.
- Serverless, por diseño, sacrifica el control del usuario y el alcance de la aplicación para simplificar el modelo de código. Su estructura en capas mejora aún más la utilización de recursos, que es un factor principal que contribuye a sus tiempos de inicio en frío notablemente cortos.
Novita AI lanzará el servicio Serverless para nuestros usuarios. ¡Únete a la lista de espera ahora y comienza tu negocio con la computación serverless!
Novita AI es la plataforma en la nube integral que impulsa tus ambiciones de IA. APIs integradas, serverless, instancias GPU — las herramientas rentables que necesitas. Elimina la infraestructura, comienza gratis y haz realidad tu visión de IA.
Lectura recomendada
