Stateful vs Stateless Design - ¿Cuál es la diferencia?

Hoy hablaremos de dos conceptos que suelen confundirse un poco pero que son indispensables hoy en día para el desarrollo de software: Stateful (con estado) y Stateless (sin estado).

    Cuando hablamos de Stateful y Statelees nos referimos a conceptos arquitectónicos o principios de diseño que describen como un software o sistema administra las interacciones entre sus componentes. Básicamente su diferencia es en como se maneja el estado dentro de un sistema o aplicación. Se considera muy importante en el diseño de software porque afecta directamente la calidad del software, particularmente entre los requisitos no-funcionales como el rendimiento, escalabilidad y facilidad de un software.

    La diferencia entre Stateful (con estado) y Stateless (sin estado) radica en cómo se maneja el estado dentro de un sistema o aplicación. Este concepto es fundamental en el diseño de software y tiene implicaciones significativas en términos de rendimiento, escalabilidad y simplicidad.

Stateful

Cuando nos referimos a un diseño Stateful, el sistema mantiene un registro del estado entre interacciones o solicitudes. Esto quiere decir que el servidor o la aplicación almacena información sobre las interacciones pasadas y las utiliza para procesar solicitudes futuras. Esto se refiere a que el estado puede mantenerse en la memoria del servidor o en una base de datos, por ejemplo: las sesiones de usuario, pero se va complicando cuando cada interacción puede depender del estado previo, con lo cual se vuelve más complicado de diseñar porque es necesario administrar la coherencia y sincronización del estado. En un proyecto relativamente complejo o grande, esto se vuelve un problema porque conforme el número de usuarios administrar los estados individuales puede sobrecargar el sistema.

En que casos encontramos un diseño Stateful

Cuando el servidor hace un seguimiento del estado de cada sesión de usuario y conserva la información sobre sus interacciones y solicitudes anteriores. Es posible acceder a ellas de manera recurrente, como en el caso de los servicios bancarios en línea o el correo electrónico. Las aplicaciones con estado utilizan siempre los mismos servidores para procesar las solicitudes de los usuarios. Otro caso es una aplicación de comercio electrónico que recuerda el contenido del carrito de compras del usuario mientras navega por diferentes páginas.

Stateless

Cuando nos referimos a un diseño Stateless, significa que el sistema no mantiene información del estado entre interacciones o solicitudes. Cada solicitud es independiente y no tiene conocimiento de interacciones previas. Esto quiere decir que cada solicitud contiene toda la información necesaria para ser procesada. Esto lo hace más fácil de implementar y mantener, gracias a que no requiere almacenamiento de estado. En lo que se refiere a los atributos de calidad, facilita la escalabilidad porque los servidores no necesitan almacenar información adicional, lo que facilita la distribución de la carga. Además, como no dependen de un estado, si un servidor falla, otro puede manejar la solicitud sin problemas, es decir, la tolerancia a fallos es alta.

En que casos encontramos un diseño Stateless

Cuando hacemos una búsqueda en Google, escribes lo que buscas y al presionar el botón obtienes la respuesta. También, un ejemplo lo encontramos en un servicio web basado en REST, donde cada solicitud HTTP incluye toda la información (como tokens de autenticación) necesaria para ser procesada. El concepto Stateless en la arquitectura REST es uno de los principios fundamentales de este estilo arquitectónico y se refiere a que cada solicitud HTTP a un servidor debe contener toda la información necesaria para que el servidor comprenda y procese la solicitud. Básicamente, cuando hablamos de un diseño sin estado es que cada solicitud que recibe el servidor es independiente y no está relacionada con solicitudes anteriores.

    Cuando nos referimos a estos conceptos en el diseño de aplicaciones móviles significa que un StatefulWidgets puede ser un botón, un radio que realice una acción, mientras que StatelessWidgets puede ser un texto o icono que solo muestre información o una imagen respectivamente. Es decir, los widgets cuyo estado se puede modificar una vez creados se denominan widgets con estado. Estos estados son mutables y se pueden cambiar varias veces durante su vida útil. Esto simplemente significa que el estado de una aplicación puede cambiar varias veces con diferentes conjuntos de variables, entradas y datos [1].



¿Cuándo usar diseño con estado y diseño sin estado?

Todo depende del tipo de aplicación y las necesidades específicas del contexto. A continuación se detalla cuando utilizar cada uno de estos diseños [2]:
  • Stateful: Cuando se requiere persistir información entre interacciones, como sesiones de usuario o flujos de trabajo complejos.
  • Stateless: Cuando se necesita simplicidad, escalabilidad y tolerancia a fallos, como en aplicaciones modernas basadas en microservicios o servicios RESTful.

Es cuánto.

Si quieres citar este artículo en tu texto, documento, etc. puedes hacerlo de la siguiente forma:

Aguilar-Calderón, J. A. (20 de noviembre de 2024). Stateful vs Stateless Design - ¿Cuál es la diferencia?. ANOVA LAB MX. https://anovalabmx.blogspot.com/2024/11/stateful-vs-stateless-design-cual-es-la.html


Referencias
  1. https://www-geeksforgeeks-org.translate.goog/flutter-stateful-vs-stateless-widgets/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=rq#:~:text=Flutter%20Stateful%20Widgets,of%20variables%2C%20inputs%2C%20data.
  2. https://www.freecodecamp.org/news/stateful-vs-stateless-architectures-explained/

Comentarios

Mi foto
José Alfonso Aguilar
Mazatlán, Sinaloa, Mexico
Me gusta aprender y escribir sobre tecnología y desarrollo. Soy Ingeniero en Sistemas Computacionales, trabajo como Profesor-Investigador en la Facultad de Informática Mazatlán, de la Universidad Autónoma de Sinaloa. México. Me gusta combinar la docencia-investigación con el giro profesional del desarrollo de software y gestión de proyectos de innovación.

Entradas más populares de este blog

Historia y versiones de HTML (HyperText Markup Language)

Todo lo que debes saber sobre el Model-View Controller (MVC) para Aplicaciones Web

Conceptos Básicos de la Arquitectura REST (REpresentational State Transfer)