Sistemas Distribuidos
Curso de escalabilidad v2, día 1
Vuestros Anfitriones
Programa
Qué es escalabilidad
Definición de escalabilidad
The capacity to be changed in size or scale.
The ability of a computing process to be used or produced in a range of capabilities.
Escalar arriba ¡y abajo!
Uso en literatura
Ejemplo: Linux
¿Qué hace que algo sea escalable?
- Escasez de algún recurso
- Tiempo de espera creciente
- Imposibilidad de responder
- Bloqueo de algún recurso
- ...
Ejercicio: Servicio poco escalable
$ npm install -g loadtest
$ loadtest http://service.pinchito.es:3000/a -n 2000 -c 100 --keepalive
Ejercicio +
# ssh ubuntu@[direcciónIP]
$ loadtest http://service.pinchito.es:3000/a -n 2000 -c 100 --keepalive
Ejercicio +
$ loadtest http://service.pinchito.es:3000/a -n 2000 -c 100 --rps 300 -k
$ loadtest http://service.pinchito.es:3000/a -n 2000 -c 100 --rps 400 -k
$ loadtest http://service.pinchito.es:3000/a -n 2000 -c 100 --rps 2000 -k
Ejercicio +
Ejercicio +
loadtest http://service.pinchito.es:3000/d -n 2000 -c 100 -k
Success!
¿qué recurso se ha agotado?
rps vs throughput
Perfiles de Escalabilidad
Latencia vs rps
Ley de Little
Escalado v⇕ y h ⇔
Comienzos difíciles
IBM mainframeServidores especializados
Las típicas cabinas
Y entonces llegó Google
Escalado vertical ⇕
Comprar una máquina más gorda
Y otra más gorda
Así hasta que se acaban las máquinas
Es difícil volver a una máquina más pequeña 😅
Escalado vertical ⇕
Sshhh...
Escalado Horizontal ⇔
Colocar muchas máquinas para hacer una función
("provisionamiento")
Añadir y quitar máquinas para escalar
Si falla una máquina se quita del servicio
Escalado horizontal ⇔
Ejercicio: Almacenamiento
Diseña un almacenamiento corporativo de 15 TB
Opción 1 ⇕: storage area network (SAN)
Mejor opción de diciembre 2008
Opción 2 ⇔: discos en bruto
Ejercicio +
¿Precio final?
⮯
Ejercicio +
Considera estrategias de redundancia
Tolerancia a fallos
Opciones de redundancia: 2x, 3x, ?
Considera estrategias de escalado
¿Cómo afectan al precio?
⮯
Success!
Estrategias h ⇔
Balanceo (servidor)
Balanceo (cliente)
Afinidad
Independencia
Sharding
Clustering
Replicación
Colas
Balanceo en servidor
Balanceo en cliente
Afinidad ⇔
Independencia ⇔
Clustering ⇔
Sharding ⇔
Replicación ⇔
REPLICACIÓN activa ⇔
Colas ⇔
Ejercicio: almacenamiento Escalable
Ejercicio +
Ejercicio +
Ejercicio +
Ejercicio +
Well done!
Sistemas Distribuidos
Teorema CAP
Eric Brewer, 1999 (demostrado por Gilbert&Lynch, 2002).
C: consistency, consistencia
A: availability, disponibilidad
P: network partition, partición de red
Elige dos.
¿Cómo afecta a las bases de datos?
CAP 2012
Ejercicio: Diseña un cajero automático
Ejercicio +
Ante una P, hay que decidir entre A y C
Availability (disponibilidad): soltamos la pasta
El cliente puede no tener saldo
Consistency: no soltamos la pasta
Al fin y al cabo somos una entidad financiera seria
⮯
Ejercicio +
Solución: opción oculta A-
Para no sacrificar la disponibilidad, damos con un límite
Mantenemos un registro de dinero sacado en la tarjeta
Al volver la conexión, reintegramos la consistencia
⮯
Ejercicio +
Diseña un algoritmo de conciliación
Vale también para corregir transacciones duplicadas
y todo tipo de errores
Pista: los bancos llevan trabajando en ello siglos
Pista: prueba con operaciones atómicas
⮯
¡A tope!
Punto único de fallo
Efectividad en coste
Ejercicio: control de costes
Amazon ofrece ElastiCache for Redis
Un Redis "completamente gestionado"
En realidad cobra por instancia
¿Cuál es el sobrecoste asociado?
⮯
Ejercicio +
Precio de ElastiCache for Redis comparado con instancias
Instancias cache.r5.large, cache.r5.12xlarge
Bajo demanda, zona Europa (París)
¿Mejora con nodos reservados vs instancias reservadas?
¿Vale la pena el sobrecoste?
⮯
Ejercicio +
Incluye el coste de mantener Redis
Supón un coste fijo de 3h/mes + 1h/instancia
a €50/hora
El coste de mantener ElastiCache for Redis es la mitad
⮯
Good job!
Replicación de servidores
Repositorios
Scripts
Imágenes
Serverless
Lenguajes en AWS Lambda
Ejercicio: Control de costes (II)
Un servicio tarda 100 ms por petición
El servicio, en Node.js, consume hasta 500 MB de memoria
Recibimos de media 100 req/s, con picos de hasta 300
Calcula el coste mensual de correrlo en AWS Lambda
⮯
Ejercicio +
Ahora calcula el coste en servidores EC2 equivalentes
Podemos crear varios procesos para servir peticiones
El consumo de CPU típico del proceso es del 25%
Asume un carga del 50% de CPU
⮯
Ejercicio +
You did it!
AWS Lambda: contras
Coste
Versiones anticuadas
Despliegue primitivo
Falta de control
Ejercicio: Dispositivo de presencia
Ejercicio +
Ejercicio +
Awesome!
Bibliografía
Eric Brewer: CAP Twelve Years Later: How the "Rules" Have Changed
Brendan Gregg: Systems Performance: Enterprise and the Cloud
John Allspaw: Web Operations: Keeping the Data On Time
HighScalability.com: Favorite posts on HighScalability
CdEv2 1: Sistemas distribuidos
By Alex Fernández
CdEv2 1: Sistemas distribuidos
Curso de escalabilidad v2, día 1: sistemas distribuidos.
- 1,649