2009-06-12 15 views
6

posible duplicado
stateful webservicescon estado de servicio web

Tengo una necesidad de un servicio web de estado en nuestra organización. Sin embargo, en todas partes que leo en línea dice que construir un servicio web con estado es una mala programación, pero nada dice por qué. Supongo que no entiendo qué tiene de malo eso. Tampoco entiendo por qué darían una vuelta de tuerca para permitirte tener un estado en un servicio web.

Así que supongo que mi pregunta es, ¿por qué es mala programación usar un servicio web con estado y por qué estaría permitido?

+2

Me gustaría ver esto de una manera diferente: ¿qué necesita hacer este servicio que sea con estado? ¿Puede eso ser creativamente humo y espejo? –

Respuesta

16

El propósito de un servicio web es entregar una funcionalidad en una transacción de una manera altamente escalable. Esto significa mantener las cosas simples y atómicas.

Cuando tiene que realizar varias llamadas para realizar la operación, tiene un gran potencial para dejar las transacciones pendientes. ¿Vuelve el cliente? ¿Han terminado? ¿Cuánto tiempo debería permanecer abierta la transacción? ¿Chocaron? ¿Cómo deben manejarse las reversiones?

Las respuestas a estas preguntas podrían tener un impacto radical en los recursos necesarios para ejecutar su servicio. Por eso, todos recomiendan hacerlo todo de una sola vez.

+3

¡Excelente respuesta! Además, si su operación es con estado, ¿qué sucede si el servidor falla? (Y lo hará.Es por eso que ejecutamos clusters de servidores.) Todo el estado se perderá. Stateless le permite volver a enviar la solicitud al siguiente servidor del clúster como si nada hubiera sucedido. –

+1

Nada cierto. Los servicios web son una tecnología de integración común en todo el mercado entre aplicaciones remotas. La mayoría de ellos son apátridas porque la mayoría de las operaciones que manejamos son apátridas ... Su respuesta puede inducir a error a las personas al utilizar múltiples servicios apátridas cuando en realidad un enfoque con estado es el correcto incluso considerando los aspectos no funcionales heredados de él. – BonanzaOne

9

Estas son algunas de las razones que se me ocurren:

  1. El coste de mantener el estado tendrá que ser soportado únicamente del lado del servidor - los consumidores de servicios rara vez son los navegadores web, por lo que no tiene las cookies. Esto reduce el rendimiento del servidor y aumenta la complejidad del diseño.

  2. Un consumidor de servicios es un programa inteligente, en lugar de un navegador tonto. Como tal, el programa mantendrá (casi siempre) su propio estado. En otras palabras, cuando proporciona un servicio, su consumidor solicitará precisamente los datos que desea. Mantener el estado en el servidor se vuelve obsoleto e innecesario.

  3. Transacciones: un servicio es un punto pendiente en su sistema porque sus clientes son principalmente inteligentes y deciden cuándo informarle sobre cambios en su estado. Esto significa que si mantiene el estado, es posible que deba esperar entre las llamadas de servicio para finalizar una operación transaccional. Y no hay absolutamente ninguna garantía de que el cliente realice esa próxima llamada de servicio.

Hay un montón de razones, pero estos son los que puedo pensar en la parte superior de mi cabeza :)

-1

creo que es una especie de mito

Si Google puede hacer escalable su aplicación web con estado, entonces ¿por qué no podemos escalar un servicio web con estado? Se trata de un servidor de aplicaciones que reduce la escalabilidad.

Incluso con un sitio web o servicio web, el objetivo final es servir mejor. Si un "estado" es mejorar su servicio, entonces no dude en seguir con eso.

+2

Es posible que desee aclarar sobre qué parte de google está hablando. El principal google.com no es "con estado". – NotMe