Topologie di memorizzazione nella cache per scalabilità lineare

NCache fornisce una varietà di topologie di memorizzazione nella cache per consentire la scalabilità lineare mantenendo la coerenza e l'affidabilità dei dati. L'obiettivo è soddisfare le esigenze delle applicazioni eseguite con cache a due server molto piccole e cluster di cache molto grandi costituiti da decine o addirittura centinaia di server cache. Una topologia di memorizzazione nella cache è essenzialmente una strategia di archiviazione dei dati, replica dei dati e connessioni client in una cache in cluster che si estende su più server di cache.

Di seguito sono riportate le principali topologie di memorizzazione nella cache NCache fornisce:

  1. Cache partizionata
  2. Cache di replica partizione
  3. Cache replicata
  4. cache specchiata (2 nodi attivi/passivi)
  5. Cache cliente (InProc Speed; Local Cache connesso a Clustered Cache)

Dati di riferimento e dati transazionali

I dati di riferimento sono dati che non cambiano molto frequentemente e li metti nella cache per raggiungerli più e più volte e aggiornarli occasionalmente. I dati transazionali, d'altra parte, sono dati che cambiano molto frequentemente e puoi aggiornarli con la stessa frequenza con cui li leggi.

La memorizzazione nella cache di un catalogo prodotti in cui i prezzi non cambiano molto frequentemente sono dati di riferimento. D'altra parte, l'ASP.NET Core L'archiviazione delle sessioni è considerata un uso transazionale perché una sessione viene letta e aggiornata una volta su ogni richiesta Web che può verificarsi ogni pochi secondi.

All'inizio, una cache era considerata valida principalmente per i dati di riferimento perché i dati che cambiavano frequentemente diventavano obsoleti e non sincronizzati con i dati più recenti nel database. Ma, NCache ora fornisce funzionalità molto potenti che consentono alla cache di mantenere sincronizzati i dati memorizzati nella cache con il database.

Tutte le topologie di memorizzazione nella cache sono utili per i dati di riferimento, ma solo alcune topologie di memorizzazione nella cache sono particolarmente migliori per i dati transazionali. Devi determinare quante letture e quante scritture eseguirai per capire quale topologia è la migliore per te. Inoltre, alcune topologie di memorizzazione nella cache non sono molto scalabili specialmente per gli aggiornamenti, quindi tienilo a mente.

Di seguito è riportato un elenco di topologie di memorizzazione nella cache insieme al loro impatto sulle letture rispetto alle scritture.

  1. Cache partizionata (nessuna replica): Molto Buone. Superveloce sia in lettura che in scrittura e scala anche linearmente aggiungendo server. La topologia più veloce ma non replica i dati, quindi si verifica una perdita di dati se un server cache si interrompe.
  2. Cache di replica partizione (Più popolare): Molto Buone. Superveloce sia in lettura che in scrittura e scala anche linearmente aggiungendo server. Seconda topologia più veloce, ma replica i dati per affidabilità senza compromettere la scalabilità lineare. La migliore combinazione di velocità/scalabilità e affidabilità dei dati.
  3. Cache replicata: Molto buono per ambienti più piccoli. Superveloce e linearmente scalabile per le letture. Moderatamente veloce per le scritture in un cluster a 2 nodi, ma non scala quando si aggiungono più server perché le scritture vengono eseguite in modo sincrono su tutti i server cache.
  4. cache specchiata: Molto buono per ambienti più piccoli. Superveloce per le letture. Le scritture sono più veloci della cache replicata per 2 nodi attivi/passivi. Ma non scala oltre questo.
  5. Cache cliente: Molto buono per un uso intensivo di lettura con tutte le topologie di memorizzazione nella cache. Ti consente di raggiungere la velocità di InProc con la cache distribuita.

Cache partizionata

La cache partizionata è la topologia di memorizzazione nella cache più veloce e scalabile sia in lettura che in scrittura. È destinato a cluster di cache più grandi e le prestazioni di lettura e scrittura rimangono molto buone anche con carichi di picco. Tuttavia, non replica i dati e quindi si verifica una perdita di dati se un server cache si interrompe.

