El modelo serverless no puede ser visto solo como una herramienta para reducir la complejidad de la administración del servidor, sino también para optimizar el uso del servidor de una empresa tanto como sea posible. El término “serverless” se hizo popular con el artículo Why the Future of Software and Apps is Serverless, escrito por Ken Fromm en 2012, donde introdujo esta idea como una consecuencia natural de la tendencia a buscar capacidad de procesamiento en estructuras cada vez más refinadas: de servidores propios de la empresa que solo pueden ser reemplazados después de varios años de uso, al arrendamiento de servidores por mes, horas y segundos. Finalmente, Fromm señaló que los recursos informáticos pueden ser administrados y pagados por tarifas, que es el modelo serverless que tenemos hoy en día.
Al proveer recursos administrados y cobrar por uso, el modelo serverless permite a las empresas obtener más recursos con su inversión. Este artículo ofrece una guía para principiantes sobre la computación serverless, desde su evolución, beneficios e implicaciones para empresas, hasta una revisión de Edge Functions de Azion, un servicio de cómputo serverless que lleva la serverless computing hasta el edge de la red.
Evolución de la Gestión de Infraestructura
La evolución de la gestión de infraestructura es una historia que debe ser abordada en dos partes. En las últimas décadas, han ocurrido cambios no solo en el manejo de recursos (lo que incrementó la tercerización) sino también en los recursos propiamente, que se han atomizado a unidades más pequeñas.
De data centers propios a PaaS
Con el surgimiento de Internet, nacieron los negocios digitales. Inicialmente, el contenido era suministrado desde computadores personales. Sin embargo, para poder crear más contenido y atender una mayor cantidad de solicitudes requería de un mayor poder de procesamiento y almacenamiento; en otras palabras, de más servidores. De esta manera, las empresas hicieron la transición para almacenar su información en data centers privados, centros de colocación y la nube.
Data Centers
Tener infraestructura en data centers propios le otorga a las empresas el control de sus servidores; sin embargo, instalar, operar y hacer mantenimiento de estos equipos implica una enorme cantidad de tiempo y de habilidades técnicas. Para implementar una aplicación en servidores bare-metal, las empresas necesitan comprar racks de hardware, instalar y configurar el sistema operativo, así como el software necesario para que funcione la aplicación, e instalar el código de la aplicación. Las empresas también son responsables de tareas operacionales como reparar o reemplazar hardware antiguo y actualizar el software.
Además de todo esto, es necesario contar con un espacio físico para resguardar los equipos. Un armario con pocos servidores podría ser suficiente para empresas pequeñas, mientras que, para compañías más grandes, esto podría significar habilitar una sala o edificio propio para almacenar los racks, colocar los cables que conectan a los equipos e instalar una red, fuente de energía, sistemas de refrigeración, así como sistemas de backup (respaldo), para prevenir cualquier interrupción de servicio; todo esto debe ser operado y mantenido por la misma empresa.
Gestionar un data center propio implica:
- comprar e instalar hardware;
- obtener licencias, instalar, configurar y actualizar el software;
- reparar y reemplazar hardware antiguo, e
- instalar y administrar la red, la fuente de energía y sistemas de refrigeración.
Centros de colocación
Con los colocation centers (centros de colocación), las empresas pueden pagar para almacenar servidores y equipos de red fuera de sus instalaciones, en data centers que pertenecen y son operados por terceros. De esta manera, no es necesario hacer mantenimiento de las instalaciones, gestionar fuentes de energía y sistemas de refrigeración, ni siquiera instalar cables para conectar los equipos. Al contrario, las empresas que usan este tipo de servicios son responsables solamente por la operación y mantenimiento del equipo que usan.
Gestionar equipos en este tipo de centros requiere:
- comprar e instalar servidores;
- mantener y reemplazar equipo antiguo;
- implementar y actualizar software, así como
- gestionar equipo de red.
Cloud computing
Con la llegada de la cloud computing, las empresas ya no necesitan comprar u operar servidores. En su lugar, pueden pagar recursos virtualizados en Internet, bajo un esquema on-demand. Los servicios de cloud computing tradicionales pueden dividirse en dos tipos: Infrastructure-as-a-Service (IaaS) y Platform-as-a-Service (PaaS). En el caso de IaaS, el almacenamiento, la red, los servidores y la virtualización son ofrecidas por el proveedor como un servicio. Un servicio de PaaS reduce aún más las complejidades de la gestión, al proporcionar no solo recursos on-demand, sino también un ambiente gerenciado, que incluye runtime, sistema operativo y middleware para la construcción de aplicaciones.
Para gestionar recursos en la nube es necesario:
- configurar el runtime de la aplicación, el sistema operativo y el middleware (con IaaS);
- gestionar licencias de software;
- configurar y gestionar máquinas virtuales (VM) o contenedores, así como
- configurar y gestionar herramientas para orquestación de contenedores.
De servidores bare-metal a contenedores
Para facilitar la transición de la gestión de infraestructura de un modelo de equipos técnicos locales hacia uno que puede ser ejecutado remotamente por equipos de operaciones, los recursos informáticos necesitaban ser virtualizados. Con el surgimiento de las VM, las empresas ya no necesitan comprar e instalar hardware manualmente. Al contrario, pueden implementar remotamente nuevas instancias de procesamiento en minutos, con solo instalar y configurar un nuevo sistema operacional y el software necesario para ejecutar la aplicación.
Los contenedores también son recursos de procesamiento virtualizados, pero tienen propiedades de aislamiento más flexibles que les permiten compartir el mismo sistema operativo. Esto facilita tanto un uso más eficiente del recurso como una implementación más fácil, si se tiene en cuenta que los desarrolladores no tienen que instalar o configurar un nuevo sistema operativo por cada nuevo contenedor. Cada contenedor tiene su propia parte del kernel del sistema operativo, además del código de la aplicación, sus dependencias, CPU, memoria y los I/O del disco necesarios para ejecutarlo. Configurar estos recursos implica algún nivel de gestión del contenedor; sin embargo, muchas tareas pueden ser automatizadas con herramientas de orquestación, como Kubernetes.
- Los servidores bare-metal deben ser instalados y gestionados manualmente.
- Las VM pueden ser implementadas y gestionadas remotamente.
- Los contenedores pueden ser implementados remotamente, con herramientas de orquestación para automatizar algunas tareas administrativas.
Cada paso en la transición de servidores tradicionales a contenedores reduce parte de las tareas de configuración y administración de la infraestructura. Adicionalmente, cada avance permite a las empresas hacer un uso más eficiente del espacio en servidor. Sin embargo, al hacer esto, las compañías acumulan muchos recursos virtuales para gestionar. Esta tendencia solo se ha acelerado con el incremento de la globalización y el crecimiento de los negocios digitales a hiperescala, lo cual requiere que numerosos servidores estén geográficamente distribuidos por todo el mundo.
En una economía cada vez más globalizada y digitalizada, administrar una gran empresa puede significar miles e inclusive millones de contenedores; una tarea compleja y desafiante, incluso para empresas que poseen servicios gestionados en la nube y herramientas de orquestación. Afortunadamente, un nuevo paradigma está surgiendo, el cual combina recursos eficientes con servicios altamente gestionados: la serverless computing, también conocida como computación serverless.
¿Qué significa serverless?
El Serverless Whitepaper de la Cloud Native Computing Foundation define a la serverless computing como “la idea de construir e implementar aplicaciones que no requieren de gestión de servidores. Esto describe un modelo de implementación atomizado donde las aplicaciones, agrupadas como una o más funciones, son implementadas en la plataforma y luego son ejecutadas, escaladas y facturadas en respuesta a la demanda necesitada al momento”. Con esto, el modelo serverless, o la idea de “no usar servidores”, elimina tanto los gastos por recursos desperdiciados, como la necesidad de que las compañías gestionen su propia infraestructura.
Las plataformas serverless podrían incluir tanto servicios gestionados, como el Edge Cache, la autenticación y las bases de datos, así como un servicio de cómputo serverless para construir funciones basadas en eventos, que son pequeñas, stateless, efímeras y, principalmente, no están dedicadas a ningún servidor específico. Como resultado, las empresas de edge computing pueden ejecutar funciones serverless en el edge de la red, más cerca de los usuarios finales, garantizando la menor latencia posible.
¿Cuáles son las implicaciones para las empresas al hacer la “transición” a la serverless computing?
La adopción de un modelo serverless no solo es económica y eficiente en términos de recursos, sino que también permite una mejor programación. Tal como explica Forrester en su reporte Serverless Best Development Practices, “serverless elimina la necesidad de expertos en AD&D para escribir y gestionar docenas de archivos de configuración XML o de adoptar una infraestructura como código, exclusivamente para dar soporte a las operaciones”[1].Como resultado, programar en serverless significa menos código y, como consecuencia, una superficie de ataque más pequeña y menos bugs o errores.
Además de la reducción en el código y de necesitar menos configuraciones, implica un flujo de trabajo simplificado, con un número menor de tareas operacionales. Esto facilita prácticas de negocio ágiles como DevOps, que combina equipos de desarrollo con equipos de operaciones. Aunque DevOps es a menudo discutido en el contexto de diseño y administración de contenedores, los servicios serverless permiten a las organizaciones llevar DevOps a otro nivel.
Un artículo reciente en la página web DevOps.com promueve el uso de serverless como un medio para potenciar la cultura DevOps al:
- automatizar DevOps usando infraestructura como código;
- alternar fácilmente entre versiones con interrupciones mínimas del servicio, y
- permitir que estos equipos trabajen en una variedad de ubicaciones y ambientes sin impacto significativo para otros equipos.
El reporte de Forrester sobre Serverless Best Practices también argumenta sobre el impacto que puede tener la cultura de DevOps para las compañías:
- Mínimo esfuerzo para implementar aplicaciones que pueden ser escaladas fácilmente.
- Lanzamiento de actualizaciones y nuevas funciones en minutos.
- Ejecutar fácilmente experimentos de negocio.
- Escalar a cero, sin costo, funciones inactivas.
- Refinar fácilmente aplicaciones con menos riesgo de desestabilización[1].
Por ello, la serverless computing se ha convertido en una opción popular. En una publicación reciente, Forrester predijo que 25 % de los desarrolladores usarán funciones serverless para finales de 2021 con regularidad.
Azion lleva la computación serverless al edge
Con las Edge Functions de Azion, las empresas pueden aprovechar los beneficios de una plataforma serverless, junto con el poder de la edge computing. A diferencia de algunas soluciones, como AWS Lambda o Microsoft Azure, que ofrecen funciones serverless desde data centers de gran escala ubicados lejos de los usuarios finales, las Edge Functions se ejecutan en la edge location más cercana al usuario final, lo que significa una menor latencia de red comparado con las soluciones de nube de otros proveedores.
Con las soluciones basadas en contenedores es necesario tener servidores dedicados para mantener las funciones en ejecución. Como resultado, los proveedores pueden desactivar las funciones después de haber estado inactivos por un tiempo. Cuando las funciones son requeridas después de ese periodo de inactividad, los contenedores deben ser activados nuevamente, lo que incrementa la latencia de la aplicación, conocido como un cold start. Además, ejecutar funciones en contenedores significa que los clientes deben asignar memoria para cada función, requiriendo configuraciones adicionales y con la posibilidad de tener un aprovisionamiento excesivo.
En cambio, las Edge Functions no usan contenedores, como sucede con otras soluciones. Son ejecutadas en un ambiente multitenant, usando Google V8, que crea una sandbox segura para mantener cada función aislada. Gracias a esto, al usar las Edge Functions se eliminan los cold starts, se necesita menos configuración y se usan recursos de manera más eficiente, respecto a las soluciones con contenedores.
Las Edge Functions de Azion están disponibles para que todos los usuarios experimenten los beneficios de la computación serverless. Los nuevos usuarios pueden crear una cuenta gratuita en nuestra página web y obtener 300 USD en crédito de servicios para usar con Edge Functions o cualquier otro producto de Azion.
Referencias
[1] Hammond, J. S., & Rymer, J. R. (2019). Serverless Development Best Practices (pp. 3-4, Rep.). Cambridge, MA: Forrester Research.