2009-05-14 13 views

risposta

3

Penso che quello che stai cercando sia Sticky Sessions. Tuttavia, le sessioni permanenti vengono implementate dal bilanciatore del carico. Probabilmente è necessario configurare un bilanciamento del carico esterno (BIG-IP, HAProxy, ecc.) Che possa fare sessioni appiccicose.

+0

Penso che sia possibile senza un bilanciatore del carico esterno semplicemente riconfigurando il cluster NLB. Dovrebbe funzionare anche per gli utenti AOL con proxy (se questi esistono ancora ;-)) – Christian

+2

Ultimamente non ho ricevuto alcun messaggio AOL, vero? – Min

+0

Considerati gli altri commenti di Sergejus, penso che questo sia l'unico modo per andare. – NotMe

0

Perché vuoi farlo? Se è a causa dello stato della sessione, è necessario disporre di un database o di un server out-of-process impostato in un luogo comune e fare riferimento a tutti i nodi.

+0

Per avere un server separato, come so, ho bisogno di contrassegnare gli oggetti, che sono archiviati in sessione, come serializzabili. Non posso farlo adesso, perché sto spostando il sistema legacy nell'architettura NLB. – Sergejus

0

Considererei un proxy inverso che si trova di fronte a ciascun server e ricorda quali utenti esterni stanno utilizzando quali server.

So (dal suo utilizzo in questo modo) Cherokee supporta il proxy IPHash ma sono sicuro che ce ne sono molti altri.

+0

Aggiungerò: questo sostituirà il bilanciamento del carico integrato. – Oli

+0

Ma IIS ha questa funzionalità? – Sergejus

+0

Forse ... Leggi questo: http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/77cb4318-75f8-4310-a05f-3605b5768007.mspx?mfr=true – Oli

0

Giusto per aggiungere alla risposta di Lloyd, è necessario evitare comunque di utilizzare la sessione in un ambiente con bilanciamento del carico. L'intero scopo alla base dell'uso della sessione è di evitare le chiamate al database; se si finisce per memorizzare nuovamente i dati della sessione nel database, di solito non si guadagna nulla.

Il motivo è che 1. è ora di fare 2 database di chiamate per ogni caricamento della pagina (recuperare e negozio) e 2. che i dati ora deve passare attraverso i confini di serializzazione/deserializzazione. La maggior parte delle volte si tratta di un'operazione più costosa del semplice recupero dei dati che si desidera iniziare.

Ora, per la tua domanda attuale. Hai la possibilità di memorizzare i dati della sessione nello stato di visualizzazione. Facoltativamente, puoi rinunciare alla sessione e utilizzare invece i cookie. Se segui questo percorso, assicurati di crittografarlo mentre esci e decrittalo quando lo ricevi.

+0

Accetto il problema del database , infatti, utilizziamo MemCached per memorizzare le informazioni 'session' perché volevamo rimuovere l'interazione con il database e MemCached è molto più veloce nel fornire informazioni. – Lloyd

+0

Vedo quello che stai dicendo, ma nel mio caso ho un sistema legacy che non posso toccare. Quindi ora ho bisogno di trovare il modo più appropriato per introdurre NLB. – Sergejus

+0

L'ambiente con carico bilanciato deve adattarsi alla memoria di sessione, non viceversa. – Karlth

1

Potete farlo facilmente fintanto che nessuno dei vostri clienti utilizzare un sistema proxy distribuito:

Nei protieries del cluster NLB, scheda "regole di porta" è possibile scegliere la modalità "filtro" e l'affinità : Non puoi scegliere "nessuno" perché non hai sessioni centrali. Ma "semplice" reindirizza ogni utente allo stesso server finché l'indirizzo IP rimane lo stesso. Se ad es. i server proxy di AOL anticiapte quindi "classe C" potrebbero essere una scelta sicura (anche se forse riducendo il bilanciamento del carico un po '), perché la stessa rete di classe C va allo stesso server.

Immagino che sia facilmente implementato da MS in modo che entrambi gli host sappiano quale ip è pari o dispari o quale terzina della rete di classe C è pari o dispari e distribuire il carico sempre nello stesso modo a seconda dell'IP -Indirizzo

15

trovato questo e ha deciso di condividere con gli altri:

Utilizzare la funzionalità del client affinità. Quando l'affinità client è abilitata, Bilanciamento carico di rete indirizza tutte le connessioni TCP allo stesso host di cluster. Ciò consente di mantenere lo stato della sessione nella memoria dell'host. È possibile abilitare l'affinità del client nella finestra di dialogo Aggiungi/Modifica regole di porta in Gestione bilanciamento carico di rete. Scegliere l'affinità Single o Class C per garantire che solo un host del cluster gestisca tutte le connessioni che fanno parte della stessa sessione client. Questo è importante se l'applicazione server in esecuzione sull'host del cluster mantiene lo stato della sessione (come i cookie del server) tra le connessioni. Per ulteriori informazioni sull'affinità di Bilanciamento carico di rete, vedere la Guida nello snap-in Bilanciamento carico di rete.

+1

Quindi si prega di rendere questa la risposta accettata – Christian

+0

Sarò in grado di farlo solo dopo 48 ore ... – Sergejus

+0

Incidentalmente, questo è lo stesso concetto di sessioni appiccicose. – NotMe

Problemi correlati