Cache partizionata

Ecco alcune caratteristiche della cache partizionata.

  1. Partizioni dinamiche: la cache è divisa in partizioni in fase di esecuzione con ogni server cache che ha una partizione. Ci sono un totale di 1000 bucket per cache in cluster distribuiti uniformemente su tutte le partizioni. L'aggiunta/rimozione del server cache comporta la creazione/cancellazione di partizioni in fase di esecuzione. L'assegnazione dei bucket alle partizioni non cambia quando i dati vengono aggiunti alla cache. Al contrario, cambia solo quando le partizioni vengono aggiunte o eliminate o quando si verifica il bilanciamento dei dati (vedi sotto).
  2. Mappa di distribuzione: il cluster di cache crea una mappa di distribuzione che contiene informazioni su quali bucket esistono in quali partizioni. La mappa di distribuzione viene aggiornata ogni volta che vengono aggiunte o eliminate partizioni o quando si verifica il bilanciamento dei dati (vedere di seguito). La mappa di distribuzione viene propagata a tutti i server e client. I client lo usano per capire con quale server cache parlare per leggere o scrivere un determinato elemento memorizzato nella cache.
  3. Bilanciamento dinamico dei dati: poiché tutti i bucket sono in realtà bucket HashMap in cui i dati vengono archiviati in base a un algoritmo di Hashing sulle chiavi, è possibile che alcuni bucket possano contenere più dati di altri a seconda delle chiavi utilizzate. Se questo squilibrio ha superato una soglia configurabile, NCache sposta automaticamente i secchi per bilanciare questo carico.
  4. I client si connettono a TUTTE le partizioni: i client si connettono a tutti i server cache in modo che possano leggere o scrivere direttamente i dati in una richiesta dal server. Se la connessione di un client con un server cache si interrompe, chiede a uno degli altri server di leggere o scrivere un elemento memorizzato nella cache che esiste sul server a cui non può accedere. E quel server aiuta il cliente a raggiungere questo obiettivo.

Cache di replica partizione

NOTA: tutto ciò che è menzionato in Partitioned Cache è vero anche qui.

Proprio come Cache partizionata, Partition-Replica Cache è una topologia di memorizzazione nella cache estremamente veloce e linearmente scalabile sia in lettura che in scrittura. È destinato a cluster di cache più grandi e le prestazioni di lettura e scrittura rimangono molto buone anche con carichi di picco. Inoltre, Partition-Replica Cache replica anche i dati e quindi non si verifica alcuna perdita di dati anche se un server cache si interrompe.

Partition-Replica Cache è il nostro topologia di memorizzazione nella cache più popolare perché ti offre il meglio di entrambi i mondi, prestazioni/scalabilità lineare e affidabilità dei dati.

Cache di replica partizione

