Omar Alvarez
Alexis Dorado Muñoz
Gracias por el aporte y la dedicación
¿Qué son stateless y stateful en el contexto de la infraestructura informática?
Cuando se habla de infraestructura informática, especialmente en contextos de alta concurrencia, es crucial comprender las diferencias entre stateless y stateful. Estos conceptos determinan cómo las aplicaciones manejan el estado, lo cual influye directamente en la capacidad de escalar o replicar sistemas. Entonces, ¿qué significa realmente cada uno de estos términos y cuándo es mejor optar por uno sobre el otro?
¿Qué es stateless?
Stateless, o sin estado, significa que el estado de la aplicación se encuentra externamente, fuera del servidor que procesa los datos. En un sistema stateless, cada solicitud al servidor es independiente y se puede manejar sin necesidad de conocimiento previo de solicitudes anteriores. Por ejemplo, imagine un servicio de procesamiento de datos: recibe un dato, lo procesa y devuelve un resultado. Aquí, el servidor puede ser reemplazado o replicado con facilidad sin afectación al procesamiento, ya que no retiene información de solicitudes anteriores.
Ventajas del enfoque stateless
¿Qué es stateful?
Stateful, o con estado, indica que el servidor retiene el estado entre solicitudes. Un ejemplo típico sería una base de datos, donde el servidor necesita conservar el historial de transacciones o interacciones previas para funcionar correctamente. Este enfoque es necesario cuando las aplicaciones requieren mantener un seguimiento continuo de las sesiones de usuario o datos temporales que influyen en la ejecución futura.
Desafíos del enfoque stateful
¿Por qué preferir servicios stateless?
En la mayoría de los casos, los servicios se benefician más siendo stateless. Un ejemplo ilustrativo es un servidor de WordPress. Un enfoque stateful requeriría que cada instancia del servidor retuviera imágenes y datos localmente, complicando el proceso de escalar o reemplazar servidores. Sin embargo, al implementar un servidor stateless, almacenando imágenes en un servicio externo como Amazon S3, es posible aumentar la cantidad de servidores sin replicar archivos localmente.
Con stateless:
El manejo eficiente y eficaz de servidores stateless es por lo tanto más sencillo para equipos de infraestructura al permitir una escalabilidad y resiliencia superiores. Con esta comprensión, estarás mejor preparado para tomar decisiones informadas sobre la infraestructura de tu sistema.
Omar Alvarez
Alexis Dorado Muñoz
Gracias por el aporte y la dedicación
Sebastián Ospino
Stateless y statefull en alta concurrencia
What is a stateless server ? - GeeksforGeeks
.
Alexis Dorado Muñoz
Genial, me sirve mucho tu aporte.
Eduardo Jiménez
¿No se estaría convirtiendo el sistema de almacenamiento en un cuello de botella?
Gonzalo Amador Hernández
mis estrategias serian las siguientes:
A. El cuello de botella puede estar en las instancias:
Bucket e intsnacias en la misma region, para reducir la latencia
Ancho de banda de mis isntancias, puede que las instancias que escojiste no tengan el ancho de banda correcto
Escalar el bucket:
el bucket A alamacenara imagnes cullo nombre empiece con A a la K, el bucket B alamacenara imagnes cullo nombre empiece con L a la Z
o que el bucket A atienda a los usuarios que sean del Id 1 a el 1000 y el B ateidnda a usuarios del 1001 al 10000
puedes tener mas de un boquet y repartir el flujo en ellos, escoje sabiamente como quieres secmentar
Gonzalo Amador Hernández
Tambien otra opcion es distribuir tu contenido con un CDN puedes usar CloudFront en AWS y apuntar tu S3 como origne
Stateless significa que el estado, como su nombre lo indica, está fuera de la aplicación; y stateful, lo contrario.
Pongamos como ejemplo un servicio de procesamiento de datos: este servicio recibe un dato, lo procesa, y cuando termina lo entrega a un recurso externo o lo devuelve. Hubo un momento en el flujo en donde el dato estuvo en el servidor, pero sencillamente podríamos reemplazar ese servidor por uno nuevo y debería ser capaz de manejar cualquier petición que reciba sin necesidad de tener un historial de los servidores antiguos.
Podemos crear un servidor stateless sin necesidad de tener el servidor viejo; un servidor stateful necesita sí o sí el historial del servidor anterior (por ejemplo, una base de datos).
Como SREs, queremos que las aplicaciones siempre sean stateless.
Un ejemplo claro para un servidor stateful, sería un servidor de Wordpress que almacena tanto la base de datos como los archivos multimedia dentro de su disco duro. En caso de que se quisiera reemplazar ese servidor, tendríamos que copiar toda su información para llevarla al servidor nuevo; y si quisiéramos escalarlo horizontalmente, necesitaríamos que toda esa información esté en todos los servidores.
Para el equipo de infraestructura siempre va a ser más fácil manejar servidores stateless, porque así pueden escalar muy fácilmente.
Juan Manuel Hincapié
Stateless
El estado está fuera de la aplicación Lo puedo crear sin necesidad de tener un servidor viejo, que funcione sin necesidad de historial de información Suele ser el que más queremos usar
Statefull
El estado está dentro de la aplicación Puede complicarse un poco por alguna de las siguientes razones:
Pablo Aquino
Stateless(fuera de la aplicación) no necesito historial del servidor para crear un replica y Statefull, necesito el historial como bd.
Alexis Dorado Muñoz
Imagina que tienes una máquina expendedora de bebidas (stateless). Cada vez que alguien introduce una moneda y presiona un botón, la máquina entrega la bebida sin necesidad de "recordar" las transacciones previas. No importa quién use la máquina o en qué orden, siempre funciona de la misma manera.
Ahora piensa en un cajero automático (stateful). Para funcionar correctamente, necesita "recordar" información como el saldo de tu cuenta, tu historial de transacciones, etc. Este "estado" es esencial para su funcionamiento.
En el contexto de aplicaciones web, "stateless" significa que cada solicitud se procesa de forma independiente, sin depender de información almacenada en el servidor. Esto facilita el escalado horizontal, ya que podemos agregar o eliminar servidores sin preocuparnos por la consistencia del estado.
Por otro lado, las aplicaciones "stateful" mantienen información sobre las interacciones del usuario o el estado del sistema. Esto puede ser útil en algunos casos, pero complica el escalado y la gestión de la concurrencia.
Siempre que sea posible, es recomendable diseñar aplicaciones "stateless" para lograr una mayor escalabilidad y flexibilidad. Sin embargo, hay situaciones donde el estado es inevitable, como en el caso de bases de datos o aplicaciones que requieren mantener sesiones de usuario.
Jefred Bedoya
Arquitectura de Servidores: Stateless vs. Stateful
Andres Felipe Correa Villa
Lo primero que me cuestiono era si efectivamente son servidores stateless y stateful y lo que encontré es que son mas conceptos arquitectonicos que se aplican a servicios, componentes, flujos. Para mi es lo que define el comportamiento y la creación de un servicio. Estoy profundizando mis conocimientos de arquitectura, mil gracias.
Daniel Eduardo Rojas Pulido
Stateless: Fuera de la aplicación. Es mejor para el equipo de infraestructura y usar servicios de almacenamiento externos para almacenamiento de imágenes, archivos de vídeo y así escalar es más fácil.
Statefull: Guarda el historial, por ejemplo, una base de datos. Más difícil de escalar porque se debe copiar todo.
Daniel Eduardo Rojas Pulido
Estoy aprendiendo muchas cosas nuevas con este curso
Javier Perez
Si la session de usuario se guarda en el mismo "equipo" (puede ser un docker por ejemplo)... esta aplicación se considera statefull? la duda viene porque cuando uno escala horizontalmente se puede presentar el problema de "perder" la sesión cuando la siguiente petición cae en el nuevo servicio, y este no encuentra la sesión de usuario. Entiendo que para resolver esto puedo usar sticky sessions para conservar las peticiones en el mismo servicio, pero la pregunta acá es si en este ejemplo la aplicación se considera stateful o stateless
Pablo Fredrikson
ProfesorEso seria stateful, la sesión deberia guardarse en algun lugar centralizado. Por ejemplo un server de Redis
Esteban Jiménez ruiz
"Stateless" and "stateful" are terms commonly used in the context of computing and networking to describe systems or protocols based on how they manage information.
1. **Stateless:**
- In a stateless system, each request from a client to a server is independent and contains all the information needed to understand and fulfill that request.
- The server does not retain any information about the state of the client between requests.
- Stateless systems are often simpler and more scalable because each request is self-contained, and servers can treat each one in isolation without needing to remember past interactions.
- Stateless protocols do not rely on the maintenance of session state.
**Example:** HTTP (Hypertext Transfer Protocol) is a stateless protocol commonly used for communication on the World Wide Web. Each HTTP request from a client to a server is independent, and the server does not retain information about previous requests.
2. **Stateful:**
- In a stateful system, the server keeps track of the state or context of each client and the interactions between the client and the server over time.
- The server stores information about the client's session, allowing it to remember past interactions and provide a more personalized and continuous experience.
- Stateful systems often require more resources and complexity, as they need to manage and synchronize the state information across multiple components.
**Example:** TCP (Transmission Control Protocol) is a stateful protocol used for reliable and connection-oriented communication. It establishes a connection and maintains a session state between the communicating parties.
In summary, the distinction between stateless and stateful lies in whether the system or protocol retains information about the state of past interactions. Stateless systems are more independent and scalable, while stateful systems provide continuity and context across multiple interactions. The choice between stateless and stateful depends on the requirements of the specific application or protocol and the trade-offs between simplicity and continuity.
MARIA TERESA PANIAGUA RIVERA
Gracias
Salvatore Josue Trimarchi Pinto
Que excelente este curso
DAVID EDUARDO BAEZ SANCHEZ
Entendido y a ponerlo en práctica
Gonzalo Osco Hernandez
Me encanta como explica estos dos conceptos que suelen ser complejos, parafraseando dijo:
Stateless significa que el estado esta fuera de la aplicación (ej. servicio de procesamiento de datos) donde un servidor deberia poder manejar cualquier request sin tener el historial de los request anteriores y Statefull lo contrario (ej. base de datos).