L'unico scopo di NCache è quello di fornire prestazioni ottimali per la vostra applicazione. E per raggiungere questi numeri di prestazioni, è necessario che l'ambiente di memorizzazione nella cache sia in grado di scalare in modo semplice ed economico.
As NCache è un datastore in memoria, la prima preoccupazione è la memoria limitata che gli è stata assegnata su una scatola fisica. Il secondo è il limite computazionale. Lo sappiamo tutti NCache, oltre a fornire operazioni CRUD di base, supporta anche molte funzionalità avanzate come Pub / Sub, Query, chiamate di recupero basate su criteri, ecc. E quando le richieste dei client su queste funzionalità diventano molte, aumenta la necessità di maggiore potenza di elaborazione. Ciò significa che prima o poi il tuo server cache raggiungerà il limite massimo di elaborazione. Quando questo accade, NCache non ti abbandona. Invece, c'è una soluzione a questo e io sono qui per spiegartelo.
NCache Dettagli Caching distribuito in .NET Altamente disponibile NCache
Scalabilità lineare in NCache
Quando il tuo ambiente raggiunge i limiti sopra menzionati, NCache ti consente di aggiungere un nuovo nodo server (o più nodi) al tuo cluster di cache. L'aggiunta di un nuovo server è fondamentalmente l'aggiunta di un nuovo nodo fisico al cluster NCache Web Manager or NCache Strumento PowerShell che migliora la memoria complessiva e fornisce un'altra risorsa per affrontare le richieste in arrivo in eccesso.
Ciò garantisce la scalabilità lineare. Come? Perché più nodi aggiungi, migliori saranno le prestazioni che otterrai. In NCache, l'aggiunta di nodi aggiuntivi al cluster non comporta alcun sovraccarico che causa un rallentamento del throughput coerente. E secondo i benchmark delle prestazioni recentemente eseguiti, NCache raggiunto 2 milioni di operazioni/secondo con 5 nodi server! Se questa non è una vittoria, allora non so cosa lo sia.
E la parte migliore di tutto questo arriva con il dinamico natura di NCache raggruppamento. Ciò significa che non è necessario arrestare processi, applicazioni o nodi esistenti semplicemente per aggiungere un nuovo nodo al cluster.
NCache Dettagli NCache Benchmark delle prestazioni NCache Benchmark delle prestazioni – Video
Scaviamo un po' più a fondo e illuminiamo cosa NCache funzionalità portano alla tabella della scalabilità.
Operazioni client per la scalabilità
NCache client ha questa funzionalità integrata che si connette automaticamente direttamente con ogni nodo del server. E NCache la mappa di distribuzione consente al client di sapere quale nodo ha i dati necessari. Quindi, l'operazione proveniente dal client non passa attraverso più hop e nodi. Invece, ci vuole un salto diretto al server che ha i dati specifici. Questa funzionalità semplice ma intelligente aiuta a ridimensionare il tuo ambiente.
Parallelismo per la scalabilità nelle operazioni
NCache supporta varie operazioni avanzate come Query, Operazioni in blocco, tage molte altre operazioni che devono essere eseguite su più nodi. Invece di inviare queste operazioni a ogni nodo in modo Round Robin, NCache permette di inviare ogni operazione a ogni nodo in parallelo.
Ad esempio, un client desidera eseguire query sui dati archiviati nella cache, quindi invia tale query a tutti i nodi del cluster. Ogni nodo eseguirà quella query localmente sul set di dati che ha archiviato e condividerà il risultato con il client. Il client unisce tutti i risultati provenienti da tutti i nodi del server e restituisce un unico risultato a tutte le applicazioni finali. Ogni nodo esegue la stessa query in parallelo che induce scalabilità e velocizza il sistema.
Pipelining per operazioni di ridimensionamento
NCache usa pipelining per creare blocchi di operazioni che devono essere inviati su una rete in un'unica chiamata TCP. Questa tecnica riduce il sovraccarico dovuto all'invio di più richieste una per una e all'attesa del loro riconoscimento.
Facciamo un esempio qui. Di 'che il NCache il client sta inviando 100 operazioni al server, il che in genere significa che il client eseguirà 100 operazioni di I/O. Per il successo di queste operazioni, ogni transazione dall'utente alla modalità kernel consumerà molta potenza della CPU. Un consumo eccessivo di CPU è costoso e ridurrà le prestazioni della mia applicazione.
Qui, ciò che fa il pipelining lato client è combinare tutte le operazioni che vanno a un server e inviare quel blocco in una chiamata I/O dedicata. Il pipelining lato server garantisce che il server riceva più chiamate I/O in una semplice chiamata. Anche le risposte che i server inviano vengono ricevute insieme. Non solo questo, ma il server cerca anche di generare il massimo delle risposte a quelle operazioni in entrata in una volta sola.
Pertanto, le 100 operazioni inviate al server in chiamate dedicate vengono ricevute dal server in una chiamata. E i risultati delle operazioni che ha ottenuto, vengono inviati in una chiamata dal server. Questa tecnica aiuta a scalare enormemente il sistema.
NCache Dettagli Operazioni lato client Pipeline NCache
Replica in background scalabile in Partition-Replica
Qualunque operazione di aggiornamento eseguita dal client su un nodo server deve essere replicata per la tolleranza agli errori e l'elevata disponibilità nel server di replica. NCache il server esegue questa replica in background senza alcun coinvolgimento del client. Oltre a essere un processo in background, questa replica viene eseguita in blocco per risparmiare sui costi massimi. Questo processo induce scalabilità poiché tutte le operazioni vengono ridimensionate tramite la replica in background e rende anche la cache altamente disponibile. Win-win.
Memorizzazione nella cache write-behind per la scalabilità
Se il client vuole scrivere dati nel database, la stessa richiesta inviata al server scriverà quei dati nella cache e nel database.
Un'implementazione asincrona di questa funzionalità è Scrivi dietro che consente al tuo server di accedere al database senza alcun ritardo computazionale. In questo modo il database e la cache rimangono sincronizzati mantenendo le stesse prestazioni che volevi da una cache in memoria.
Se l' NCache client invia al server della cache una richiesta con la funzione Write-behind abilitata, il server scrive i dati nella cache, restituisce il controllo al client e utilizza un sistema di batch in background per assicurarsi che anche i dati vengano archiviati nel database. Questo meccanismo è ciò che rende la tua applicazione scalabile.
Scalabilità tramite Object Pooling nella gestione della memoria
In ambiente .NET, quando si attiva il Garbage Collector (GC) automatico, tutte le attività in corso nell'applicazione vengono interrotte, il che crea pause nel calcolo dei dati in memoria. Queste pause causano un grande impatto sulle prestazioni dell'applicazione. Più oggetti crei, più il GC entrerà in azione e maggiore sarà questo successo.
Per evitare queste lunghe pause GC, NCache essendo una cache .NET nativa utilizza la tecnica Object Pooling come propria gestione della memoria. In questo meccanismo, NCache il server raggruppa gli oggetti e li riutilizza invece di crearne di nuovi, il che si traduce in una minore necessità di invocare GC. Minore è questa esigenza, maggiori saranno le prestazioni che otterrai dalla tua applicazione, quindi maggiore scalabilità.
NCache Dettagli Operazioni lato server Pipeline NCache
Cache client per indurre la scalabilità
Per quanto riguarda la scalabilità, Cache cliente si rivela una delle caratteristiche più importanti di NCache.
La cache del client archivia i dati utilizzati più di frequente della cache in cluster sulla stessa macchina su cui è in esecuzione l'applicazione. L'utilizzo di Client Cache tra l'applicazione e la cache in cluster fornisce una risorsa cache locale che risiede vicino all'applicazione. Questa cache conterrà la maggior parte delle richieste di lettura dell'applicazione, il che si traduce inevitabilmente in una riduzione dei costi di I/O. Quindi, non solo ottieni un rapido accesso ai dati aggiornati, ma anche la tua applicazione aumenta.
Questo grafico di scalabilità può essere ulteriormente ottimizzato se si passa dalla cache del client OutProc alla cache del client InProc riducendo i costi di accesso al nodo locale.
Scalabilità conclusiva in NCache
Mentre ottieni il meglio dalla tua applicazione, puoi incontrare due grandi battute d'arresto. O il carico di calcolo sulla tua cache aumenta o raggiungi i limiti impostati di archiviazione dei dati, entrambi i quali possono essere notevolmente migliorati ridimensionando NCache. Hai il pieno controllo NCache che è ricco di funzionalità pronte a portare la scalabilità nel tuo ambiente. Allora, cosa stai aspettando? Ottieni NCaching!
NCache Dettagli Scaricare NCache Confronto edizione