Di seguito sono riportate alcune delle caratteristiche di Partition-Replica Cache.

  1. Partizioni dinamiche: stesso Cache partizionata.
  2. Repliche dinamiche: quando le partizioni vengono create o eliminate in fase di esecuzione, vengono create o eliminate anche le relative repliche. Le repliche si trovano sempre su un server cache diverso ed è presente una sola replica per una partizione.
  3. Replica asincrona: per impostazione predefinita, la replica dalla partizione alla replica è asincrona. Ciò significa che il client può aggiungere, aggiornare o eliminare qualsiasi dato nella partizione e tutte queste operazioni vengono messe in coda. E poi sono stati replicati in BULK sulla replica. Ciò migliora le prestazioni ma presenta il leggero rischio di perdita di dati nel caso in cui una partizione vada e non tutti gli aggiornamenti siano stati replicati sulla replica. Ma, nella maggior parte delle situazioni, va benissimo.
  4. Replica di sincronizzazione: se i tuoi dati sono molto sensibili (es. dati finanziari) e non puoi permetterti di avere dati obsoleti, puoi scegliere l'opzione "Sync Replication" nella configurazione. Se selezionata, tutte le operazioni di scrittura vengono eseguite in modo sincrono sia sulla partizione che sulla replica finché non vengono considerate completate. In questo modo, se l'operazione non riesce sulla replica, fallisce anche sulla partizione. Inoltre, puoi essere certo che tutti i dati nella cache (sia nella partizione che nella replica) siano sempre coerenti. Tuttavia, ciò ha implicazioni sulle prestazioni in quanto è più lento della replica asincrona.
  5. Mappa di distribuzione: stesso Cache partizionata.
  6. Bilanciamento dinamico dei dati (partizioni e repliche): stesso Cache partizionata. Tuttavia, in Partition-Replica Cache, il bilanciamento dei dati si verifica anche nelle repliche quando le partizioni sono i dati bilanciati.
  7. I client si connettono a TUTTE le partizioni: stesso Cache partizionata. Inoltre, in Partition-Replica Cache, i client parlano solo alle partizioni e non alle loro repliche. Questo perché le repliche sono passive e solo le partizioni comunicano con le loro repliche durante la replica dei dati su di esse.

Cache replicata

La cache replicata fornisce affidabilità dei dati tramite la replica su due o più server cache. È molto veloce e scalabile per le letture. Tuttavia, non si adatta alle scritture perché sono sincrone con tutti i server nel cluster. Per un cluster a 2 nodi, le scritture sono più veloci del database ma non altrettanto veloci Cache di replica partizione. Per 3 o più cluster di server, le prestazioni di scrittura si riducono e alla fine diventano poco attraenti.

Cache replicata

Di seguito sono riportate alcune delle caratteristiche della cache replicata.

  1. Nodi dinamici replicati: è possibile aggiungere o rimuovere server di cache in fase di esecuzione in una cache esistente senza interrompere la cache o l'applicazione. Il server appena aggiunto esegue una copia (Replica) dell'intera cache su se stesso. Inoltre, il server rimosso aggiorna l'appartenenza al cluster e tutti i suoi client si spostano su altri server.
  2. Intera cache su ogni nodo: l'intera cache viene copiata su ogni server del cluster.
  3. Le letture sono scalabili: le letture sono super veloci e scalabili quando si aggiungono più server. Tuttavia, l'aggiunta di più server non aumenta la dimensione della cache poiché il server appena aggiunto è solo un'altra copia dell'intera cache.
  4. Le scritture sono sincronizzateus: le scritture sono molto veloci per un cluster a 2 nodi e più veloci del tuo database. Tuttavia, le scritture sono sincrone, il che significa che ogni operazione di scrittura non viene completata finché tutti i server cache non vengono aggiornati in modo sincrono. Per questo motivo, le scritture non sono veloci come altre topologie e le loro prestazioni peggiorano quando si aumenta la dimensione del cluster oltre i 2 nodi.
  5. Il client si connette a un solo server: ogni client cache si connette solo a un server nel cluster in base a un algoritmo di bilanciamento del carico determinato dai server cache. Se questo server cache si interrompe, il client si connette al server successivo nell'elenco. È anche possibile specificare manualmente il server a cui connettersi nel file di configurazione della cache se non si desidera utilizzare il bilanciamento del carico.

cache specchiata

Mirrored Cache è un cluster di cache attivo/passivo a 2 nodi destinato agli ambienti più piccoli. Fornisce affidabilità dei dati tramite replica/mirroring asincrono da Active Node a Passive Node. È molto veloce sia in lettura che in scrittura (infatti le scritture sono più veloci di Cache replicata) ma non scala oltre questo cluster attivo/passivo a 2 nodi.

cache specchiata

