Applicazioni stateful vs stateless (non web app)

5

Vorrei capire la differenza tra le applicazioni stateful e quelle senza stato.

  • Quale sarebbe un esempio di app non web di un'applicazione pitone che è stateless vs stateful?
  • Sarebbe uno script che graffia il web e salva i risultati sul disco considerato stato e uno che salva i risultati in un database apolidi?
  • E riguardo le dipendenze? È uno script che ha bisogno di altro python le librerie installate (dipendenze) sono considerate stateful?

La maggior parte di ciò che ho cercato (incluso questo sito) riguardava app e sessioni web, spero di ottenere una comprensione più ampia di questo concetto.

    
posta rippling 15.09.2016 - 17:18
fonte

3 risposte

9

Tecnicamente, i computer hanno sempre lo stato, anche se si tratta solo dello stato del programma.

Quindi, per determinare stateful / stateless come di solito parliamo, devi avere qualche nozione di interazione, richiesta, o anche una sessione di utilizzo, e l'idea è che il comportamento di una seconda interazione, richiesta, o la sessione non dipende in alcun modo da un'interazione, richiesta o sessione precedenti; quindi è senza stato.

What would be a non web app example of a python application which is stateless vs stateful?

Definiamo che un'interazione con una calcolatrice stia aprendo l'app, calcolando e chiudendo l'app. E se una tale app non ricorda nulla da un'interazione all'altra, allora è senza stato.

Un esempio più semplice sarebbe un calcolatore REPL che non ha memoria. Ogni riga di comando che inserisci produce un risultato, ma non ricorda nulla da un comando all'altro. Pertanto, ogni comando è indipendente e possiamo considerare una serie di comandi come apolidi.

Would a script which scrapes the web and saves the results to disk be considered stateful and one which saves the results to a database stateless?

Direi che devi osservare il comportamento dello script come un programma come segue: lo script fa qualcosa di diverso ogni volta che viene eseguito, in base all'ultima esecuzione? Se è così, è stato, se non è apolide. In altre parole, se lo script guarda la sua ultima esecuzione e decide da dove iniziare in base a quello, allora è stato eseguito da run to run. Se, tuttavia, inizia da zero e si alimenta ogni volta con un set fisso di URL, allora è stateless di run to run.

What about dependencies? Is a script which needs other python libraries installed (dependencies) be considered stateful?

La dipendenza da altre parti di codice può rendere statico un programma senza stato. Tuttavia, le librerie sono spesso scritte come una raccolta di funzioni che ti restituiscono il loro stato da conservare negli oggetti, in modo da avere un certo controllo sul modo in cui si comportano lanciando o trattenendo tali oggetti.

    
risposta data 15.09.2016 - 17:28
fonte
2

Would a script which scrapes the web and saves the results to disk be considered stateful and one which saves the results to a database stateless?

Per comprendere la metafora "apolide", devi comprendere il concetto di "operazioni atomiche indipendenti". In un sistema senza stato, ogni interazione dell'utente è una sorta di operazione completa. I sistemi stateless non contengono informazioni temporanee da una pagina all'altra. Piuttosto, ogni operazione è completamente eseguita o non eseguita affatto. Non si tratta del mezzo in cui memorizzi le informazioni. Il vero fattore decisivo è "ogni operazione può essere eseguita indipendentemente?"

Le pagine Web sono un buon esempio di sistemi stateless, perché la prima pagina può essere eseguita in un dominio applicativo completamente diverso dal secondo, o anche da una macchina diversa in esecuzione in un paese diverso. Anche se non si tratta nemmeno di posizione, il fatto che qualsiasi pagina possa essere eseguita in qualsiasi posizione è un buon indicatore del fatto che le pagine possono funzionare da sole senza dipendere da dati temporanei da altre pagine.

    
risposta data 15.09.2016 - 17:33
fonte
0

Solo per aggiungere altri esempi alle risposte di cui sopra. L'autenticazione basata su token è considerata stateless anche.

Poiché il client invia sempre il token su ogni richiesta, il server non ha effettivamente bisogno di salvare lo stato o creare una sessione.

Inoltre, il token è autonomo, tutte le informazioni necessarie sono lì per convalidarlo, ad esempio, un token che viene rilasciato a una determinata fonte, può tornare da un'altra fonte. Ad esempio, un'applicazione mobile può ottenere un token mentre è connessa a una rete Wi-Fi e quindi continuare a inviare la richiesta utilizzando un'altra connessione (su una rete 4G) rendendo il sistema di autenticazione portatile, che alla fine è considerato senza stato.

    
risposta data 19.09.2016 - 17:51
fonte

Leggi altre domande sui tag