ASP.NET è diventata la scelta principale degli sviluppatori nello sviluppo di applicazioni Web ad alto traffico. Grazie alla sua natura scalabile, il livello dell'applicazione ASP.NET può gestire senza problemi migliaia di utenti simultanei con milioni di richieste al giorno. Tali applicazioni ASP.NET ad alto traffico vengono distribuite in una Web farm con bilanciamento del carico con un servizio di bilanciamento del carico, instradando le richieste degli utenti a più server Web.
Sebbene il livello dell'applicazione ASP.NET funzioni eccezionalmente bene anche durante carichi transazionali elevati, l'applicazione deve affrontare alcuni colli di bottiglia critici per la scalabilità in altre aree. Questi colli di bottiglia possono rallentare l'applicazione ASP.NET e potrebbe anche interrompersi quando l'attività aziendale è al culmine.
Il problema: quattro colli di bottiglia delle prestazioni
Questi quattro colli di bottiglia delle prestazioni di ASP.NET sono descritti di seguito:
Collo di bottiglia del database
In una Web farm con bilanciamento del carico, quando il carico delle transazioni aumenta, puoi facilmente aggiungere più server Web per scalare in modo lineare. Ma non è possibile aggiungere più server di database al livello di database (SQL Server, Oracle, altri) allo stesso modo. Quindi, il database inizia a rallentare e potrebbe anche andare in crash a un certo punto. Questa suddivisione è il collo di bottiglia più critico delle prestazioni che l'applicazione deve affrontare.
Collo di bottiglia dell'archiviazione dello stato della sessione ASP.NET
Lo stato della sessione ASP.NET deve essere archiviato da qualche parte e la sua archiviazione diventa un collo di bottiglia come il database dell'applicazione. Sono disponibili tre opzioni di archiviazione fornite da Microsoft, ovvero InProc, State Server e SQL Server. Tutti e tre hanno colli di bottiglia nelle prestazioni.
InProc ti obbliga a utilizzare un singolo processo di lavoro per server Web, che non funziona in un ambiente multiprocessore o multicore, in cui è preferibile disporre di più processi di lavoro.
Inoltre, in una Web farm con bilanciamento del carico, è necessario un bit di sessione permanente sul sistema di bilanciamento del carico per inviare sempre le richieste degli utenti al server Web, creando la sessione, anche se questo server Web è sovraccarico mentre gli altri sono inattivi.
Inoltre, SQL Server non è un archivio ideale per lo stato della sessione ASP.NET perché li archivia come BLOB e SQL Server non funziona bene con esso.
NCache Dettagli Memorizzazione nella cache della sessione ASP.NET Documenti di memorizzazione nella cache della sessione ASP.NET
ASP.NET View State Strozzatura
ASP.NET View State è una funzionalità di gestione dello stato lato client costruita sul server Web per conservare i dati dei controlli come pulsanti e menu a discesa. Questi dati vengono inviati al browser solo per tornare quando si verifica un postback. E un ASP.NET View State La stringa può facilmente avere una dimensione di 100 KB, moltiplicata per milioni di richieste che ricevi ogni giorno.
Ciò non solo rallenta il tempo di risposta dell'applicazione ASP.NET, ma consuma anche molta larghezza di banda aggiuntiva che può aumentare notevolmente i costi operativi.
Esecuzione di pagine inutili
Molte volte, l'output della pagina ASP.NET non cambia su più richieste perché i dati sottostanti non sono cambiati. Ma la pagina viene comunque eseguita per produrre lo stesso output dell'ultima volta. Questa esecuzione di pagine extra consuma molte risorse di sistema, tra cui memoria e CPU, ed effettua anche chiamate al database.
La soluzione: cache distribuita in memoria
La soluzione più appropriata a tutti questi problemi è incorporare una cache distribuita in memoria in ASP.NET e ASP.Net Core applicazione. NCache è una popolare cache distribuita open source per .NET. Discutiamo rapidamente di come risolvere i nostri quattro colli di bottiglia delle prestazioni con NCache.
NCache Dettagli ASP.NET Core Strategie di archiviazione delle sessioni ASP.NET View State Proprietà e panoramica della memorizzazione nella cache
Memorizzazione nella cache dei dati dell'applicazione
NCache ti consente di memorizzare nella cache i dati dell'applicazione (sia dati di riferimento di sola lettura che dati transazionali che cambiano frequentemente) per ridurre quei costosi viaggi del database. Invece di andare al database, NCache indirizza l'85-90% delle tue richieste alla cache. Questo esclude le possibilità di qualsiasi contesa del database.
A differenza di un database, NCache non diventa mai un collo di bottiglia perché è a cache distribuita ed scala linearmente. NCache crea un cluster di server cache e ti consente di aggiungere più server al cluster all'aumentare del carico delle transazioni. Di seguito è riportato un codice di esempio che recupera i dati dal database e li archivia nel cluster di cache (se non è già presente nella cache).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Customer Load(string customerId) { // Key format: Customer:PK:1000 string key = "Customers:CustomerID:" + customerId; Customer cust = (Customer) _cache[key]; if (cust == null) { // Item not in cache so load from db LoadCustomerFromDb(cust); // Add item to cache for future reference _cache.Insert(key, cust); } return cust; } |
Configurazione dell'archiviazione dello stato della sessione
NCache consente inoltre di archiviare le sessioni ASP.NET nella cache. Questo è un archivio in memoria molto più veloce rispetto alle altre opzioni di archiviazione. Per fornire affidabilità, NCache replica le tue sessioni su più server. Quindi, se un server si arresta in modo anomalo, non ci sarà alcuna perdita di dati della sessione. La cosa bella dell'archiviazione dello stato della sessione ASP.NET in NCache è che non c'è alcuno sforzo di programmazione e puoi collegarlo senza problemi tramite una modifica web.config. Di seguito è riportato un esempio.
1 2 3 4 5 6 7 8 9 |
<configuration> ... <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="20"> <providers> <add name="NCacheSessionProvider" |
Visualizza la configurazione dello stato
NCache ti consente di memorizzare nella cache il tuo ASP.NET View State sul server web, inviando al browser solo una chiave identificativa. Tornando in un postback, NCache recupera i risultati della visualizzazione intercettando la chiave dell'identificatore tramite il relativo gestore HTTP. Questo stato di visualizzazione viene quindi inviato alla pagina ASP.NET.
Il risultato finale è un'applicazione ASP.NET molto più veloce con un footprint di larghezza di banda molto più piccolo. Di seguito è riportato un esempio di modifica della configurazione su come utilizzare NCache per la memorizzazione nella cache ASP.NET View State:
Cache di output ASP.NET
Per impedire l'esecuzione inutile di pagine ASP.NET quando il loro output non cambia, ASP.NET fornisce un Cache di output framework per configurazioni a server singolo e processo di lavoro singolo. NCache, d'altra parte, lo estende per configurazioni di processi multi-server e multi-worker.
Attraverso NCache, puoi anche aspettarti che le tue pagine scadano quando i relativi dati vengono modificati nel database. Di seguito è riportato un esempio.
Conclusione
In breve, NCache an cache distribuita in memoria con scalabilità lineare, semplice configurazione dello stato di visualizzazione e configurazione senza interruzioni con l'applicazione è la soluzione migliore per tutti questi colli di bottiglia delle prestazioni. Queste caratteristiche ottimizzano il performance della tua applicazione .Net e rendila più veloce, più affidabile e altamente disponibile.