Memorizzazione nella cache in un'app nativa del cloud

Suggerimento

Questo contenuto è un estratto dell'eBook, Progettazione di applicazioni .NET native del cloud per Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

I vantaggi della memorizzazione nella cache sono ben noti. La tecnica si basa sulla copia temporanea dei dati a cui si accede di frequente da un archivio dati back-end in uno spazio di archiviazione veloce che si trova più vicino all'applicazione. La memorizzazione nella cache viene spesso implementata dove...

  • I dati rimangono relativamente statici.
  • L'accesso ai dati è lento, soprattutto rispetto alla velocità della cache.
  • I dati sono soggetti a livelli elevati di contesa.

Perché?

Come illustrato nelle indicazioni sulla memorizzazione nella cache Microsoft, la memorizzazione nella cache può aumentare le prestazioni, la scalabilità e la disponibilità di singoli microservizi e del sistema nel suo complesso. Riduce la latenza e la contesa nella gestione di grandi volumi di richieste simultanee verso un archivio dati. Man mano che il volume di dati e il numero di utenti aumentano, aumentano i vantaggi della memorizzazione nella cache.

La memorizzazione nella cache è più efficace quando un client legge ripetutamente dati non modificabili o che cambiano raramente. Ne sono alcuni esempi le informazioni di riferimento, come le informazioni sui prodotti e sui prezzi, o le risorse statiche condivise, costose da costruire.

Anche se i microservizi devono essere senza stato, una cache distribuita può supportare l'accesso simultaneo ai dati dello Stato sessione quando è assolutamente necessario.

Valuta la memorizzazione nella cache anche per evitare calcoli ripetitivi. Se un'operazione trasforma dati o esegue un calcolo complesso, memorizza nella cache il risultato per le richieste successive.

Architettura della memorizzazione nella cache

Le applicazioni native del cloud in genere implementano un'architettura di memorizzazione nella cache distribuita. La cache è ospitata come servizio di backup basato sul cloud, separato dai microservizi. La figura 5-15 mostra l'architettura.

Caching in a cloud native app

Figura 5-15: Memorizzazione nella cache in un'app nativa del cloud

Nella figura precedente, nota come la cache sia indipendente e condivisa dai microservizi. In questo scenario, la cache viene richiamata dal gateway API. Come illustrato nel capitolo 4, il gateway funge da front-end per tutte le richieste in ingresso. La cache distribuita aumenta la velocità di risposta del sistema restituendo i dati memorizzati nella cache quando possibile. Inoltre, la separazione della cache dai servizi consente alla cache di aumentare orizzontalmente o verticalmente le prestazioni in modo indipendente per soddisfare un aumento delle richieste di traffico.

La figura precedente presenta un modello di memorizzazione nella cache comune noto come modello cache-aside. Per una richiesta in ingresso, è prima necessario eseguire una query sulla cache (passaggio 1) per ottenere una risposta. Se trovata, i dati vengono restituiti immediatamente. Se i dati non sono presenti nella cache, condizione nota come mancati riscontri nella cache, vengono recuperati da un database locale di un servizio downstream (passaggio 2). Vengono quindi scritti nella cache per le richieste future (passaggio 3) e restituiti al chiamante. È necessario prestare attenzione alla rimozione periodica dei dati memorizzati nella cache in modo che il sistema rimanga tempestivo e coerente.

Man mano che una cache condivisa aumenta, può rivelarsi utile partizionare i dati tra più nodi. In questo modo è possibile ridurre al minimo i conflitti e migliorare la scalabilità. Molti servizi di caching supportano la possibilità di aggiungere e rimuovere dinamicamente nodi e ribilanciare i dati tra le partizioni. Questo approccio comporta in genere il clustering. Il clustering espone una raccolta di nodi federati come cache singola senza interruzioni. Internamente, tuttavia, i dati vengono distribuiti tra i nodi seguendo una strategia di distribuzione predefinita che bilancia il carico in modo uniforme.

Cache Redis di Azure

Cache di Azure per Redis è un servizio di memorizzazione nella cache e broker di messaggistica sicuro, completamente gestito da Microsoft. Usata come un'offerta PaaS (Platform as a Service, piattaforma distribuita come servizio), offre una velocità effettiva elevata e un accesso a bassa latenza ai dati. Il servizio è accessibile a qualsiasi applicazione all'interno o all'esterno di Azure.

Il servizio cache di Azure per Redis gestisce l'accesso ai server Redis open source ospitati nei data center di Azure. Il servizio funge da facciata che fornisce gestione, controllo di accesso e sicurezza. Il servizio supporta in modo nativo un vasto insieme di strutture di dati, tra cui stringhe, hash, elenchi e set. Se l'applicazione usa già Redis, funziona così com’è con la cache di Azure per Redis.

La cache di Azure per Redis è più di un semplice server di cache. Può supportare diversi scenari per migliorare un'architettura di microservizi:

  • Un archivio dati all’interno della memoria
  • Un database non relazionale distribuito
  • Broker di messaggi
  • Un server di configurazione o individuazione

Per scenari avanzati, una copia dei dati memorizzati nella cache può essere conservata su disco. Se un evento irreversibile disabilita sia la cache primaria che quella di replica, la cache viene ricostruita dallo snapshot più recente.

La cache di Azure per Redis è disponibile in diverse configurazioni predefinite e piani tariffari. Il livello Premium offre molte funzionalità a livello aziendale, come il clustering, la persistenza dei dati, la replica geografica e l'isolamento della rete virtuale.