DevPath · Aprende a programar ESPTEN

Observabilidad y rendimiento

Escalado: horizontal, balanceadores y stateless

Cuando una máquina no basta

Llega un punto en que tu servicio recibe más tráfico del que una instancia puede atender. Hay dos formas de crecer.

Vertical vs. horizontal

En la práctica moderna se prefiere el horizontal, y es la base de la nube.

El balanceador de carga

Un balanceador de carga (load balancer) es la pieza que está delante de tus instancias y reparte las peticiones entre ellas (por turnos, por menos conexiones, etc.). El cliente habla con una sola dirección; el balanceador decide qué instancia responde. Además consulta los health checks y deja de enviar tráfico a las instancias que no responden.

La clave del horizontal: ser stateless

Para poder repartir libremente las peticiones entre instancias intercambiables, cada instancia debe ser sin estado (stateless): no guarda en su memoria local nada que la siguiente petición necesite. ¿Por qué? Porque el balanceador puede mandar la petición 1 de un usuario a la instancia A y la petición 2 a la B. Si la sesión vive en la memoria de A, la B no la conoce y el usuario "pierde" su sesión.

La solución: sacar el estado compartido fuera, a un almacén que todas comparten — la base de datos, Redis para sesiones/caché, un servicio de ficheros. Las instancias quedan desechables: puedes crear, destruir o reemplazar cualquiera sin perder nada. Eso es justo lo que habilita lo siguiente.

Autoescalado y pruebas de carga

Resumen mental: stateless te deja escalar horizontalmente, el balanceador reparte la carga y el autoescalado ajusta el número de instancias a la demanda. Y todo lo mides con las métricas del primer pilar.

Ejemplos

Balanceo round-robin: repartir por turnos entre instancias

function crearBalanceador(instancias) {
  let i = 0;
  return function siguiente() {
    const elegida = instancias[i % instancias.length];
    i++;
    return elegida;
  };
}

const lb = crearBalanceador(["A", "B", "C"]);
console.log([lb(), lb(), lb(), lb()].join(" ")); // A B C A
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Rendimiento: caché, lazy loading y la BDVer el módulo →