Saltar al contenido
ES EN

Por qué el estado es lo más difícil del diseño de software y cómo domarlo

Una guía práctica para entender qué es el estado, quién debe poseerlo y cómo diseñar servidores reemplazables sin perder datos cuando algo falla.

Casi cualquier consejo de arquitectura incluye la frase «haz la aplicación sin estado». Es un buen punto de partida, pero conviene desmenuzarla. El artículo de ByteByteGo sobre por qué el estado es lo más difícil del diseño de software define el estado como la información que un sistema retiene y que afecta a su funcionamiento: los usuarios con sesión iniciada, el texto de un documento, las tareas pendientes de un worker o los registros de una base de datos. En esta guía lo convertimos en un método de trabajo que puedes repetir con tu propio sistema.

Lo que necesitas

No hace falta instalar nada: basta con papel o una pizarra, un diagrama de tu arquitectura actual (aunque sea un boceto) y acceso a quien conozca cómo se despliega el sistema. Ten presente que el texto original, publicado en el perfil de ByteByteGo en Substack, se corta pronto para quien no esté suscrito; por eso nos hemos apoyado solo en las ideas que expone con claridad: por qué existe el estado, quién lo posee y qué ocurre cuando deja de estar disponible.

Diagrama de servidores de aplicación intercambiables conectados a una base de datos central que guarda el estado
Los servidores se pueden reemplazar; el estado importante vive en otro sitio.
  1. Haz un inventario del estado: anota qué información retiene cada componente (sesiones, caché, colas, documentos, registros de tareas, base de datos).
  2. Asigna un propietario a cada pieza: decide qué componente es la fuente de verdad y cuáles solo guardan copias o derivados.
  3. Mueve fuera de los servidores de aplicación lo que no puedan perder, de modo que cualquiera de ellos pueda sustituirse sin consecuencias.
  4. Plantea el fallo: para cada pieza de estado pregunta qué pasa si el servidor que la guarda cae, se reinicia o se despliega una versión nueva.
  5. Piensa en la concurrencia: identifica qué ocurre cuando dos peticiones tocan el mismo dato a la vez y qué garantiza que el resultado siga siendo correcto.
  6. Documenta el resultado y revísalo cada vez que añadas servidores o cambies cómo se despliega el software.

Qué significa realmente «sin estado»

El propio artículo aclara que «sin estado» no significa ausencia de estado. Lo que se busca es que cada servidor de aplicación sea fácil de reemplazar, trasladando la información importante a otro lugar. Eso no elimina el problema: lo concentra. Ahora el sitio donde vive el estado (una base de datos, un almacén de sesiones) tiene que mantenerlo correcto aunque las peticiones se solapen, se añadan máquinas o alguna falle.

Un ejemplo de cómo se reparte la responsabilidad: en lugar de guardar la sesión en la memoria de un servidor, se guarda en un almacén externo y el servidor solo lee y escribe contra él. Este esquema ilustra la idea; no procede del artículo original:

// El servidor no recuerda nada entre peticiones:
// toda la sesión se lee y se escribe en el almacén externo.
async function handle(req, store) {
  const session = await store.get(req.sessionId);
  session.visits = (session.visits || 0) + 1;
  await store.set(req.sessionId, session);
  return { visits: session.visits };
}

Fíjate en el límite de este patrón: dos peticiones simultáneas de la misma sesión pueden leer el mismo valor y pisarse al escribir. Resolverlo exige decidir una estrategia de concurrencia en el almacén, y ahí es donde el estado empieza a ser difícil de verdad.

Qué esperar al aplicarlo

Al repasar el inventario lo normal es descubrir estado escondido: cachés en memoria, ficheros temporales, contadores locales. Es un buen momento para cuestionar si cada uno es realmente necesario. El sector sigue buscando soluciones a este problema; un ejemplo reciente es la ronda de financiación de Restate, que apuesta por mantener en marcha a los agentes de IA cuando el software falla, algo que en el fondo es otra forma de proteger el estado frente a los fallos.

Truco Cuando dudes sobre dónde debe vivir un dato, hazte una sola pregunta: «si este servidor desaparece ahora mismo, ¿qué se pierde?». Si la respuesta es «algo que no puedo reconstruir», ese dato necesita un propietario más duradero que la memoria de un servidor de aplicación.

Para saber más: Privacy · Terms · Collection notice.

Fuente original: blog.bytebytego.com

Artículo generado mediante AI.larebelion

Comentarios

Publicar un comentario