2009-06-12 22 views
6

Eventuali duplicati
stateful webservicesStateful Webservice

Ho bisogno di un webservice stateful nella nostra organizzazione. Tuttavia, ovunque leggo online dice che la costruzione di un webservice statico è una cattiva programmazione, ma nulla dice mai perché. Immagino di non capire cosa ci sia di male. Inoltre, non capisco davvero perché darebbero un lavoro in giro per consentire di avere uno stato in un servizio web.

Quindi, suppongo che la mia domanda sia: perché programmare male utilizzare un servizio web statico e perché dovrebbe essere consentito?

+2

Guarderei a questo in un modo diverso - cosa deve fare questo servizio è stato? Si può fumare e rispecchiare creativamente? –

risposta

16

L'intero scopo di un servizio Web è fornire una parte di funzionalità in una transazione in un modo altamente scalabile. Ciò significa mantenere le cose semplici e atomiche.

Quando è necessario effettuare più chiamate per eseguire l'operazione, si ha un grande potenziale di sospensione delle transazioni. Il cliente sta tornando? Hanno finito? Per quanto tempo dovrebbe rimanere aperta la transazione? Si sono schiantati? Come devono essere gestiti i rollback?

Le risposte a queste domande potrebbero avere un impatto radicale sulle risorse necessarie per eseguire il servizio. Ecco perché tutti consigliano di fare tutto in un colpo solo.

+3

Ottima risposta! Inoltre, se l'operazione è stateful, cosa succede se il server fallisce? (E lo farà.Ecco perché eseguiamo cluster di server.) Tutto lo stato andrà perso. Stateless consente di inviare nuovamente la richiesta al prossimo server nel cluster come se nulla fosse accaduto. –

+1

Per niente vero. I servizi Web riguardano una tecnologia di integrazione comune a tutto il mercato tra le applicazioni remote. La maggior parte di loro sono apolidi perché la maggior parte delle operazioni di cui ci occupiamo sono apolidi ... La tua risposta può indurre in errore le persone nell'usare più servizi stateless quando in realtà un approccio statico è corretto anche considerando gli aspetti non funzionali ereditati da esso. – BonanzaOne

9

Ecco alcuni motivi che posso pensare:

  1. Il costo di mantenimento dello stato dovrà essere sostenuto solo lato server - i consumatori di servizi sono raramente browser web, in modo da non avere i cookie. Ciò riduce le prestazioni del server e aumenta la complessità del design.

  2. Un consumatore di servizi è un programma intelligente, piuttosto che un browser stupido. In quanto tale, il programma manterrà (quasi sempre) il proprio stato. In altre parole, quando fornisci un servizio, il tuo consumatore richiederà esattamente i dati che desidera. Il mantenimento dello stato sul server diventa obsoleto e non necessario.

  3. Transazioni: un servizio è un punto pericoloso nel sistema perché i suoi clienti sono per lo più intelligenti e decidono quando informarli dei cambiamenti nel loro stato. Ciò significa che se si mantiene lo stato, potrebbe essere necessario attendere tra le chiamate di servizio per completare un'operazione transazionale. E non c'è assolutamente alcuna garanzia che il cliente effettuerà la prossima chiamata di servizio.

Ci sono un sacco di ragioni, ma questi sono quelli che posso pensare fuori della parte superiore della mia testa :)

-1

penso che è una specie di mito

Se Google può rendere scalabile la loro applicazione web stateful, quindi perché non possiamo scalare un webservice statico. Riguarda l'app server che riduce la scalabilità.

Anche con un sito Web o un servizio web, l'obiettivo finale è quello di servire meglio. Se uno "stato" è quello di migliorare il tuo servizio, quindi non esitate ad andare con quello.

+2

Potresti voler chiarire su quale parte di google stai parlando. Il google.com principale non è "stato". – NotMe