En este encuentro veremos cómo ha evolucionado el despliegue de sistemas en Internet. Hablaremos de monolitos y microservicios, para por fin descubrir la evolución a serverless, y tendremos una sesión en vivo donde desplegaremos un pequeño sistema a AWS Lambda.
2. ¡Presenta tus ideas en Quito Lambda!
Si tienes algo interesante que presentar, ¡ven a presentar con nosotros!
Programación Funcional, DevOps, Cloud Computing, IaaS, Desarrollo Web, React, WebGL, ReasonML
y cualquier cosa interesante
info@stackbuilders.com
3. Serverless
● Evolución de la web y de la infraestructura
● En qué contexto aparece Serverless
● Qué ofrece Serverless
● Ejemplo de uso
● Demostración en vivo
4. ¿ Como hago que mi página web se pueda ver en Internet ?
Infraestructura Web
5. Evolución histórica de la infraestructura
● Servidor Web
○ Computador conectado a Internet, con servidor en puerto 80
○ WAMP/LAMP/MAMP, cgi-bin
● Servidor Web contratado
○ Static hosting, PHP hosting
● Servidor Web contratado basado en máquina virtual/real
○ Explosión de frameworks web: RoR, Django, ASP.net, Spring
● Infrastructure as a Service
○ Poder contratar fácilmente varios servidores web, interconectarlos
● Platform as a Service
○ Usar framework web sin tener que configurar un servidor web
6. Evolución histórica de la arquitectura software web
● Página Web estática
● Página Web con PHP
● Página Web con binarios para hacer cosas avanzadas
● Framework Web
○ Rutas, templates, base de datos, seguridad, organización
● Monolito basado en framework web
● Microservicios
7. La protesta de Serverless
¿Por qué tenemos que hablar tanto de infraestructura?
¿Por qué todo tiene que estar dentro de un servidor?
¿Por qué gran parte de mi trabajo consiste en cuidar servidores, alimentarlos y cambiarles el pañal?
¿Por qué hablamos tanto de los servidores, y tan poco de la lógica de negocio?
8. La propuesta de Serverless (1)
Quiero que se ejecute este código cuando ocurra cierto evento. Eventos posibles:
● Alguien visite mi aplicación web
● Alguien rellene y envíe un formulario web
● Alguien llame a cierto endpoint de mi API
● Alguien pague una compra en mi tienda
● Alguien haga un push a mi repositorio en Github
● Alguien me mande un email
Y muchas otras opciones.
9. La propuesta de Serverless (2)
No quiero saber nada de servidores.
No quiero saber nada de costes de mantener la infraestructura.
No quiero saber nada de actualizaciones de software, de configurar Nginx para que me haga forwarding, de establecer
certificados, de escalar la aplicación, de hacerla más pequeña, de construir para las máquinas de
AWS/Heroku/Azure/Whatever, de enrutar paquetes, de escalar la base de datos, de configurar el DNS, de parches de
seguridad, de CWE-1234 que afecta al framework si está configurado en Linux usando Apache, certificados con TLS
1.2, es martes y hay luna llena...
10. La propuesta de Serverless (3)
Sólo quiero que se ejecute cierto código cuando ocurra cierto evento.
Mi proveedor de la Nube se encargará del servidor, de las actualizaciones, de escalar y de todos esos detalles que yo no
quiero conocer.
11. Desde Monolito hasta Serverless (1)
Monolito
● Todo junto en el mismo binario
● Diseño flexible. Puedo usar variables globales, estado general disponible.
● Difícil de escalar
Microservicios
● Separar diferentes servicios
● Mayor separación, potencialmente mejor ingeniería
● Más fácil de escalar
● Mayor coste de intercomunicación
12. Desde Monolito hasta Serverless (2)
Serverless
● Todo separado en funciones independientes
● Estado explícito en forma de bases de datos externas.
● Estado interno inexistente/efímero
● Fácil de escalar. Tan fácil, que el proveedor de la nube puede escalar automáticamente.
● Coste de intercomunicación más alto
● Alternativas de billing: coste por invocación -> coste por usuario/coste por transacción
13. Principios de Serverless
Funciones separadas
● Conectadas a endpoints y a fuentes de eventos
● Que no tienen estado compartido
○ El estado que tienen es explícito en servicios externos (BBDD externas)
● Que actúan sobre servicios externos:
○ Modificar datos en bases de datos
○ Crear/modificar/destruir servidores
○ Enviar emails
○ Ejecutar transacciones
○ ...
14. Principios de Serverless (2)
Funciones separadas
● Desplegadas a la Nube sin tener que entender los detalles que ocurren por debajo
● Cobradas por invocación
● Sin requerir frameworks avanzados para enrutar
15. Framework Serverless
Funciones:
● Python, NodeJS, Go, Java, C#, y muchos otros lenguajes usando plugins
Descripción de interconexión de funciones - serverless.yml
● Fuente de eventos
● Recursos utilizables
● Parámetros adjuntos
○ Variables de entorno, configuración CORS, logging, y otros
16. Un ejemplo
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
};
Endpoint
● GET - https://fpxhkf7a9c.execute-api.us-east-1.amazonaws.com/dev/ hello