Il percorso verso la memorizzazione nella cache intelligente

Perché non creare la cache da soli?

Molti sviluppatori di applicazioni non memorizzano nella cache alcun dato o al massimo memorizzano nella cache alcuni dei dati statici di sola lettura. Alcuni sviluppatori fanno un ulteriore passo avanti e memorizzano nella cache i dati in "Stato sessione" tra le richieste degli utenti. Tuttavia, tutti questi approcci perdono il vantaggio fondamentale della memorizzazione nella cache, ovvero la memorizzazione nella cache e la condivisione dei dati con tutti gli utenti dell'applicazione. E questo tipo di memorizzazione nella cache deve essere molto intelligente in modo da evitare problemi di integrità dei dati nella cache (attraverso dati obsoleti).

Se sei seriamente intenzionato a migliorare le prestazioni della tua applicazione attraverso la memorizzazione nella cache intelligente, hai l'ovvia domanda tra acquisto e creazione. Ci sono una serie di svantaggi nella creazione della propria soluzione di memorizzazione nella cache.

Innanzitutto, stai sottraendo importanti risorse di sviluppo al tuo obiettivo aziendale di sviluppare la tua applicazione e inserendole nello sviluppo di un'infrastruttura che potresti facilmente acquistare. Il secondo è che lo sviluppo di una soluzione di memorizzazione nella cache corretta e intelligente richiede molto impegno e potresti non avere la giusta esperienza nel tuo team per progettare e sviluppare una cache ad alte prestazioni in grado di gestire i complessi scenari di concorrenza e sincronizzazione. E, infine, anche se avessi l'esperienza, ti stai impegnando molto in qualcosa che ti sta distogliendo dall'attenzione al tuo business.

Anche se alla fine decidi di acquistare una soluzione di memorizzazione nella cache commerciale, devi assicurarti che fornisca tutte le funzionalità di memorizzazione nella cache e cluster richieste dalla tua applicazione. Anche se stai iniziando oggi con una configurazione a server singolo, vorresti una soluzione di memorizzazione nella cache che possa crescere con la tua applicazione in un ambiente distribuito e in cluster.

Aumenta le prestazioni dell'applicazione

Il vantaggio più ovvio dell'utilizzo della memorizzazione nella cache è un notevole miglioramento delle prestazioni dell'applicazione. La memorizzazione nella cache è il processo di archiviazione dei dati (sia di sola lettura che transazionali) vicino all'applicazione utilizzata di frequente. In genere questi dati vengono archiviati in memoria (come oggetti) poiché il recupero dei dati dalla memoria è molto più efficiente rispetto al recupero da altre posizioni, come un database.

Aumenta la scalabilità del server database senza costosi aggiornamenti hardware

La maggior parte delle applicazioni esegue molte più operazioni di lettura rispetto alle operazioni di scrittura (in genere rapporto 70:30 o 80:20). Inoltre, la memorizzazione nella cache dei dati nel livello del server delle applicazioni consente alle applicazioni di ridurre i viaggi del database per le operazioni di lettura. Ciò riduce drasticamente il carico sul server del database.

Ci sono due evidenti vantaggi da questo. Il primo è che il server del database ora esegue le operazioni di scrittura molto più velocemente. E, in secondo luogo, il server del database può ora gestire un numero molto maggiore di client senza richiedere costosi aggiornamenti hardware. I server di database sono in genere l'hardware più costoso nella maggior parte delle distribuzioni di applicazioni a più livelli e pertanto i risparmi sull'aggiornamento dell'hardware qui sono generalmente molto elevati.

Memorizza nella cache i dati transazionali

Tradizionalmente, le applicazioni Web o i servizi Web non memorizzano nella cache alcun dato o utilizzano meccanismi primitivi come "Stato sessione" per memorizzare nella cache i dati di sola lettura. Ci sono due problemi con questo approccio. Il primo è che la maggior parte dei dati utilizzati da un'applicazione mission-critical non è di sola lettura ma transazionale e pertanto la memorizzazione nella cache dei dati di sola lettura non è sufficiente per migliorare le prestazioni dell'applicazione. In secondo luogo, anche questi dati di sola lettura non vengono condivisi tra gli utenti, che in un'applicazione reale si incontrano in migliaia o decine di migliaia. Di conseguenza, la maggior parte di queste applicazioni finisce per accedere al server del database per la maggior parte dei dati di cui ha bisogno e quindi i problemi di prestazioni.

D'altro canto, NCache consente alle applicazioni di conservare nella cache sia i dati statici che quelli transazionali. Inoltre, questi dati memorizzati nella cache sono disponibili per tutti gli utenti nel cluster di server. NCache quindi fornisce un numero di meccanismi per garantire che i dati memorizzati nella cache non diventino obsoleti e vengano sempre aggiornati ogni volta che l'applicazione aggiorna i dati nel database. NCache consente inoltre di gestire situazioni in cui i dati devono essere aggiornati dall'esterno dell'applicazione. Ciò si ottiene attraverso un concetto di "dipendenze".

Gestisci le relazioni

La maggior parte delle applicazioni della vita reale tratta dati complessi che non sono solo transazionali ma contengono relazioni a più livelli. Ciò significa che se memorizzi nella cache dei dati, devi anche gestirne le relazioni. La cache deve conoscere queste relazioni in modo da gestirle in caso di operazioni di caricamento, inserimento, aggiornamento o eliminazione.

NCache gestisce le relazioni tra gli oggetti in modo che le modifiche a un oggetto possano attivare modifiche o invalidazioni a tutti gli oggetti correlati. Allo stesso modo, anche se la tua applicazione carica prima un oggetto e lo inserisce nella cache e successivamente carica i suoi oggetti correlati, può dirlo NCache su queste relazioni e NCache può gestirli.

Non solo puoi gestire le relazioni tra oggetti memorizzati nella cache, ma anche tra oggetti memorizzati nella cache e risorse esterne. NCache fornisce dipendenze basate su chiavi e file per questo scopo. Inoltre, queste dipendenze possono essere richiamate in remoto utilizzando .NET Remoting. Questo aiuta a mantenere la cache sempre aggiornata.

Sincronizzare le modifiche ai dati nei cluster

Molte applicazioni Web e servizi Web vengono eseguiti in configurazioni di cluster di server/server farm per gestire un numero elevato di utenti. In questi ambienti, se la tua cache non è in cluster, eventuali aggiornamenti da un server non saranno disponibili per altri server. Di conseguenza, i dati memorizzati nella cache diventeranno incoerenti e obsoleti, causando problemi di integrità dei dati.

NCache è una potente cache in cluster che sincronizza tutte le modifiche ai dati in tutto il cluster. Fornisce un ricco set di topologie di clustering per aiutarti a soddisfare i tuoi requisiti specifici. Puoi scegliere tra le topologie Cache con mirroring, Cache replicata, Cache partizionata e Cache con replica partizionata nel tuo cluster. Questi sono discussi in modo più dettagliato in NCache Topologie di clustering.

NCache garantisce che gli aggiornamenti simultanei alla cache vengano gestiti in modo serializzato in modo da prevenire problemi di integrità dei dati. Inoltre, garantisce che tutte le modifiche alla cache siano immediatamente disponibili per tutti i nodi del cluster. Ciò consente alla tua applicazione di trattare NCache come una cache logica in tutto il cluster.

© Copyright Alachisoft 2002 - . Tutti i diritti riservati. NCache è un marchio registrato di Diyatech Corp.