39 errores que hace(mos) al hacer scalling
Publicado el 23 dic 2025, 20:27:12 — Categorias: Arquitectura
Hace un tiempo que estoy suscripta al Newsletter de Neo Kim, llamado @systemdesignone, donde envia newsletters (gratuitos) con buena info, y tambien ofrece un tier de suscripcion si quieren pagar por articulos mas completos o mas especificos.
Este fin de año, mando uno muy interesante comentando los 39 (si, que numero mas raro) errores que se cometen al tratar de escalar un sistema existente. Les dejo la lista y si tienen ganas, comenten si les parece que falta alguno
- Escalar verticalmente en vez de horizontalmente (y obviamente llegar a los limites de "no puedo agregar mas hardware")
- Agregar "microservicios" demasiado pronto (le agregas complejidad)
- Ignorar los load balancers
- No usar cache, y obviamente, hacer que las consultas cada vez tarden mas de forma lineal.
- Cachear absolutamente TODO sin ningun sentido (data desactualizada, memoria por las nubes, complejidad)
- Olvidarse de usar CDN para los archivos estaticos
- Mantener el server STATEFUL (y mantener la escalabilidad horizontal + complicar el recovery) -- nada de guardar las sesiones en memoria!
- Escalar los servers antes de la parte de datos (usualmente, la base de datos es el primer cuello de botella)
- Tratar la base de datos como "storage infinito"
- No usar read replicas
- Hacer sharding ANTES de entender como son los patrones de acceso
- No usar indices en las queries criticas
- Permitir que queries LENTAS lleguen a produccion... y obviamente hacer que todo se arrastre cuando los usuarios empiecen a crecer
- Bloquear requests con procesamiento sincronico (async is your friend)
- No usar Queues para background jobs
- Ignorar los reintentos y back-off... hay que acostumbrarse a que las fallas "temporales" son naturales en sistemas distribuidos
- No setear timeouts (y nos quedamos sin threads, y se hace un efectos cascada que tira procesos enteros abajo)
- No setear RATE LIMITS
- Permitir las fallas en "cascada" por no usar patrones de circuit breakers
- Ignorar las presiones que puedan efectuar unos procesos sobre otros
- Hacer deploy a una sola region o zona (y si se te cae
us-east-1, a llorar a la iglesia) - No usar routeo de trafico global
- Escalar manualmente en vez de usar auto-scalling (y actuar en base a "a ver como viene la mano, agreguemos 3 servers")
- Lanzar los productos sin hacer tests de carga
- Nunca hacer capacity planning
- Guardar archivos grandes en la base de datos en vez de usar object storage como S3
- Enviar payloads sin comprimir
- Hacer DEMASIADAS llamadas a distintas APIs
- No usar batching para escribir los registros
- No usar 'service discovery'
- No tener una estrategia de failover
- No preparar nuestro sistema para permitir una "degradacion" parcial, si una API no contesta, se rompe todo
- Reintentos sin idempotencia (reintentar la misma llamada a la API genera corrupcion de datos; cada llamada deberia poder reintentarse sin corromper los datos)
- No tener observabilidad... no se puede escalar lo que no se puede medir
- No tener alertas de monitoreo
- No tener "tracing" a traves de servicios en un sistema distribuido
- Escalar las cosas sin antes arreglar los cuellos de botella
- Copiar architecturas gigantescas como esperando que eso solucione nuestros problemas
- Creer que escalar es sobre las herramientas... y no sobre las elecciones que hacemos y las cosas que compensamos
Les parece que falta alguna? Que agregarian uds?
Volver

Comentarios Recientes
No hay comentarios, porque no dejás alguno?
¡Comentario agregado con éxito!

Deja un comentario



