Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Serverless: La evolucion de la arquitectura a l...

Quito Lambda
April 25, 2018
32

Serverless: La evolucion de la arquitectura a la nube

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.

Quito Lambda

April 25, 2018
Tweet

Transcript

  1. ¡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 [email protected]
  2. 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
  3. ¿ Como hago que mi página web se pueda ver

    en Internet ? Infraestructura Web
  4. 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
  5. 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
  6. 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?
  7. 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.
  8. 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...
  9. 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.
  10. 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
  11. 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
  12. 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 ◦ ...
  13. 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
  14. 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
  15. 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
  16. serverless.yml service: my-service provider: name: aws runtime: nodejs6.10 functions: hello:

    handler: handler.hello events: - http: path: hello method: get
  17. Stack Builders Presenta tus ideas [email protected] Trabaja con nosotros stackbuilders.com/join

    Facebook: /QuitoLambda Twitter: @QuitoLambda Proximamente: Slack