El estado de una aplicación (o cualquier otra cosa, en realidad) es su condición o cualidad de ser en un momento dado en el tiempo – su estado de ser. Que algo sea stateful o stateless depende de cuánto tiempo se esté registrando el estado de la interacción con él y de cómo se necesite almacenar esa información.
Sin estado
Un proceso o aplicación sin estado puede entenderse de forma aislada. No hay conocimiento almacenado ni referencia a transacciones pasadas. Cada transacción se realiza como si partiera de cero por primera vez. Las aplicaciones sin estado proporcionan un servicio o función y utilizan servidores de red de entrega de contenidos (CDN), web o de impresión para procesar estas solicitudes a corto plazo.
Un ejemplo de transacción sin estado sería hacer una búsqueda en línea para responder a una pregunta que se te ha ocurrido. Escribes tu pregunta en un motor de búsqueda y le das a enter. Si tu transacción se interrumpe o se cierra accidentalmente, simplemente inicias una nueva. Piensa en las transacciones sin estado como en una máquina expendedora: una única petición y una respuesta.
Stateful
Las aplicaciones y procesos stateful, sin embargo, son aquellos a los que se puede volver una y otra vez, como la banca online o el correo electrónico. Se realizan con el contexto de las transacciones anteriores y la transacción actual puede verse afectada por lo que ocurrió durante las transacciones anteriores. Por estas razones, las apps con estado utilizan los mismos servidores cada vez que procesan una petición de un usuario.
Si se interrumpe una transacción con estado, el contexto y el historial se han almacenado para poder continuar más o menos donde se dejó. Las aplicaciones con estado registran cosas como la ubicación de la ventana, las preferencias de configuración y la actividad reciente. Puedes pensar en las transacciones stateful como una conversación periódica en curso con la misma persona.
La mayoría de las aplicaciones que utilizamos a diario son stateful, pero a medida que la tecnología avanza, los microservicios y los contenedores facilitan la construcción y el despliegue de aplicaciones en la nube.
Contenedores y estado
A medida que la computación en la nube y los microservicios crecen en popularidad, también lo ha hecho la contenerización de las aplicaciones, ya sean stateful o stateless. Los contenedores son unidades de código de una aplicación que se empaquetan, junto con sus librerías y dependencias, para que sean capaces de moverse fácilmente y puedan ejecutarse en cualquier entorno, ya sea en un escritorio, en una infraestructura de TI tradicional o en una nube.
Originalmente, los contenedores se construyeron sin estado, ya que esto se ajustaba a su naturaleza portátil y flexible. Pero a medida que el uso de los contenedores se ha ido extendiendo, la gente comenzó a contenerizar (rediseñar y reempaquetar con el fin de ejecutar desde contenedores) las aplicaciones con estado existentes. Esto les dio la flexibilidad y la velocidad del uso de contenedores, pero con el almacenamiento y el contexto del estado.
Debido a esto, las aplicaciones con estado pueden parecerse mucho a las sin estado y viceversa. Por ejemplo, puedes tener una app que no tenga estado, que no requiera almacenamiento a largo plazo, pero que permita al servidor rastrear las peticiones originadas por el mismo cliente mediante el uso de cookies.
Gestión de contenedores sin estado y con estado
Con el crecimiento de la popularidad de los contenedores, las empresas empezaron a proporcionar formas de gestionar tanto contenedores sin estado como con estado utilizando el almacenamiento de datos, Kubernetes y StatefulSets. El statefulness es ahora una parte importante del almacenamiento de contenedores y la pregunta se ha convertido no en si usar contenedores con estado, sino cuándo.
Si usar o no contenedores con estado o sin estado se reduce a una cuestión de qué tipo de aplicación estás construyendo y qué necesitas que haga. Stateless es el camino a seguir si sólo necesitas información de forma transitoria, rápida y temporal. Sin embargo, si su aplicación requiere más memoria de lo que sucede de una sesión a la siguiente, stateful podría ser el camino a seguir.
Stateful, stateless, and Red Hat
Cuando se trata de stateful o stateless, Red Hat lo tiene cubierto. Ya sea que esté orquestando contenedores con estado en nuestra plataforma Kubernetes lista para la empresa, Red Hat OpenShift, o creando un entorno unificado para el desarrollo de aplicaciones con Red Hat Integration, estará respaldado por nuestro galardonado soporte y el mayor ecosistema de socios de la industria.