Stateless vs Stateful - Me vendría bien información concreta


94

Estoy interesado en artículos que tengan información concreta sobre el diseño sin estado y con estado en la programación. Estoy interesado porque quiero aprender más sobre él, pero realmente no puedo encontrar ningún buen artículo al respecto. He leído docenas de artículos en la web que discuten vagamente el tema, o están hablando de servidores web y sesiones, que también son sobre estado versus sin estado, pero me interesa el diseño de atributos sin estado versus el diseño de atributos en la codificación. . Ejemplo: he escuchado que las clases BL no tienen estado por diseño, las clases de entidad (o al menos así es como las llamo, como Person (id, name, ..)) tienen estado, etc.

Creo que es importante saberlo, porque creo que si puedo entenderlo, puedo escribir un código mejor (por ejemplo, granularidad en mente).

De todos modos, muy breve, esto es lo que sé sobre stateful vs stateless:

Con estado (como WinForms): almacena los datos para su uso posterior, pero limita la escalabilidad de una aplicación, porque está limitada por límites de CPU o memoria

Sin estado (como ASP.NET, aunque ASP intenta tener estado con ViewStates): una vez que se completan las acciones, los datos se transfieren y la instancia se devuelve al grupo de subprocesos (Amorphous).

Como puede ver, es información bastante vaga y limitada (y bastante centrada en la interacción del servidor), por lo que estaría muy agradecido si pudiera proporcionarme algunos fragmentos de información más sabrosos :)

Respuestas:


58

Le sugiero que comience con una pregunta en StackOverflow que analiza las ventajas de la programación sin estado. Esto es más en el contexto de la programación funcional, pero lo que leerá también se aplica a otros paradigmas de programación.

La programación sin estado está relacionada con la noción matemática de una función, que cuando se llama con los mismos argumentos, siempre devuelve los mismos resultados. Este es un concepto clave del paradigma de programación funcional y espero que pueda encontrar muchos artículos relevantes en esa área.

Otra área que podría investigar para comprender mejor son los servicios web RESTful. Estos son por diseño "sin estado", en contraste con otras tecnologías web que tratan de mantener el estado de alguna manera. (De hecho, lo que dice que ASP.NET no tiene estado no es correcto: ASP.NET se esfuerza por mantener el estado usando ViewState y definitivamente debe caracterizarse como con estado. ASP.NET MVC, por otro lado, es una tecnología sin estado). Hay muchos lugares que discuten la "apatridia" de los servicios web RESTful (como este sitio de blog), pero podría comenzar nuevamente con una pregunta SO .


Muy bien, gracias por la información, ¡eché un vistazo al enlace y encontré información interesante! Aunque todavía estoy abierto para más;)
Team-JoKi

Agregué otra área en la que el estado y sin estado es un factor importante (servicios web RESTful).
kgiannakakis

Gracias por la info! Votaría su respuesta, pero todavía no tengo suficiente representante> _>
Team-JoKi

muchas aplicaciones web están llenas de estado porque la misma página de registro da resultados diferentes para los créditos del usuario ... La primera vez que se registra será un éxito ... La segunda vez con la misma entrada fallará ... porque la aplicación web tiene el estado del usuario en algún lugar almacenado ... . puede ser una base de datos o un almacenamiento diferente
siéntete bien y programando

85

Sin estado significa que no hay memoria del pasado. Cada transacción se realiza como si se hiciera por primera vez.

Con estado significa que hay memoria del pasado. Las transacciones anteriores se recuerdan y pueden afectar la transacción actual.

Apátrida:

// The state is derived by what is passed into the function

function int addOne(int number)
{
    return number + 1;
}

Con estado:

// The state is maintained by the function

private int _number = 0; //initially zero

function int addOne()
{
   _number++;
   return _number;
}

Consulte desde: /software/101337/whats-the-difference-between-stateful-and-stateless


73

Una aplicación con estado es aquella que almacena información sobre lo que sucedió o cambió desde que comenzó a ejecutarse. Cualquier información pública sobre en qué "modo" se encuentra, o cuántos registros se han procesado, o lo que sea, lo convierte en estado.

Las aplicaciones sin estado no exponen ninguna de esa información. Dan la misma respuesta a la misma solicitud, función o llamada de método, siempre. HTTP no tiene estado en su forma sin formato: si realiza un GET a una URL en particular, obtiene (teóricamente) la misma respuesta cada vez. La excepción, por supuesto, es cuando comenzamos a agregar estado en la parte superior, por ejemplo, con las aplicaciones web ASP.NET :) Pero si piensa en un sitio web estático con solo archivos e imágenes HTML, sabrá a qué me refiero.


18

El adjetivo Stateful o Stateless se refiere solo al estado de la conversación, no está en conexión con el concepto de función que proporciona la misma salida para la misma entrada. Si es así, cualquier aplicación web dinámica (con una base de datos detrás) sería un servicio con estado, lo que obviamente es falso. Con esto en mente, si confío la tarea de mantener el estado conversacional en la tecnología subyacente (como una sesión de coockie o http), estoy implementando un servicio con estado, pero si toda la información necesaria (el contexto) se pasa como parámetros I ' Estoy implementando un servicio sin estado. Cabe señalar que incluso si el parámetro pasado es un "identificador" del estado conversacional (por ejemplo, un ticket o un sessionId), todavía estamos operando bajo un servicio sin estado,


No estoy seguro de si pasar un session identifieren cada solicitud puede considerarse apátrida. En mi punto de vista, tal caso se consideraría estatal. Sin embargo, si siempre pasa un tokenpara el usuario pero no tiene ningún otro estado que no sea apátrida. Pero se siente con estado XD. Esto es tan confuso.
7hi4g0

4

El dinero transferido en línea de una cuenta a otra cuenta con estado, porque la cuenta que recibe tiene información sobre el remitente. Al entregar efectivo de una persona a otra, esta transacción no tiene estatuto, porque después de que se recibe el efectivo, la identidad del donante no está allí con el efectivo.


1

Solo para agregar las contribuciones de otros ... Otra forma es mirarlo desde un servidor web y el punto de vista de la concurrencia ...

HTTP es de naturaleza sin estado por una razón ... En el caso de un servidor web, tener estado significa que tendría que recordar el 'estado' de un usuario para su última conexión, y / o mantener una conexión abierta con un solicitante. Eso sería muy caro y 'estresante' en una aplicación con miles de conexiones simultáneas ...

Ser apátrida en este caso tiene un uso eficiente de los recursos ... es decir, admite una conexión en una sola instancia de solicitud y respuesta ... Sin gastos generales de mantener las conexiones abiertas y / o recordar algo de la última solicitud ...


-3

Hacemos Webapps con estado anulando el comportamiento sin estado HTTP mediante el uso de objetos de sesión. Cuando usamos objetos de sesión, el estado se lleva pero todavía usamos HTTP solo.


-3

Tenía la misma duda sobre el diseño de clases stateful versus stateless e investigué un poco. Recién completado y mis hallazgos se han publicado en mi blog.

  • Las clases de entidad deben tener estado
  • Las clases de ayudante / trabajador no deben tener estado.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.