Cache cliente
NCache le topologie cluster hanno lo scopo di fornire le migliori prestazioni e scalabilità per le tue applicazioni. Con le crescenti esigenze aziendali, le applicazioni devono elaborare più richieste e dati dei clienti. L'aggiunta di più nodi alla cache distribuita fornisce una scalabilità lineare senza problemi. Come una cache del processore hardware, la cache del client porta le prestazioni delle tue applicazioni a un livello superiore avvicinando il set di dati caldi alla tua applicazione, anche all'interno del processo dell'applicazione con il Modalità InProc.
Consideriamo l'esempio di un'applicazione di e-commerce. L'applicazione accede frequentemente al catalogo prodotti e ai dati degli utenti attualmente attivi. Tali dati possono essere conservati nella cache del client in esecuzione sul client box. Da un lato, mantenere questi dati nella cache del client migliora le prestazioni dell'applicazione evitando viaggi nel database e nella cache in cluster. D'altro canto, scarica molte operazioni di lettura/scrittura dalla cache del cluster consentendo alla cache del cluster di accettare più richieste. Inoltre, questo miglioramento delle prestazioni non compromette la coerenza dei dati. La cache del client mantiene i propri dati sincronizzati con la cache del cluster. Il modo in cui la cache del client si sincronizza con la cache del cluster viene spiegato nelle sezioni seguenti.
Plug: L'uso della cache del client è abbastanza semplice. Non sono richieste modifiche al codice alla fine dell'applicazione. È una semplice opzione di configurazione. È possibile creare una cache client tramite il NCache Centro di gestione oppure NCache cmdlet di Powershell supportati. Una volta configurato il client, le applicazioni client inizieranno automaticamente a utilizzarlo. Per le applicazioni già in esecuzione, è necessario riavviare l'applicazione.
Tutti Operazioni CRUD che accettano le chiavi della cache come input, ad esempio Aggiungi, Ottieni, inseriree Rimuovere, vengono instradati attraverso la cache del client. Le operazioni di lettura cercano innanzitutto i dati all'interno della cache del client. La cache del client restituisce i dati (se trovati). Altrimenti, l'operazione di lettura viene eseguita sulla cache del cluster. I dati restituiti dalla cache del cluster vengono restituiti all'applicazione dopo essere stati aggiunti alla cache del client. Pertanto, la successiva chiamata di lettura per gli stessi dati verrà servita dalla cache del client. Per le operazioni di lettura in blocco, solo i dati mancanti nella cache del client vengono recuperati dalla cache del cluster.
Operazioni di scrittura basate su chiave come, Aggiungi ed inserire, vengono prima eseguiti sulla cache del cluster. Una volta completati con successo, i dati vengono aggiunti alla cache del client e quindi inoltrati all'applicazione. Altre istanze della cache del client vengono aggiornate tramite un meccanismo di sincronizzazione dei dati in background, ovvero spiegato più avanti.
La cache del client contiene solo un sottoinsieme di dati della cache del cluster. Pertanto, tutte le altre operazioni non basate su chiave come Ottieni gruppo, query SQLe GetByTags, ecc., vengono eseguiti direttamente nella cache del cluster.
Cache client: modalità di isolamento
La cache del client viene eseguita 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.
In corso
Come suggerisce il nome, la cache del client viene eseguita all'interno del processo applicativo, eliminando la comunicazione tra processi. I dati dell'utente vengono conservati sotto forma di oggetto per evitare i costi di deserializzazione. Questa modalità fornisce le massime prestazioni all'applicazione. Poiché la cache del client è ospitata all'interno del processo dell'applicazione, i dati all'interno della cache del client non vengono condivisi tra altre istanze dell'applicazione. Ogni istanza dell'applicazione ospita un'istanza della cache client dedicata. Sebbene la modalità InProc offra il massimo processo, è adatta solo se:
Il set di dati a caldo dell'applicazione non è troppo grande.
L'applicazione dispone solo di poche istanze su ciascun nodo client con memoria fisica sufficiente. Ricorda che ogni istanza della cache del client conserva la propria copia dei dati.
Il ciclo di vita dell'applicazione è sufficientemente lungo per sfruttare i vantaggi della cache del client. Ricorda che il ciclo di vita della cache del client dipende dal ciclo di vita dell'applicazione. Quando l'applicazione si interrompe, anche tutti i dati all'interno della cache del client vengono persi. Le applicazioni con cicli di vita brevi si chiudevano o si riavviavano prima che la cache del client fosse completamente popolata.
Ogni applicazione ha il proprio set di dati attivo, che è diverso dalle altre applicazioni.
OutProc
Questa modalità fornisce l'isolamento a livello di processo per la cache del client. La cache del client viene eseguita nel suo processo dedicato sul nodo client. Le applicazioni comunicano con la cache del client tramite socket TCP. Più istanze dell'applicazione possono comunicare con la stessa cache client, condividendo quindi i dati. Sebbene InProc superi la modalità OutProc in termini di prestazioni, la modalità OutProc presenta una serie di vantaggi.
Più applicazioni in esecuzione sulla stessa macchina client comunicano con la stessa cache client. Più applicazioni condividono i dati. I dati caricati o aggiornati da un'applicazione diventano disponibili per altre applicazioni.
Il riavvio dell'applicazione non comporta la perdita di dati della cache del client.
Sono necessarie meno risorse fisiche come RAM e CPU per eseguire la cache del client in modalità OutProc rispetto alla modalità InProc quando ogni processo dell'applicazione conserva la propria copia della cache del client.
La sincronizzazione dei dati della cache del client (spiegata più avanti) con la cache del cluster grava meno sulla cache del cluster poiché si esegue una singola istanza della cache del client per ogni macchina client.
Note:
Se la cache del client OutProc è inattiva, l'applicazione eseguirà direttamente le operazioni sulla cache del cluster. Quando la cache del client si riavvia, si connetterà automaticamente alla cache del client. È possibile modificare questo comportamento impostando il file skip-client-cache-if-unavailable
bandiera client.ncconf. Se il flag è impostato su false
, le operazioni della cache avranno esito negativo se la cache del client è inattiva.
Sincronizzazione dei dati con la cache del cluster
Nonostante una semplice configurazione Plug & Play, non possiamo ignorare il fatto che la cache del client conserva una copia dei dati della cache del cluster. Le modifiche apportate ai dati in una cache del cluster devono essere propagate alla cache del client. Per una determinata cache del cluster possono esistere più cache client in esecuzione con la modalità InProc o OutProc. Le modifiche ai dati apportate dall'applicazione client vengono eseguite sull'istanza della cache client a cui è connessa l'applicazione. Pertanto, questa istanza della cache client viene sincronizzata automaticamente. Tuttavia, altre istanze della cache client non sono a conoscenza di queste modifiche. Le modifiche apportate ai dati della cache del cluster vengono sincronizzate con queste istanze della cache del client tramite un meccanismo di sincronizzazione dei dati in background spiegato di seguito:
Quando i dati vengono aggiunti alla cache del client, registra la notifica di modifica dei dati con la cache del cluster per i dati forniti.
La cache del cluster tiene traccia di ciascuno
CacheItem
che una cache del client contenga e monitori le modifiche apportate ai dati.Quando i dati sono aggiornato/rimosso dalla cache del cluster, la cache del cluster registra queste modifiche.
Un thread di lavoro in background dedicato controlla le modifiche ai dati ogni secondo e determina a quali cache client devono essere notificate le modifiche. Invia una notifica alle cache del client interessato informando che i dati sono stati modificati.
Un altro thread di lavoro in background dedicato in esecuzione nella cache del client è responsabile della sincronizzazione delle modifiche dei dati con la cache del cluster dopo aver ricevuto la notifica di modifica dei dati. Non appena riceve la notifica, richiede la cache del cluster e richiede aggiornamenti dei dati. Chiamiamo questo meccanismo di sincronizzazione polling della cache del client.
Questo thread di lavoro in esecuzione nella cache del client esegue il polling per le modifiche dei dati ogni 10 secondi se non ha ricevuto alcuna notifica dalla cache del cluster per gestire i casi in cui potrebbe aver perso una notifica a causa della perdita di connettività tra la cache del client e la cache del cluster.
Questo potente meccanismo di sincronizzazione assicura che le applicazioni client siano sempre servite con i dati più recenti dalla cache del client con prestazioni e scalabilità aggiuntive.
Modalità di sincronizzazione
Insieme al meccanismo di sincronizzazione dei dati in background, la cache del client supporta le due modalità di sincronizzazione seguenti.
Sincronizzazione ottimistica
Questa è la modalità di sincronizzazione predefinita della cache del client. Quando un'applicazione recupera i dati dalla cache del client e la cache del client contiene tali dati, i dati vengono semplicemente restituiti all'applicazione. La sincronizzazione viene eseguita in background, come spiegato sopra.
Sincronizzazione pessimistica
Il meccanismo di sincronizzazione in background è adatto alla maggior parte delle applicazioni e fornisce prestazioni e scalabilità ottimali all'applicazione. Tuttavia, per le applicazioni più sensibili e che desiderano assicurarsi di ricevere sempre i dati più recenti, la modalità pessimistica è progettata per loro. Con questa modalità, quando un'applicazione recupera i dati dalla cache del client e la cache del client conserva tali dati, la cache del client verifica la versione dell'elemento con la cache del cluster. Se viene trovata una versione aggiornata dei dati nella cache del cluster, viene recuperata e aggiornata nella cache del client. In questo modo è garantito che l'applicazione ottenga la versione più recente del file CacheItem
.
Vedere anche
Topologie della cache
Clustering dinamico
Cache locale
Cliente di cache
Bridge per la replica WAN