ASP.NET Core è un framework open source utilizzato per la creazione di applicazioni Web scalabili. Fornisce funzionalità multipiattaforma ed è abbastanza popolare con il microservices architettura. E, con l'avvento del .NETTO 6.0, sta solo migliorando in termini di prestazioni ed esperienza di sviluppo. Tuttavia, esistono ancora alcuni colli di bottiglia che ne trattengono il vero potenziale.
Uno di questi colli di bottiglia sono i tempi di lettura del database e questo collo di bottiglia è particolarmente evidente quando l'applicazione deve servire centinaia di migliaia di utenti alla volta. ASP.NET Core l'archiviazione della sessione può aiutare a mitigare tali problemi utilizzando l'archiviazione dei dati in memoria. Tuttavia, il provider di archiviazione di sessione predefinito presenta alcune limitazioni. Questi sono:
- Perdita di sessione: Le sessioni vengono perse se il server delle applicazioni si interrompe.
- Limiti di memoria: Poiché i dati sono archiviati nello spazio di memoria del processo di applicazione.
- Nessuna replica di sessione: Se il traffico viene reindirizzato a un altro server per qualsiasi motivo, le sessioni non vengono trasferite.
- Sessioni appiccicose: In un ambiente Web farm, è necessario utilizzare sessioni permanenti, il che vanifica lo scopo del bilanciamento del carico.
Fortunatamente per te, NCache è qui per risolvere tutti questi problemi e altro ancora. Entreremo in ulteriori dettagli nelle sezioni seguenti.
NCache Dettagli Scaricare NCache ASP .NET Core Strategie di archiviazione delle sessioni
Perché utilizzare l'archiviazione di sessione distribuita in primo luogo?
Per definizione, HTTP è un protocollo stateless, il che significa che le informazioni non vengono conservate su più richieste. Un meccanismo di terze parti viene solitamente utilizzato per trasferire le informazioni. Uno di questi meccanismi è l'archiviazione della sessione. ASP.NET Core offre la sua sessione di archiviazione, che esegue il backup dei dati in una cache. Quindi, invece di andare direttamente al database, l'applicazione verificherà prima se ha le informazioni memorizzate nella cache, se sì, l'applicazione restituirà tali informazioni e, in caso contrario, solo allora l'applicazione interrogherà il database.
Tuttavia, tieni presente che i dati della sessione sono considerati dati effimeri. L'applicazione dovrebbe continuare a funzionare indipendentemente da una cache di sessione vuota. I dati della sessione devono essere utilizzati solo per esigenze di ottimizzazione delle prestazioni. ASP.NET Core offre due opzioni per la memorizzazione nella cache della sessione:
Entrambe queste opzioni sono abbastanza veloci e, per la maggior parte, faranno il lavoro. Tuttavia, le loro implementazioni predefinite presentano gli stessi inconvenienti. Entrambi offrono cache autonome con un singolo punto di errore e senza alcuna opzione di replica dei dati in caso di guasto di un server. Per le applicazioni mission-critical, in cui un numero enorme di utenti richiede risorse contemporaneamente e la perdita di dati di sessione non è un'opzione, una cache distribuita è la strada da percorrere.
Perché NCache?
NCache è una cache distribuita in memoria open source sviluppata nativamente in .NET e .NET Core. Può essere configurato per funzionare localmente e su alcune piattaforme di hosting di terze parti. Inoltre, NCache può essere impostato come archivio di backup per l'archiviazione di sessioni con pochissime modifiche al codice e, a causa della sua natura distribuita intrinseca, verranno risolti i seguenti problemi:
- Limiti di memoria: La cache stessa si troverà ora in un processo separato dall'applicazione Web effettiva, quindi non ci saranno più limitazioni di memoria.
- Migliore affidabilità: il cluster di cache può anche trovarsi su un set di macchine completamente separato, per ottenere un'affidabilità ancora migliore.
- Topologie di memorizzazione nella cache: NCache offre 4 diverse topologie di memorizzazione nella cache. Puoi sceglierne uno qualsiasi in base alle tue esigenze, sia che tu dia priorità alla scalabilità, all'elevata disponibilità o alla replica dei dati (a scapito dell'utilizzo della memoria).
- Replica dei dati: Anche se un server delle applicazioni si interrompe, i dati della sessione verranno mantenuti al sicuro.
- Multi-Memoria sessione regione: NCache offre il Condivisione di sessioni multiregione anche. Le sessioni vengono replicate senza interruzioni su WAN. Pertanto, se gli utenti devono essere reindirizzati a una posizione diversa, le loro sessioni verranno mantenute intatte.
NCache offre due strategie per l'archiviazione delle sessioni, una è con il Provider di archiviazione sessioni e l'altro è NCachel'implementazione di IDistributedCache. Nelle sezioni seguenti, entreremo nei dettagli tecnici di come NCache può aiutare nella memorizzazione delle sessioni di ASP.NET Core.
NCache Dettagli ASP .NET Core Strategie di archiviazione delle sessioni ASP.NET Core Caching
Utilizzo dell'archiviazione della sessione NCache
Impostare NCache come archivio di supporto per l'archiviazione delle sessioni è molto semplice. Vedremo due approcci offerti da NCache:
Metodo 1: provider di archivio sessioni
Per questo approccio, è necessario installare il file AspNetCore.Session.NCache Pacchetto NuGet. Dopo aver installato questo pacchetto, assicurati di includere il file Alachisoft.NCache.Web.SessionState
spazio dei nomi nel Avvio.cs file della tua domanda e aggiungi NCache come servizio nella tua raccolta di servizi:
1 2 3 4 5 6 7 8 9 10 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; }); } |
E il gioco è fatto, hai impostato con successo NCache come provider di archiviazione di sessione. Per maggiori dettagli su NCache, puoi dare un'occhiata a NCache guida per programmatori.
Metodo 2: implementazione di IDistributedCache
Nel caso in cui stai già utilizzando un'implementazione di IDistributedCache
, puoi seguire questo approccio. Basta installare il NCache.Microsoft.Estensioni.Memorizzazione nella cache Pacchetto NuGet. E dopo aver configurato i servizi per il tuo ASP.NET Core applicazione basta aggiungere il seguente codice:
1 2 3 4 5 6 7 8 9 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheDistributedCache(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; }); } |
E voilà, ora puoi usare NCachel' attuazione di IDistributedCache
.
Utilizzo dell'archiviazione di sessioni multiregione NCache
Oltre alle capacità di replica dei dati fornite dalle varie topologie di memorizzazione nella cache, NCache offre anche la condivisione completa della sessione tra cluster di cache separati. Questo può essere molto utile in situazioni in cui si dispone di data center diversi per regioni diverse e, forse, a causa di alcune circostanze inevitabili, è necessario reindirizzare il traffico da una regione all'altra.
Puoi facilmente impostare la condivisione della sessione tra le tue diverse regioni. Le sessioni da una regione verranno replicate senza problemi su WAN nelle altre regioni. I dati della sessione vengono replicati dalla cache primaria a una o più cache secondarie. Per utilizzare la condivisione di sessioni multi-regione è necessario utilizzare il file NCache provider di archiviazione di sessione e solo le seguenti modifiche saranno richieste nel tuo Avvio.cs file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "LondonCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; configuration.EnableLocationAffinity = true; configuration.AffinityMapping = new CacheAffinity[] { new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC" }, new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC" }, new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC" } }; }); } |
Nota: una cosa da tenere a mente è che l'affinità di posizione deve essere abilitata per utilizzare la condivisione di sessioni multi-regione.
Il nome della cache è specificato in configuration.CacheName
il campo sarà la tua cache principale, mentre tutte le restanti cache specificate in configuration.AffinityMapping
saranno le tue cache secondarie. Il CachePrefix
è importante, poiché questo prefisso è allegato all'ID di sessione. Questo prefisso identifica dove sono archiviati i dati della sessione. Pertanto, se una richiesta arriva a una cache e il prefisso della cache è diverso dal prefisso della cache corrente, viene contattata la cache effettiva per i dati della sessione (se i dati non sono già presenti). Ora che la cache corrente ha i dati della sessione, tutte le richieste successive verranno ora servite localmente da questa cache.
NCache Dettagli ASP .NET Core Strategie di archiviazione delle sessioni Condivisione di sessioni multiregione
Conclusione
In questo blog, abbiamo esaminato il motivo per cui l'archiviazione delle sessioni è una potente funzionalità di ASP.NET Core e come può migliorare drasticamente le prestazioni della tua applicazione. Abbiamo anche esaminato come NCache può migliorare notevolmente l'archiviazione della sessione con l'aiuto della cache distribuita e se hai bisogno di un'affidabilità ancora migliore, puoi sempre optare per NCachela funzione di condivisione della sessione multi-regione per un'esperienza utente di prim'ordine.