En el ámbito de la arquitectura de Software, creo que todavía no somos conscientes del tremendo cambio que está provocando la irrupción del concepto del Serverless. Ese nuevo modelo asociado a los microservicios y la arquitectura orientada a eventos, en última instancia lo que viene a decirle al programador es que sólo se preocupe de poner un “trozo” de código en una “función” y la nube que hay por debajo se encargará de dimensionarlo, ejecutarlo, escalarlo al infinito si hace falta.. y ya está “pon tu código y yo me encargo de ejecutarlo”, eso es Serverless… y qué queréis que os diga, creo que es el sueño de todo programador.

 

El desarrollador en el centro de todo

En las últimas semanas hemos hecho una prueba de concepto en el ámbito de una arquitectura de Microservicios, con Kubernetes y docker como plataforma, Istio para manejar el “service mesh”, Kafka como gestor de eventos y MongoDB como base de datos no relacional. Como es una POC de tecnología y de arquitectura realmente las funcionalidades que hemos implementado son bastante sencillas aunque orientados al negocio de seguros. La cosa es que un microservicio muy simple, que únicamente mantienen una “tabla” de valores en modo clave-valor, que desde el punto de vista de desarrollo no pasa de más de unas pocas horas, para echarlo a andar es un pequeño “infierno”. Además de configurar node.js y NPM en el puesto del desarrollo (con sus herramientas GIT, IDE, etc.) además hay que configurar la base de datos y Kafka dentro de docker. Llegamos un poco al absurdo en el que para unas cuantas líneas de código de servicio CRUD (no más de una mañana) pasamos días y días configurando la infraestructura. Y eso que se facilita mucho con el uso de docker… pero hay una diferencia como del cielo a la tierra entre hacer esto o ir a la consola de AWS (por poner un ejemplo) y configurar una cola de SQS, una tabla de DynamoDB, una lambda y un Gateway… es la diferencia.

serverless

La infraestructura “desaparece”

Desde el punto de vista del desarrollador, realmente el que tiene que ser el centro de todo desarrollo de software, la infraestructura desaparece. Es más, ni siquiera le “importa”. De la misma manera que no le importa cómo demonios llegan los watios que alimentan su portátil. Si quieres más corriente, pagas más y ya está. Eso es serverless… 

Evidentemente la infraestructura no desaparece, simplemente está oculta, operada por otras personas (los técnicos de la nube que estés utilizado), pero simplemente se convierte en un servicio, no te importa cómo lo lleven a cabo. Simplemente (no tan simplemente en la realidad), el desarrollador tiene que escribir su “carga a los reyes magos” de qué necesita para que su función de código funcione… quiero una carpeta para guardar los ficheros, una tabla para guardar los datos, quiero también que el endpoint HTTP con el que expongo la función se proteja con un Gateway, quiero un caché, quiero… y ya está. La carta escrita en el formato de plantilla (como CloudFormation en AWS) forma parte de tu código y como tal se mantiene y versiona… ¿no es maravilloso?.

Un cambio disruptivo en la T.I.

Serverless representa un cambio de paradigma. La infraestructura sigue ahí por supuesto, pero ahora delegamos su gestión a un tercero (a la nube). Esto no significa que no tengamos que lidiar con la arquitectura si no que nos abstraemos un nuevo nivel: primero no quisimos saber nada del sistema operativo, luego no quisimos saber nada del servidor de aplicaciones, ahora no queremos saber nada excepto de escribir nuestro código.

La complejidad de las aplicaciones aumentará (como siempre lo ha hecho), y con Serverless podremos dirigir nuestros esfuerzos más a pensar y a definir la infraestructura en lugar de configurarla y mantenerla, ese es el cambio.