2009-06-12 16 views
6

possible en double
stateful webservicesStateful Webservice

J'ai besoin d'un webservice stateful dans notre organisation. Cependant, partout où je lis en ligne dit que la construction d'un webservice stateful est une mauvaise programmation, mais rien ne dit jamais pourquoi. Je suppose que je ne comprends pas ce qui est si mauvais à ce sujet. Je ne comprends pas vraiment pourquoi ils donneraient un travail pour vous permettre d'avoir l'état dans un webservice.

Donc, je suppose que ma question est, pourquoi est-ce une mauvaise programmation d'utiliser un webservice stateful et pourquoi serait-il permis?

+2

Je regarderais ceci d'une manière différente - qu'est-ce que ce service a besoin de faire qui est stateful? Est-ce que cela peut être créatif et miroitant? –

Répondre

16

L'objectif global d'un service Web est de fournir une fonctionnalité en une seule transaction hautement évolutive. Cela signifie garder les choses simples et atomiques.

Lorsque vous devez effectuer plusieurs appels pour effectuer l'opération, vous avez un grand potentiel de suspension des transactions. Est-ce que le client revient? Sont-ils faits? Combien de temps la transaction doit-elle rester ouverte? Ont-ils crashé? Comment les rollbacks devraient-ils être traités?

Les réponses à ces questions pourraient avoir un impact déterminant sur les ressources nécessaires pour exécuter votre service. C'est pourquoi tout le monde recommande de tout faire d'un seul coup.

+3

Excellente réponse! En outre, si votre opération est à état, que se passe-t-il si le serveur tombe en panne? (Et ça va.C'est pourquoi nous gérons des groupes de serveurs.) Tout l'état sera perdu. Stateless vous permet de renvoyer la requête au serveur suivant dans le cluster comme si rien ne s'était passé. –

+1

Pas du tout vrai. Les services Web concernent une technologie d'intégration commune à l'ensemble du marché entre des applications distantes. La plupart d'entre eux sont apatrides parce que la plupart des opérations que nous traitons sont apatrides ... Votre réponse peut induire les gens en erreur en utilisant plusieurs services sans état alors qu'une approche dynamique est correcte même si elle considère les aspects non fonctionnels hérités. – BonanzaOne

9

Voici quelques raisons que je peux penser:

  1. Le coût du maintien Etat devra être supporté côté serveur uniquement - les consommateurs de services sont rarement des navigateurs web, ont donc pas de cookies. Cela réduit les performances de votre serveur et augmente la complexité de votre conception. Un consommateur de service est un programme intelligent plutôt qu'un navigateur bête. En tant que tel, le programme maintiendra (presque toujours) son propre état. En d'autres termes, lorsque vous fournissez un service, votre consommateur demandera précisément les données qu'il souhaite. Maintenir l'état sur le serveur devient obsolète et inutile. Transactions - un service est un point tournant dans votre système car ses clients sont pour la plupart intelligents, et ils décident quand ils doivent vous informer des changements de leur état. Cela signifie que si vous maintenez l'état, vous devrez peut-être attendre entre les appels de service pour terminer une opération transactionnelle. Et il n'y a absolument aucune garantie que le client fera le prochain appel de service.

Il y a beaucoup de raisons, mais ce sont ceux que je peux penser à du haut de ma tête :)

-1

Je pense qu'il est une sorte de mythe

Si Google peut rendre leur application Web dynamique adaptable, alors pourquoi ne pouvons-nous pas mettre à l'échelle un webservice dynamique. Il s'agit du serveur d'applications qui réduit l'évolutivité.

Même avec un site Web ou un service Web, le but ultime est de mieux servir. Si un «stateful» est d'améliorer votre service, alors n'hésitez pas à aller avec ça.

+2

Vous pouvez préciser sur quelle partie de Google vous parlez. Le principal google.com n'est pas "stateful". – NotMe