Di seguito sono elencate alcune delle caratteristiche di Mirrored Cache.

  1. 1 Server Attivo e 1 Passivo: Mirrored Cache ha solo due server. Uno è attivo e l'altro è passivo. Entrambi hanno una copia dell'intera cache. Se l'Active Server si interrompe, il Passive Server diventa automaticamente Attivo. E, se l'Active Server precedentemente disattivato viene ripristinato, viene trattato come un server passivo a meno che non si modifichi questa designazione tramite gli strumenti di amministrazione in fase di esecuzione.
  2. Connessioni client con supporto per il failover: ogni client cache si connette solo all'Active Server nel cluster per eseguire le proprie operazioni di lettura e scrittura. Se questo Server Attivo va in crash, tutti i client si connettono automaticamente al Server Passivo che è ormai diventato Attivo. Questo supporto per il failover garantisce che Mirrored Cache sia sempre attivo e funzionante anche se un server si interrompe.
  3. Mirroring asincrono: tutte le scritture eseguite sull'Active Server vengono replicate/ replicate in modo asincrono sul Passive Server. Ciò garantisce che il server passivo sia sempre sincronizzato con i dati più recenti nel caso in cui il server attivo si interrompa e il server passivo debba diventare attivo. Il mirroring asincrono significa anche prestazioni più veloci perché più scritture vengono eseguite come operazione BULK sul server passivo.

Cache client (velocità InProc)

Client Cache è locale al tuo server web/app e si trova molto vicino alla tua applicazione e ti consente di memorizzare nella cache i dati che stai leggendo dalla cache distribuita (qualsiasi topologia di memorizzazione nella cache). Puoi vederlo come una "cache sopra una cache" e migliora notevolmente le prestazioni e la scalabilità delle tue applicazioni. Se utilizzi Client Cache in modalità InProc, puoi raggiungere la velocità di InProc.

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.

Cache cliente

Di seguito sono elencate alcune delle caratteristiche di Mirrored Cache.

  1. Buono per casi di lettura intensiva: Client Cache è utile solo se si dispone di un caso d'uso ad alta intensità di lettura in cui il numero di letture è molte volte superiore alle scritture. Se il numero di scritture è lo stesso delle letture, la cache del client è effettivamente più lenta perché una scrittura implica l'aggiornamento in due posizioni.
  2. Velocità più elevata come una cache locale (InProc / OutProc): esiste una cache client all'interno del processo dell'applicazione (modalità InProc) o in locale sul server Web/app (modalità OutProc). In entrambi i casi, migliora notevolmente le prestazioni dell'applicazione rispetto al semplice recupero di questi dati dalla cache in cluster. La modalità InProc ti consente di memorizzare nella cache gli oggetti sul tuo "heap dell'applicazione" che ti dà "InProc Speed" che non può essere eguagliato da nessuna cache distribuita.
  3. Non una cache autonoma: La cache del client può essere una cache locale ma non è una cache autonoma. Al contrario, si mantiene sincronizzato con la cache in cluster. Ciò significa che se un altro client aggiorna i dati nella cache del cluster che hai nella cache del client, la cache del cluster notifica alla cache del client di aggiornarsi con la copia più recente di tali dati. E questo viene fatto in modo asincrono ma immediatamente.
  4. Sincronizzazione ottimista/pessimista: Per impostazione predefinita, Client Cache utilizza la sincronizzazione ottimistica, il che significa che NCache client presuppone che tutti i dati presenti nella cache del client siano la copia più recente. Se la cache del client non contiene dati, il client lo recupera dalla cache del cluster, lo inserisce nella cache del client e lo restituisce all'applicazione client. Sincronizzazione pessimistica significa che il client cache controlla prima la cache raggruppata se ha una versione più recente di un elemento memorizzato nella cache. In tal caso, il client lo recupera, lo inserisce nella cache del client e lo restituisce all'applicazione client. In caso contrario, restituisce tutto ciò che è nella cache del client.
  5. Plug-in senza alcuna modifica del codice: la cosa migliore di Client Cache è che non comporta alcuna modifica del codice nell'applicazione. Invece, lo colleghi semplicemente tramite una modifica alla configurazione. E, NCache L'API client dietro le quinte sa cosa fare per utilizzare la Client Cache.

Cosa fare dopo?

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