2012-05-08 14 views
135

Desidero conoscere la differenza tra le sessioni appiccicose e non appiccicose. Cosa ho capito dopo aver letto da internet:Sessioni appiccicose e NON appiccicose

Appiccicoso: sarà presente solo l'oggetto a sessione singola.

non appiccicosa sessione: oggetto sessione per ciascun nodo server

risposta

411

Quando il vostro sito è servito da solo 1 web server, per ogni coppia, un oggetto sessione viene creato e rimane nella memoria del server web. Tutte le richieste dal client si rivolgono a questo server Web e aggiornano questo oggetto di sessione. Se alcuni dati devono essere memorizzati nell'oggetto di sessione nel periodo di interazione, vengono memorizzati in questo oggetto di sessione e rimangono lì finché esiste la sessione.

Tuttavia, se il sito Web è servito da multiple web servers che si trova dietro a load balancer, il servizio di bilanciamento del carico decide a quale server Web (fisico) effettivo deve essere assegnato ogni richiesta. Ad esempio, se ci sono 3 server Web A, B e C dietro il servizio di bilanciamento del carico, è possibile che www.mywebsite.com/index.jsp sia servito dal server A, www.mywebsite.com/login.jsp è servito dal server B e www.mywebsite.com/accoutdetails.php sono serviti dal server C.

Ora, se le richieste vengono servite da (fisicamente) 3 server diversi, ogni server ha creato un oggetto sessione per te e perché queste sessioni gli oggetti si trovano su 3 caselle indipendenti, non c'è modo diretto di sapere cosa c'è nell'oggetto di sessione dell'altro. Per sincronizzare tra queste sessioni del server, potrebbe essere necessario scrivere/leggere i dati della sessione in un livello comune a tutti, come un DB. Ora scrivere e leggere i dati da/verso un db per questo caso d'uso potrebbe non essere una buona idea. Ora, ecco il ruolo di sticky-session. Se allo load balancer viene richiesto di utilizzare sessioni persistenti, tutte le interazioni avverranno con the same physical server, anche se sono presenti altri server. Pertanto, l'oggetto della tua sessione sarà lo stesso per tutta la tua interazione con questo sito.

Per riassumere, In caso di sessioni adesive, tutte le richieste verranno indirizzate allo stesso server Web fisico mentre nel caso di un loadbalancer non appiccicoso può scegliere qualsiasi server web per soddisfare le vostre richieste.

A titolo di esempio, si può leggere su Balancer di Amazon Elastic Load e le sessioni di appiccicoso qui: http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html

+0

@ TJ- cosa succederà se un nodo non sarà disponibile? – gstackoverflow

+8

Nella maggior parte dei casi, la sessione andrà persa. In caso di [AWS ESB] (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html) _Se un'istanza fallisce o diventa non sana, il servizio di bilanciamento del carico interrompe la richiesta di routing a tale esempio, sceglie invece una nuova istanza sana basata sull'algoritmo di bilanciamento del carico esistente. Il servizio di bilanciamento del carico tratta la sessione come ora "bloccata" nella nuova istanza sana e continua a instradare le richieste a tale istanza anche se l'istanza fallita ritorna._ –

+1

In base a quali informazioni il LoadBalancer rende appiccicosa una sessione HTTP? Soprattutto sulle connessioni HTTPS questo problema diventa interessante. Feed l'LB con la chiave privata dei server Web, in modo che sia in grado di interrompere la connessione SSL e recuperare la sessione HTTP? O il LB usa semplicemente l'indirizzo IP del client? In questo caso, che dire del server proxy in cui più client utilizzano lo stesso indirizzo IP? O ancora peggio, i client mobili, dove l'indirizzo IP cambia di frequente? O esiste anche una tecnica migliore per questo? Grazie – g000ze

32

Ho fatto una risposta con qualche dettaglio in più qui: https://stackoverflow.com/a/11045462/592477

Oppure si può leggere lì ==>

Quando si utilizza il bilanciamento del carico, significa che esistono diverse istanze di tomcat e che è necessario dividere i carichi.

  • Se si utilizza la replica di sessione senza sessione appiccicoso: Immaginate di avere un solo utente di utilizzare il web app, e si dispone di 3 istanze Tomcat. Questo utente invia diverse richieste alla tua app, quindi il loadbalancer invierà alcune di queste richieste alla prima istanza di Tomcat e invierà alcune altre di queste richieste alla seconda istanza e altre alla terza.
  • Se si sta utilizzando una sessione persistente senza replica: Immagina di avere un solo utente che utilizza la tua app Web e di avere 3 istanze di Tomcat . Questo utente invia diverse richieste alla tua app, quindi il loadbalancer invierà la prima richiesta utente a una delle tre istanze di Tomagat e tutte le altre richieste inviate da questo utente durante la sessione verranno inviate allo stesso tomcat esempio. Durante queste richieste, se si chiude o si riavvia questa istanza di Tomcat (istanza tomcat utilizzata), il loadbalancer invia le richieste rimanenti a un'altra istanza di tomcat che è ancora in esecuzione, MA poiché non si utilizza la replica di sessione, il istanza tomcat che riceve le richieste rimanenti non ha una copia di la sessione utente quindi per questo tomcat l'utente inizia una sessione: l'utente perde la sessione e viene disconnesso dall'app Web anche se l'app Web è ancora in esecuzione .
  • Se si sta utilizzando la sessione persistente CON replica di sessione: Immagina di avere un solo utente che utilizza la tua app Web e di avere 3 istanze di Tomcat . Questo utente invia diverse richieste alla tua app, quindi il loadbalancer invierà la prima richiesta utente a una delle tre istanze di Tomagat e tutte le altre richieste inviate da questo utente durante la sessione verranno inviate allo stesso tomcat esempio. Durante queste richieste, se spegnere o riavviare l'istanza di Tomcat (istanza di Tomcat che viene utilizzato) il loadbalancer invia i rimanenti richieste a un altro esempio di Tomcat che è ancora esecuzione, come si utilizza la replica della sessione, il gatto grado che riceve le restanti richieste ha una copia della sessione utente quindi l'utente continua nella sua sessione: l'utente continua a navigare sul web app senza essere disconnessi, l'arresto dell'istanza tomcat non ha alcun impatto sulla navigazione dell'utente.