Proyecto


Curso de escalabilidad v2, 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: utiliza el Redis remoto disponible en
service.pinchito.es:7079

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


Subidlo a la plataforma de TrainingIT

¡Enhorabuena!