Cuando creamos una nueva aplicación o sistema web es muy habitual que uno de los requisitos imprescindibles del mismo es que sea escalable y también resiliente, o, lo que es lo mismo, que sea capaz de absorber picos de demanda sin ver afectado su rendimiento o disponibilidad.
En este curso veremos las distintas herramientas, arquitecturas y patrones que tenemos a nuestra disposición para conseguir que nuestras aplicaciones sean altamente escalables y resilientes.
Veremos cómo utilizar de forma efectiva arquitecturas como microservicios o “Saga Pattern”, soluciones de caché como Redis o Varnish y metodologías como 12factor. Además veremos cómo podemos monitorizar un sistema o realizar las pertinentes pruebas de carga para conocer su capacidad y poder actuar en consecuencia.
Objetivo
Dotar a los alumnos de las siguientes competencias:
- Capacidad para producir código escalable, así como crear sistemas estables, tolerantes a fallos y económicamente viables. Teniendo en cuenta tanto la parte software como de sistemas y configuración.
- Conocer las diferencias, así como los puntos fuertes y débiles de las distintas tecnologías y soluciones, ya sean lenguajes de programación, sistemas de bases de datos o tecnologías cloud.
- Capacidad para monitorizar un sistema software y poder hacer frente a problemas en producción o caídas inesperadas de forma efectiva.
Audiencia
Desarrolladores, administradores de sistemas, otros profesionales técnicos, gestores de proyectos.
Prerrequisitos
Conocimientos básicos de programación y administración de sistemas.
- Escalado vertical vs horizontal
- Tipos de balanceo de carga
- Escalabilidad en bases de datos. Comparación de tecnologías disponibles teniendo de cuenta la escalabilidad:
- Comparativa entre distintos lenguajes de programación (puntos fuertes y débiles de cada uno):
- Java
- .NET
- PHP
- Python
- js
- Go, Rust…
- Introducción a 12factor
- Optimizaciones de código: buenas prácticas
- Detección de cuellos de botella
- Condiciones de carrera. ¿Qué son? Detección y prevención.
- Comunicación asíncrona: introducción a las colas de mensajería.
- Prevención de duplicados y/o mensajes desordenados
- Políticas de reintentos
- Colas dead-letter
- Sistemas avanzados de caché:
- Caché de datos: Redis
- Estampida de caché. ¿Qué es? Soluciones.
- Caché HTTP (Varnish)
- Buenas prácticas haciendo uso de caché.
- Midiendo la capacidad de nuestro sistema: pruebas de carga
- Herramientas: K6, Autocannon
- Buenas prácticas ejecutando pruebas de carga
- Arquitecturas avanzadas
- CQRS pattern
- Monolito, Microservicios, Monolito Modular, Serverless
- Event Driven Architecture y Saga pattern.
- Técnicas de despliegue efectivo de nuevo código: blue/green, canary,…
- Ejercicio práctico: como soportar miles de request por segundo sin morir en el intento.