ASP.NET è noto per lo sviluppo di applicazioni Web ad alto traffico. Molte di queste applicazioni vengono distribuite in più posizioni geografiche. Questa distribuzione multisito viene eseguita per scopi di ripristino di emergenza o per la gestione del traffico regionale avvicinando l'applicazione ASP.NET all'utente finale.
In caso di ripristino di emergenza, di solito è presente un sito attivo e un sito passivo. Il sito passivo diventa attivo non appena il sito attivo si interrompe per qualsiasi motivo. In altri casi, due o più siti possono essere tutti attivi ma gestiscono il traffico più vicino alla loro regione (ad esempio, New York, Londra e Tokyo).
NCache Dettagli NCache Docs Provider dello stato della sessione ASP.NET
ASP.NET mantiene le informazioni specifiche dell'utente nel suo oggetto Session State sul server web. Quando l'utente accede all'applicazione ASP.NET per la prima volta, il relativo stato della sessione viene creato e rimane lì finché l'utente sta utilizzando attivamente l'applicazione. Per impostazione predefinita, dopo 20 minuti di inattività da parte dell'utente, ASP.NET scade questa sessione.
L'oggetto ASP.NET Session State viene archiviato in memoria sul server Web (InProc), su qualsiasi server (StateServer), in un database di SQL Server o in un archivio di terze parti tramite l'architettura SSP.
L'opzione di terze parti di solito è una cache distribuita in memoria come NCache, è un ottimo posto per memorizzare lo stato della sessione. I motivi sono prestazioni più veloci, una maggiore scalabilità e una migliore affidabilità dello stato della sessione ASP.NET a causa della replica della sessione. Di seguito è riportato un esempio di come specificare un'opzione di archiviazione della sessione personalizzata nel file web.config, che risulta in NCache come archiviazione dello stato della sessione ASP.NET:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<sessionState cookieless ="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"> <providers> <add name ="NCacheSessionProvider" type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider" sessionAppId="demoApp" cacheName="demoClusteredCache" writeExceptionsToEventLog="false" asyncSession="false" enableLogs="false"/> </providers> </sessionState> |
Distribuzione multisito attiva-passiva
Tuttavia, se la tua applicazione è in esecuzione in una distribuzione multisito, la domanda che devi affrontare è cosa fare Sessione ASP.NET Stoccaggio di stato. Se è stata distribuita l'applicazione ASP.NET in una configurazione multisito attiva-passiva, tutti gli stati della sessione ASP.NET vengono creati e archiviati nel sito attivo. Il sito passivo non ha dati di sessione. Quindi, se il sito attivo si interrompe e tutto il traffico viene reindirizzato al sito passivo, tutti gli utenti perderanno improvvisamente le sessioni e dovranno ricominciare da capo. Puoi evitarlo usando il NCache Topologia a ponte.
Dopo aver creato un file Ponte tra i siti attivi e passivi, il sito attivo inizia a inviare tutte le aggiunte, gli aggiornamenti e le rimozioni degli oggetti ASP.NET Session State al Bridge. Il Bridge li replica in modo asincrono attraverso la WAN al sito passivo. L'architettura Bridge non blocca le operazioni attive del sito, quindi non si vede alcun degrado delle prestazioni. L'unico problema da tenere a mente è che poiché il Bridge si replica in modo asincrono, potrebbero esserci alcune sessioni nella "coda di replica" che non arriveranno al sito passivo se il sito attivo si spegne improvvisamente. Ma questo è di solito un numero insignificante. Leggi di più su NCache Topologia a ponte e tutte le situazioni in cui è benefico per te.
NCache Dettagli NCache Docs Proprietà del provider di stato della sessione ASP.NET
Distribuzione multisito attiva-attiva
Se l'applicazione ASP.NET viene distribuita in due o più siti attivi contemporaneamente, è necessario evitare la replica Stato sessione ASP.NET a tutti i siti per risparmiare sul costo della larghezza di banda. Tuttavia, probabilmente desideri la possibilità di instradare parte del traffico ad altri siti per gestire situazioni di overflow.
In alternativa, potrebbe essere necessario disattivare uno dei siti per la manutenzione senza interruzioni per gli utenti. In questo caso, è possibile utilizzare la funzionalità di archiviazione dello stato della sessione ASP.NET multisito in NCache. La funzione consente di gestire questi casi e specificare in web.config di generare ID di sessione con un prefisso di posizione per il sito "primario" di questa sessione. Quindi, anche se questa richiesta di sessione viene indirizzata a un altro sito, quel sito sa dove trovare questa sessione.
Le sessioni non si spostano dalla loro posizione principale anche se l'utente richiede un percorso verso l'altro sito. Ma l'altro sito può accedere a questa sessione dal suo sito "principale". Ogni sito specifica il suo "primario" e tutti gli altri come siti "secondari". Di seguito sono riportati i passaggi da seguire per raggiungere questo obiettivo:
- Aggiungi voce in web.config. È necessario generare l'ID sessione ASP.NET allo stesso modo su tutti i server e siti. Puoi usare l'utilità genmackeys disponibile con NCache installazione per generare le chiavi.
1<machineKey validationKey ="A01D6E0D1A5D2A22E0854CA612FE5C5EC4AECF24"decryptionKey ="ACD8EBF87C4C8937" validation ="SHA1"/> - Per abilitare l'affinità di posizione di un ID sessione, aggiungi la configurazione indicata di seguito:
123456<configSections><section name="ncache" type="Alachisoft.NCache.Web.SessionStateManagement.NCacheSection,Alachisoft.NCache.SessionStateManagement, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/></configSections><ncache><sessionLocation><primaryCache id="London_Cache" sid-prefix="LDNC"/><secondaryCache id="NewYork_Cache" sid-prefix="NYKC"/><secondaryCache id="Tokyo_Cache" sid-prefix="TKYC"/></sessionLocation></ncache> - Specificare il gestore di ID sessione personalizzato utilizzando l'attributo sessionIDManagerType dell'elemento sessionState in web.config.
12345678910111213141516171819202122232425262728293031<<sessionStatecookieless ="false"regenerateExpiredSessionId="true"mode="Custom"customProvider="NCacheSessionProvider"timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"><providers><add name ="NCacheSessionProvider"type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider"sessionAppId="demoApp"cacheName="demoClusteredCache"writeExceptionsToEventLog="false"asyncSession="false"enableLogs="false"/></providers></sessionState>
Si prega di notare che nell'esempio sopra, la sezione in ogni sito sarà diversa, il che significa che ogni sito avrà il proprio "primario" e considererà tutti gli altri siti come "secondari".
NCache Dettagli NCache Docs ASP.NET Core Sessioni
ASP.NET genera sid (id di sessione) in un formato specifico in modo che il prefisso sid possa far parte dell'id di sessione. Questo ID sessione aiuta ASP.NET a conoscere l'origine dello stato della sessione ASP.NET in modo che si acceda alla cache per quel sito. Con questa configurazione, se si instradano le richieste da un sito a un altro per l'overflow, l'altro sito recupera lo stato della sessione ASP.NET dal sito "primario" originale perché fa parte dell'id di sessione come prefisso di posizione. Riduce al minimo il consumo di larghezza di banda della WAN e paghi solo per il traffico in eccesso.
L'altra situazione è quando si desidera eliminare un sito. Puoi reindirizzare tutto il traffico del sito ad altri siti senza spegnere i server di cache di questo sito; puoi spegnere i server web. Attendere quindi che tutti gli oggetti ASP.NET Session State esistenti scadano dopo che gli utenti hanno smesso di utilizzare l'applicazione. Una volta reindirizzato il traffico, basta spegnere i server cache. Con questo, i tuoi utenti non sentiranno alcun tempo di inattività. Dai un'occhiata a come NCache ti aiuta a raggiungere questo obiettivo. Scarica una versione di prova di 60 giorni completamente funzionante di NCache.