2009-03-09 9 views
11

Riesco a vedere che i protocolli stateful portano a uno "stato emulato" meno mal riuscito, come i cookie.I protocolli stateless sono considerati meglio da utilizzare su protocolli stateful?

ma il test diventa molto più difficile per garantire che l'implementazione sia corretta e ricolleghi e le sessioni di continuità possono essere molto difficili da gestire.

È considerata una pratica migliore utilizzare sempre i protocolli stateless oppure è veramente specifico del dominio?

Penso che l'autenticazione diventi più semplice quando si gestiscono protocolli di stato, ma ci sono altri motivi per utilizzare un protocollo di stato?

risposta

8

Quanto è importante lo stato dell'applicazione? Avete bisogno di un flusso costante di dati tra macchine diverse o è più utile avere burst? Se stai scrivendo un'applicazione di tipo Telefonia IP, probabilmente vorrai qualcosa di abbastanza statistico, se riesci a farla franca con gli apolidi è probabile che sia meno costoso e più facile farlo in quel modo. Fare le cose in modo statico è necessariamente più fragile perché se una delle estremità della connessione viene interrotta o la connessione stessa si interrompe, si corre un rischio maggiore di perdita di dati, mentre con una connessione stateless è più probabile dover aspettare un po 'e provare ancora.

Sono davvero diversi strumenti per diversi lavori, ma data la facilità e l'ubiquità delle tecnologie stateless online è logico guardare in quella direzione quando si ha l'opzione.

2

Un'altra cosa interessante con i protocolli stateless è che è più semplice gestire situazioni di failover del server e/o situazioni di clustering/bilanciamento del carico.

3

Un protocollo stateless è più facile da cluster poiché lo stato non deve mai essere trasferito da un server a un altro su richieste successive.

13

Vantaggi di stateless:

  1. alta scalabilità(è possibile inviare richiesta a qualsiasi nodo, è possibile aggiungere i nodi in qualsiasi momento)
  2. Alta disponibilità(se un nodo fallisce, non c'è stato che viene perso, basta inviare nuovamente la richiesta a un altro nodo)
  3. Alta velocità(poiché non esiste uno stato, i risultati sono memorizzabili nella cache)
+0

ottimo punto sul caching. –

+1

sì, molti ppl lo considerano il punto di dolcezza di REST – vartec

9

Lo considererei specifico del dominio. Se stai scrivendo l'equivalente morale del ping, un protocollo senza stato è la scelta giusta. D'altra parte, se stai scrivendo un VNC, stateful è sicuramente la strada da percorrere.

Per quanto riguarda quando scegliere quale, ci sono due punti da tenere a mente. Innanzitutto, mentre le scelte di implementazione sono o/o, lo spazio del problema è un continuum. Tutti i compiti del mondo reale hanno almeno un piccolo stato, la domanda è quanto ed è il sovraccarico di passarlo vale la pena di rintracciarlo alle due estremità. E in secondo luogo, si tratta generalmente di uno stack di protocollo, non di un singolo protocollo; fare in modo che tutto vada al livello giusto può semplificare enormemente le cose.

1

Stateful è migliore. Quindi non devi inviare lo stato tutto il tempo. Il protocollo diventa quindi più semplice.

+2

È improbabile che il Web sarebbe stato in grado di scalare se HTTP fosse stato di stato. –

+0

@Sara: questo punto è valido solo se lo stato è pesante. – Brann

+1

Difficile dire. Potremmo avere applicazioni molto migliori, se lo stato fosse risolto in un modo divino. Al momento tutti i framworks cercano di nascondere il passaggio dello stato. Non so se qualcuno ci è riuscito. Ma ci sono voluti almeno 10 anni. :) – Flinkman

3

Non conosco personalmente tutti i problemi di progettazione di stateful contro stateless, ma so che NFSv4 è statico dopo 15 anni di versioni precedenti di NFS che sono senza stato, quindi apparentemente l'apolidia è diventata una limitazione significativa per i progettisti NFS.

Alcuni minuti su Google rivelano diversi articoli e blog che parlano dello stato di NFSv4; questa dovrebbe essere una lettura interessante per alcuni dei problemi di progettazione coinvolti.

Problemi correlati