Proyecto
Curso de escalabilidad v3, día 6
Recapitulemos
Sistemas distribuidos. Escalado y replicación
Pruebas de carga. Optimización de rendimiento
Uso de métricas. Incógnitas desconocidas
Monitorización y observabilidad
Análisis de incidencias
Contadores
Uno de los problemas más difíciles
en programación distribuida
Mantiene una cuenta incremental
Requiere un bloqueo
o una operación atómica
Proyecto: Turnomátic distribuido
Nuestro turnomátic está saturado
Queremos ampliarlo para admitir más clientes
- 100k rps para fin de año
- 200k rps en un año
De paso, vamos a modernizarlo
Especificación técnica
El servicio recibe un identificador
Devuelve un contador unívoco y consecutivo
Cada llamada aumenta el contador en uno
y devuelve el total
Cada valor debe ser único
Cada cliente debe recibir un número consecutivo
Al menos hasta Number.MAX_SAFE_INTEGER
API
URL: http://localhost:7017/turno/:id
Recibe un :id único grupoN, donde N es tu grupo
Devuelve un JSON:
{
id: "grupoN",
turno: number
}
Almacenamiento
Para almacenar los contadores puedes usar Redis
Empieza con un Redis local
apt install redis-server
Sugerencia: usa un Redis gestionado
Construcción
Ve poco a poco
Corre pruebas de carga a cada paso
Empieza por un servidor en memoria
Luego usa un Redis local
Después un Redis remoto
Por fin, servidor en cluster
Balanceo
Debes provisionar al menos dos máquinas
El tráfico debe estar balanceado en servidor
Sugerencias: ELB, balanceo por DNS
Para nota: implementa un autoescalado
Monitorización
El sistema debe estar monitorizado
Elige el sistema que prefieras
Alertas:
- CPU excesiva
- errores en las respuestas
Para nota: instrumenta con Honeycomb.io
Pruebas de carga
Realiza pruebas de carga contra tu sistema
Prueba diversas herramientas
Obtén la carga máxima que puedes aceptar
Para nota: prueba con valores no previstos
Informe de escalabilidad
Documenta tu sistema
Cuellos de botella
Optimizaciones abordadas y futuras
Estrategia de escalado
Análisis de incidencias
Si ocurre alguna incidencia en producción:
- Resuélvela
- Anota el timeline
- Investiga las causas
- Establece un plan de acción
- "Publica" un informe
😉
Informe final
Arquitectura
Informe de pruebas de carga
Análisis de escalabilidad
Postmortem de incidente
Para continuar...
Seguid en vuestra casa
Abordad los apartados para nota
Documentad la arquitectura
Anotad todos los cambios que hagáis
¡Enhorabuena!
CdEv3 6: Proyecto
By Alex Fernández
CdEv3 6: Proyecto
Curso de escalabilidad v3, día 6: proyecto.
- 278