Ho due server IIS in esecuzione utilizzando NLB. Purtroppo non posso usare il server di sessione condivisa, quindi ogni server utilizza la propria sessione. Come posso garantire che tutte le richieste provenienti dallo stesso utente vengano inoltrate allo stesso server IIS?Come mantenere le richieste utente sullo stesso server quando si utilizza IIS NLB?
risposta
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.
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.
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
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.
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.
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
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
L'ambiente con carico bilanciato deve adattarsi alla memoria di sessione, non viceversa. – Karlth
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
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.
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
Ultimamente non ho ricevuto alcun messaggio AOL, vero? – Min
Considerati gli altri commenti di Sergejus, penso che questo sia l'unico modo per andare. – NotMe