Prima di saltare nel cache del cliente, rimpiccioliamo un po' e comprendiamo le basi della memorizzazione nella cache. Nell'informatica, una cache è una memoria ad alta velocità utilizzata come archivio ausiliario per evitare costosi viaggi di dati e ottimizzare le prestazioni di applicazioni più semplici eseguite su un singolo nodo server. Ma in un sistema distribuito con bilanciamento del carico, una singola richiesta viene gestita da più nodi dell'applicazione. È qui che la cache provoca un calo delle prestazioni.
Per far fronte a questa esigenza, viene introdotta una cache distribuita in memoria per applicazioni che soddisfano carichi di transazione estremi al secondo e richiedono alta disponibilità e scalabilità lineare.
Gli sviluppatori possono scegliere tra molte popolari opzioni di memorizzazione nella cache distribuita disponibili sul mercato come NCache. NCache è una cache distribuita in memoria estremamente veloce e linearmente scalabile che memorizza nella cache i dati delle applicazioni per ridurre i costosi viaggi del database e migliorare i tempi di risposta. Ma nonostante tutto questo, c'è ancora spazio per un aumento delle prestazioni che può essere reso possibile aggiungendo una cache sopra una cache:una cache del cliente.
NCache Dettagli Caching distribuito in .NET Altamente disponibile NCache
Come funziona la cache client NCache?
Nella maggior parte dei casi, una cache distribuita è ospitata su una serie di server cache dedicati in tutta la rete, quindi l'applicazione deve effettuare viaggi di rete per recuperare i dati. E questo non è veloce come l'accesso ai dati localmente e dall'interno del processo di candidatura.
Per gestire questo problema, NCache fornisce il Cache cliente. Client Cache funziona come memoria temporanea che risiede vicino al processo dell'applicazione in modo che il recupero dei dati sia più facile e veloce. Client Cache porta le prestazioni dell'applicazione a un livello superiore poiché più applicazioni in esecuzione sulla stessa macchina client possono comunicare e condividere dati utilizzando Modalità OutProc. Client Cache avvicina il set di dati caldi all'applicazione, anche all'interno del processo dell'applicazione con il Modalità InProc che dà un enorme aumento delle prestazioni.
In NCache, l'utilizzo di Client Cache è abbastanza semplice. Non sono richieste modifiche al codice alla fine dell'applicazione. È una semplice opzione di configurazione. Puoi creare una cache client tramite il NCache Web Manager oppure NCache-cmdlet di PowerShell supportati. Una volta che il client è stato configurato, le applicazioni client inizieranno automaticamente a usarlo.
Comprendiamo il funzionamento della Client Cache (detta anche di primo livello o L1 Cache) con un esempio di applicazione di E-Commerce. L'applicazione accede frequentemente al catalogo prodotti e ai dati degli utenti attualmente attivi. Tali dati possono essere conservati nella Client Cache, in esecuzione sul client box (dove risiede l'applicazione). In questo modo è possibile evitare un viaggio di rete attraverso la cache in cluster (denominata anche cache di secondo livello o cache L2) e i dati vengono forniti dalla cache L1 molto più velocemente.
Ora devi pensare a come i dati vengono sincronizzati tra due cache in modo che l'applicazione sia sempre servita con i dati aggiornati dalla cache L1.
Sincronizzazione dei dati tra la cache L1 e L2
Per assicurarsi che l'applicazione ottenga sempre dati aggiornati, due thread in background operano nella cache del client. Questi due potenti meccanismi di sincronizzazione in esecuzione nella cache del client assicurano che l'applicazione ottenga sempre i dati più recenti con prestazioni e scalabilità aggiuntive. I due thread in background sono:
Thread basato sulle notifiche
Quando i dati vengono aggiunti alla cache L1, registra istantaneamente una notifica di modifica dei dati e la cache L2 tiene traccia degli elementi della cache che la cache L1 conserva e monitora le modifiche quando si verifica una modifica di aggiornamento/rimozione dei dati. Alla modifica dei dati nella cache L2, la cache L1 riceve una notifica di modifica e, in risposta, la cache L1 si sincronizza con L2.
Thread basato su polling
Questo è un meccanismo di fallback che viene attivato solo quando la comunicazione tra L1 e L2 Cache viene interrotta a causa di un problema tecnico di rete o di una perdita di connessione. In questo caso, L1 Cache attende 10 secondi, quindi esegue il polling stesso e richiede le modifiche ai dati nella L2 Cache. Dopo aver ricevuto le notifiche di modifica, si sincronizza con la cache L2.
Per sfruttare appieno i vantaggi di Client Cache, puoi utilizzarlo in una delle due modalità di isolamento a livello di processo disponibili.
Modalità di isolamento nella cache del client
Cache cliente viene eseguito sul nodo client in cui sono in esecuzione le applicazioni. A seconda delle tue esigenze di prestazioni e dell'architettura dell'applicazione, puoi scegliere una delle seguenti modalità di isolamento a livello di processo supportate dalla cache del client. NCache Client Cache esiste in due modalità: InProc e OutProc.
Modalità InProc:
In Modalità InProc, Client Cache viene eseguito all'interno del processo dell'applicazione, eliminando la comunicazione tra processi. La modalità InProc fornisce le massime prestazioni all'applicazione poiché i dati rimangono in forma di oggetto, riducendo il costo di serializzazione e deserializzazione.
In modalità InProc, i dati tra le altre istanze dell'applicazione non vengono condivisi, quindi ogni istanza dell'applicazione ospita un'istanza Client Cache dedicata che migliora le prestazioni.
Modalità OutProc:
In Modalità OutProc, Client Cache viene eseguito nel suo processo dedicato sul nodo client. La comunicazione tra le applicazioni e la Client Cache avviene tramite socket TCP. La modalità OutProc supporta la condivisione dei dati in modo che più istanze dell'applicazione possano comunicare con la stessa cache client. Ha un grande vantaggio poiché i dati sono condivisi tra più applicazioni, quindi i dati caricati o aggiornati da un'applicazione diventano disponibili per le altre.
Confronto in termini di prestazioni della modalità InProc e OutProc:
Esistono diversi fattori in base ai quali vengono misurate le prestazioni della modalità InProc e OutProc, ad esempio disponibilità dei dati, consumo di risorse e velocità.
Disponibilità dei dati: In modalità OutProc, il riavvio della cache non provoca la perdita di dati che fornisce stabilità ai dati. Mentre, in modalità InProc, il riavvio della cache comporta la perdita di dati.
Consumo di risorse: La modalità InProc fornisce le massime prestazioni quando le risorse come la memoria non sono limitate, poiché ogni istanza di Client Cache conserva la propria copia dei dati. La modalità OutProc richiede meno risorse fisiche rispetto alla modalità InProc.
Velocità: La modalità Client Cache InProc è super veloce perché è come un oggetto nel tuo heap e mantiene le cose in modo deserializzato, risparmiando il costo di serializzazione/deserializzazione che devi fare per qualsiasi OutProc o qualsiasi accesso remoto alla cache.
NCache Dettagli Cache cliente Notifiche di eventi nella cache
Il flusso operativo di Client Cache
Client Cache è più vicino al livello dell'applicazione e Client Cache è il sottoinsieme della cache in cluster. Quindi, tutte le operazioni avvengono in modo distribuito.
Tutte le operazioni di lettura basate su chiavi vengono eseguite direttamente sulla cache L1, le operazioni di scrittura basate su chiavi come Aggiungi, Inserisci e Rimuovi vengono prima eseguite sulla cache L2, quindi aggiunte alla cache L1 prima di tornare all'applicazione.
I dati vengono restituiti a L1 Cache prima di tornare all'applicazione in modo che la prossima volta che vengono richiesti gli stessi dati vengono forniti direttamente da L1 Cache.
Le operazioni di lettura e scrittura non basate su chiavi vengono eseguite solo nella cache L2 perché la cache L1 contiene il sottoinsieme della cache L2.
Altre istanze di Client Cache vengono aggiornate tramite dati in background meccanismo di sincronizzazione.
Modalità di sincronizzazione nella cache del client:
Pur essendo locale per l'applicazione, una cache client non è autonoma. Al contrario, è sempre sincronizzato con la cache del cluster. Ciò garantisce che i dati nella cache del client non siano mai obsoleti.
NCache Client Cache fornisce due modalità per sincronizzazione dei dati tra la cache del client e la cache del cluster. La cache del client contiene una copia dei dati della cache in cluster. Qualsiasi modifica che si verifica nella cache del cluster deve essere sincronizzata nella cache del client poiché il livello dell'applicazione comunica direttamente con la cache del client. Due modalità per la sincronizzazione dei dati sono ottimista e pessimista.
Modalità ottimista è la modalità predefinita per la sincronizzazione dei dati in NCache. La sincronizzazione avviene in background e quando un'applicazione richiede i dati, questi vengono restituiti all'applicazione dalla cache del client.
Applicazioni più sensibili e che richiedono un nuovo utilizzo dei dati modalità pessimista per la sincronizzazione dei dati. quando un'applicazione richiede i dati, L1 Cache verifica la versione con L2 Cache e fornisce i dati aggiornati.
Conclusione
NCache ti consente di sfruttare Client Cache con una cache distribuita. La parte migliore dell'utilizzo di Client Cache è che non viene eseguita alcuna programmazione da parte dell'utente. Si tratta di un'impostazione di configurazione semplice e la cache del client viene automaticamente collegata. La cache del client migliora le prestazioni in molti modi per le applicazioni che eseguono più letture che scritture. Quindi, scarica una versione di prova di 60 giorni completamente funzionante di NCache Enterprise e provalo tu stesso.