Domanda

In questo momento, il mio sito è servito da un singolo server, ma prevedo la necessità di aumentare la capacità del mio server, presto. Invece di suddividere i miei siti Web tra più server e dover gestire sessioni tra server, desidero avere più server Web tutti con la stessa base di codice su di essi e utilizzare la condivisione del carico round robin basata su router per distribuire gli utenti a ciascun server. E una volta che un utente raggiunge un server Web, è necessario che rimanga con quel server Web per tutta la sua sessione. Per quanto ne so, non ho bisogno di un codice speciale asp.net per facilitare questo.

Qualcuno ha avvertimenti o commenti per questo approccio?

È stato utile?

Soluzione

Quello di cui stai parlando si chiama sessioni appiccicose o affinità di sessione. Se il tuo router lo supporta, sei d'oro.

L'unica cavia è che il bilanciamento del carico non sarà perfetto. Se hai pochi utenti ad alto carico che finiscono tutti casualmente sullo stesso server, effettueranno una statistica lì fino alla fine delle sessioni.

Ho implementato questo tipo di bilanciamento del carico dove lavoro e non richiede alcun codice speciale asp.net per implementare.

Altri suggerimenti

La maggior parte dei bilanciatori del carico (perhap tutto) hanno la capacità di applicare "appiccicoso" sessioni in cui gli utenti sullo stesso IP vengono indirizzati allo stesso server Web su ogni richiesta. Non è necessario modificare il codice per eseguire ciò. Ci sono due avvertimenti che vengono in mente:

  1. L'uso di sessioni adesive significa che il carico del traffico non verrà distribuito in modo uniforme come se non si utilizzassero sessioni adesive. Tuttavia, le distribuzioni dovrebbero essere "anche sufficienti" IMO.
  2. Ci sarà una percentuale molto piccola di utenti che usano server proxy che possono entrare su IP diversi su richieste diverse. Questi utenti possono riscontrare "dispari" comportamento quando vengono passati a server diversi.

Un'altra caratteristica di questa configurazione è che se uno dei tuoi server si arresta, anche le sessioni degli utenti su quel server perderanno la loro sessione. Penso che questa sia una delle impostazioni più comunemente utilizzate in quanto non richiede alcuno sforzo di sviluppo se il router supporta l'affinità di sessione o sessione appiccicosa.

Come altri hanno già detto, dovresti essere in grado di attivare Sticky Sessions sul tuo bilanciamento del carico, che dovrebbe occuparsi della maggior parte del "rimanere su un server". problemi per te.

Tuttavia, dovrai assicurarti di aver impostato le impostazioni per far fronte a un utente che atterra su un server errato a metà sessione. Le sessioni permanenti si basano solitamente sull'indirizzo IP e gli IP degli utenti possono cambiare a metà sessione se sei sfortunato, oppure un server potrebbe andare offline e l'utente verrà indirizzato all'altro server.

Dovresti assicurarti che i tuoi MachineKeys sono gli stessi su tutti i server: ciò garantirà la possibilità di decrittografare il viewstate correttamente su tutti i server.

Se possiedi i server, puoi farlo in machine.config, altrimenti puoi impostarlo a livello di applicazione in web.config, puoi trovare maggiori dettagli in questo modo come:

  

Configura MachineKey in ASP.NET 2.0

Ci sono alcune lievi differenze se si esegue IIS 7.5: Tess Ferrandez ha maggiori dettagli in un post recente " L'autenticazione dei moduli non riesce dopo l'installazione di IIS 7.5 " ;.

L'altra cosa che probabilmente vorrai fare è spostare il tuo sessionState da InProc a SQL o StateServer.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top