# Stateless y stateful

> Si un programa recuerda cosas entre un pedido y otro, o guarda esa memoria en otro lado.

- Nivel: Intermedio
- Temas: Cloud, Software
- URL: https://tidbit.legios.com.ar/es/stateless-and-stateful/
- En inglés: [Stateless and stateful](https://tidbit.legios.com.ar/stateless-and-stateful/)

El **estado** es todo lo que un programa necesita recordar para hacer su trabajo: quién inició sesión, qué hay en el carrito, las filas de una base de datos. Un componente **stateless** (sin estado) no guarda nada de eso entre pedidos. Cada pedido llega con todo lo necesario para responderlo, o el componente lo busca en otro lado. Uno **stateful** (con estado) guarda esa memoria adentro suyo, en su RAM o en su propio disco.

La diferencia pesa mucho en la nube. Los servidores stateless son intercambiables: un balanceador de carga puede mandar cualquier pedido a cualquier copia, el autoscaling puede sumar diez más durante un pico y borrarlas después, y si una se cae no se pierde nada. Por eso el consejo habitual es hacer stateless los servidores web y de API, y llevar el estado a servicios pensados para guardarlo, como una base de datos, una caché o un almacenamiento de objetos. El propio HTTP es un protocolo sin estado; los logins funcionan porque el navegador manda una cookie o un token en cada pedido.

Los sistemas stateful, como las bases de datos, las colas de mensajes o el servidor de un juego multijugador, son más difíciles de operar. No podés matar una copia o levantar otra así nomás; los datos hay que replicarlos, respaldarlos y moverlos con cuidado. En Kubernetes, por ejemplo, las apps stateless usan Deployments y las stateful necesitan StatefulSets y volúmenes persistentes. El objetivo no es evitar el estado, que toda app útil tiene, sino tenerlo en pocos lugares bien cuidados.

## Una analogía

Un servidor stateless es como una caja del supermercado: te puede atender cualquier cajera libre, porque todo lo que necesita está en tu carrito. Uno stateful es como tu médico de cabecera, que se acuerda de tu historia, así que tenés que ver a esa persona en particular.

## Para quedarse

- Stateless: no recuerda nada entre pedidos; cualquier copia puede responder.
- Stateful: guarda datos adentro suyo, así que esa copia importa.
- Los servidores stateless escalan y se recuperan fácil detrás de un balanceador.
- Diseño común: servidores de aplicación stateless y el estado en bases de datos y cachés.

## Para seguir leyendo

- [Protocolo sin estado en Wikipedia](https://es.wikipedia.org/wiki/Protocolo_sin_estado)
- [Estado (informática) en Wikipedia](https://es.wikipedia.org/wiki/Estado_(inform%C3%A1tica))
- [The Twelve-Factor App: procesos](https://12factor.net/es/processes)

## Términos relacionados

- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [RAM](https://tidbit.legios.com.ar/es/ram/): La memoria de corto plazo de la computadora: rápida, chica y se borra al apagar.
- [Computación en la nube](https://tidbit.legios.com.ar/es/cloud-computing/): Alquilar computadoras por internet en vez de comprar las tuyas.
- [Servidor](https://tidbit.legios.com.ar/es/server/): Una computadora cuyo trabajo es responder pedidos de otras computadoras, todo el día.
- [Balanceador de carga](https://tidbit.legios.com.ar/es/load-balancer/): El agente de tránsito que reparte los pedidos que llegan entre muchos servidores.
- [Autoescalado](https://tidbit.legios.com.ar/es/autoscaling/): Sumar y sacar servidores en forma automática a medida que sube y baja la demanda.
- [API](https://tidbit.legios.com.ar/es/api/): El menú de cosas que un programa le deja pedir a otro programa.
- [Caché](https://tidbit.legios.com.ar/es/caching/): Guardar una copia de una respuesta a mano para no tener que calcularla de nuevo.
