Sistemas Distribuidos
![](https://imgs.xkcd.com/comics/datacenter_scale.png)
Curso de escalabilidad v2, día 1
Vuestros Anfitriones
![](https://pinchito.es/2020/pics/escalabilidad-alex.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7431310/pasted-from-clipboard.png)
Programa
Qué es escalabilidad
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7431228/pasted-from-clipboard.png)
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
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7388814/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7388829/pasted-from-clipboard.png)
¿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 +
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7433868/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7433867/pasted-from-clipboard.png)
Ejercicio +
loadtest http://service.pinchito.es:3000/d -n 2000 -c 100 -k
Success!
![](https://i.imgflip.com/21gr1.gif)
¿qué recurso se ha agotado?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7436054/pasted-from-clipboard.png)
rps vs throughput
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7433868/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7433990/pasted-from-clipboard.png)
Perfiles de Escalabilidad
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7455906/pasted-from-clipboard.png)
Latencia vs rps
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7433971/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7433977/pasted-from-clipboard.png)
Ley de Little
Escalado v⇕ y h ⇔
Comienzos difíciles
![](https://upload.wikimedia.org/wikipedia/commons/thumb/b/b7/IBM_1401_signal_tracing_at_CHM.agr.jpg/1200px-IBM_1401_signal_tracing_at_CHM.agr.jpg)
Servidores especializados
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7391694/pasted-from-clipboard.png)
Las típicas cabinas
Y entonces llegó Google
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7389121/pasted-from-clipboard.png)
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 ⇕
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7391798/pasted-from-clipboard.png)
Sshhh...
![](https://upload.wikimedia.org/wikipedia/commons/d/d3/IBM_Blue_Gene_P_supercomputer.jpg)
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 ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7391794/pasted-from-clipboard.png)
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!
![](https://media.giphy.com/media/oBPOP48aQpIxq/giphy.gif)
Estrategias h ⇔
Balanceo (servidor)
Balanceo (cliente)
Afinidad
Independencia
Sharding
Clustering
Replicación
Colas
Balanceo en servidor
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7434008/pasted-from-clipboard.png)
Balanceo en cliente
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7434144/pasted-from-clipboard.png)
Afinidad ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7391790/pasted-from-clipboard.png)
Independencia ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7392315/pasted-from-clipboard.png)
Clustering ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7435328/pasted-from-clipboard.png)
Sharding ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7434331/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7434332/pasted-from-clipboard.png)
Replicación ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7435337/pasted-from-clipboard.png)
REPLICACIÓN activa ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7435362/pasted-from-clipboard.png)
Colas ⇔
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7436877/pasted-from-clipboard.png)
Ejercicio: almacenamiento Escalable
Ejercicio +
Ejercicio +
Ejercicio +
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7436714/pasted-from-clipboard.png)
Ejercicio +
Well done!
![](https://media3.giphy.com/media/humN9l6X8lLDfJtgfr/source.gif)
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?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7392528/pasted-from-clipboard.png)
CAP 2012
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7392600/pasted-from-clipboard.png)
Ejercicio: Diseña un cajero automático
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7392637/pasted-from-clipboard.png)
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!
![](https://thumbs.gfycat.com/CarelessElementaryDikdik-size_restricted.gif)
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!
![](https://media.giphy.com/media/13HL8Coc9aK4IU/200.gif)
Replicación de servidores
Repositorios
Scripts
Imágenes
Serverless
Lenguajes en AWS Lambda
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/7394995/pasted-from-clipboard.png)
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!
![](https://media2.giphy.com/media/kCUV7HuQyYgJq/source.gif)
AWS Lambda: contras
Coste
Versiones anticuadas
Despliegue primitivo
Falta de control
Ejercicio: Dispositivo de presencia
Ejercicio +
Ejercicio +
Awesome!
![](https://i.gifer.com/origin/85/8568034156941505281fc4bbb1c433b1_w200.webp)
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,549