Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
PERF03-BP05 Implementare modelli di accesso ai dati che utilizzano la memorizzazione nella cache
Implementa modelli di accesso che possano trarre vantaggio dalla memorizzazione dei dati nella cache per il recupero rapido dei dati a cui si accede di frequente.
Anti-pattern comuni:
-
Memorizzare nella cache dati che cambiano in maniera frequente.
-
Fare affidamento sui dati memorizzati nella cache come se fossero archiviati in modo duraturo e sempre disponibili.
-
Non tenere conto della coerenza dei dati memorizzati nella cache.
-
Non monitorare l'efficienza dell'implementazione della cache.
Vantaggi dell'adozione di questa best practice: l'archiviazione dei dati in una cache può migliorare la latenza di lettura, il throughput, l'esperienza utente e l'efficienza complessiva, oltre a ridurre i costi.
Livello di rischio associato se questa best practice non fosse adottata: medio
Guida all'implementazione
Una cache è un componente software o hardware progettato per archiviare dati in modo che le richieste future degli stessi dati possano essere soddisfatte più velocemente o in modo più efficiente. I dati memorizzati in una cache possono essere ricostruiti in caso di perdita, ripetendo un calcolo precedente o recuperandolo da un altro datastore.
La memorizzazione dei dati nella cache può essere una delle strategie più efficaci per migliorare le prestazioni complessive delle applicazioni e ridurre il carico sulle origini dati primarie sottostanti. È possibile memorizzare i dati nella cache a più livelli dell'applicazione, ad esempio all'interno dell'applicazione che effettua chiamate remote, operazione nota come memorizzazione nella cache lato client, o mediante un servizio secondario veloce per l'archiviazione dei dati, operazione nota come memorizzazione nella cache remota.
Memorizzazione nella cache lato client
Con la memorizzazione nella cache lato client, ogni client (un'applicazione o un servizio che interroga il datastore di backend) può archiviare localmente i risultati delle proprie query uniche per un periodo di tempo specificato. Ciò può ridurre il numero di richieste a un datastore attraverso la rete perché viene controllata prima la cache del client locale. Se questa non contiene risultati, l'applicazione può interrogare il datastore e archiviare tali risultati localmente. Questo modello consente a ciascun client di archiviare i dati nella sede più vicina possibile (il client stesso), garantendo così la latenza più bassa possibile. I client possono inoltre continuare a eseguire query quando il datastore di backend non è disponibile, aumentando la disponibilità dell'intero sistema.
Uno svantaggio di questo approccio è che quando sono coinvolti più client, potrebbero archiviare localmente gli stessi dati memorizzati nella cache. Ciò si traduce in un utilizzo duplicato dell'archiviazione e nell'incoerenza dei dati tra questi client. Può accadere che un client memorizzi nella cache i risultati di una query e un minuto dopo un altro client esegua la stessa query ottenendo un risultato diverso.
Memorizzazione nella cache remota
Come soluzione al problema della duplicazione dei dati tra client, è possibile utilizzare un servizio esterno veloce o la memorizzazione nella cache remota per archiviare i dati sottoposti a query. Anziché controllare un datastore locale, ogni client controllerà la cache remota prima di interrogare il datastore di backend. Questa strategia consente di ottenere risposte più coerenti tra i client, una migliore efficienza dei dati archiviati e un volume maggiore di dati memorizzati nella cache, perché lo spazio di archiviazione si dimensiona in maniera indipendente dai client.
Lo svantaggio di una cache remota è che l'intero sistema può registrare una latenza più elevata, poiché è necessario un hop di rete aggiuntivo per controllare la cache remota. Per migliorare la latenza, è possibile utilizzare la memorizzazione nella cache lato client insieme alla memorizzazione nella cache remota, eseguendo così una memorizzazione nella cache su più livelli.
Passaggi dell'implementazione
-
Identifica i database APIs e i servizi di rete che potrebbero trarre vantaggio dalla memorizzazione nella cache. I servizi che hanno carichi di lavoro di lettura elevati, hanno un read-to-write rapporto elevato o sono costosi da scalare sono candidati alla memorizzazione nella cache.
-
Identifica il tipo di strategia di memorizzazione nella cache più adatto al tuo modello di accesso.
-
Attieniti alle best practice sulla memorizzazione nella cache
per il tuo archivio dati. -
Configura una strategia di invalidazione della cache, ad esempio a time-to-live (TTL), per tutti i dati che bilanci l'aggiornamento dei dati e riduca la pressione sul datastore di backend.
-
Abilita funzionalità quali tentativi di connessione automatici, backoff esponenziale, timeout lato client e pool di connessioni nel client, se disponibili, che possono migliorare prestazioni e affidabilità.
-
Monitora la percentuale di riscontri nella cache con un obiettivo dell'80% o superiore. Valori inferiori possono indicare una dimensione della cache insufficiente o un modello di accesso che non sfrutta la memorizzazione nella cache.
-
Implementa la replica dei dati per eliminare il carico delle letture per più istanze e migliorare prestazioni e disponibilità della lettura dei dati.
Risorse
Documenti correlati:
Video correlati:
-
Progetta per il successo con le ElastiCache best practice di Amazon
-
AWS re:Invent 2020 - Progetta per il successo con le best practice di Amazon ElastiCache
-
AWS re:Invent 2023 - [] LAUNCH Presentazione di Amazon Serverless ElastiCache
-
AWS re:Invent 2022 - 5 ottimi modi per reimmaginare il tuo livello di dati con Redis
-
AWS re:Invent 2021 - Approfondimento su Amazon ElastiCache (Redis) OSS
Esempi correlati: