View a markdown version of this page

Amazon ElastiCache (Valkey) per applicazioni di e-commerce - Amazon ElastiCache

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à.

Amazon ElastiCache (Valkey) per applicazioni di e-commerce

Un'applicazione di e-commerce trae vantaggio da un livello di cache in memoria tra i server delle applicazioni e il database. Amazon che ElastiCache esegue Valkey fornisce una latenza di lettura inferiore al millisecondo per i dati a cui si accede di frequente (voci del catalogo di prodotti, conteggi dell'inventario, risultati di ricerca e sessioni utente), riducendo il carico del database e migliorando i tempi di risposta durante i picchi di traffico.

Configurazione del cluster

Scegli un tipo di cluster in base al volume di dati, ai requisiti di throughput e alle preferenze operative.

Confronto dei tipi di cluster per l'e-commerce
Tipo di cluster Ideale per Dimensionamento Considerazioni

Serverless

Modelli di traffico variabili, nuove applicazioni, team senza esperienza nelle operazioni di cache

Automatico: scala l'elaborazione e la memoria in base alla richiesta

Non è necessaria la pianificazione della capacità. Modello a costo variabile: si paga in base ai consumi.

Node-based (modalità cluster abilitata)

Carichi di lavoro prevedibili ad alta produttività, necessità di un controllo preciso sullo sharding e sui tipi di nodi

Scalabilità manuale o automatica di frammenti e repliche

Richiede la pianificazione della capacità. Modello a costo fisso: si paga per la capacità assegnata indipendentemente dall'utilizzo. Supporta fino a 500 nodi per cluster.

Per la maggior parte delle applicazioni di e-commerce in fase di avvio, Serverless offre il percorso di produzione più semplice. Esegui la migrazione verso cluster basati su nodi quando hai linee di base di traffico prevedibili e hai bisogno di un maggiore controllo sulla topologia del cluster, sui tipi di nodi e sul comportamento di scalabilità.

Impostazioni del cluster consigliate
Impostazione Valore Rationale

Motore

Ultima versione stabile

Usa l'ultima versione stabile di Valkey disponibile in ElastiCache. Pienamente compatibile con i comandi Redis OSS. Fornisce miglioramenti delle prestazioni rispetto alle versioni precedenti.

Multi-AZ

Abilitato

Failover automatico su una replica in un'altra zona di disponibilità in caso di errore del nodo primario. Necessario per i carichi di lavoro di e-commerce di produzione.

In-transit crittografia

Abilitato (TLS)

Crittografa i dati tra l'applicazione e il cluster di cache. Necessario per i carichi di lavoro che gestiscono le sessioni utente o qualsiasi PII.

At-rest crittografia

Abilitato

Crittografa i dati su disco (backup, swap). Necessario per i carichi di lavoro di conformità.

Gruppo di sottoreti

Sottoreti private isolate (più di 2 AZ)

Nessun accesso a Internet. Raggiungibile solo dal gruppo di sicurezza dell'applicazione.

Design chiave per i dati di prodotto

Progetta le chiavi della cache in modo che siano prevedibili, debuggabili e con ambito per evitare collisioni tra tipi di dati.

Convenzioni di denominazione chiave
Tipo di dati Schema chiave Value type (Tipo di valore) Esempio

Dettagli del prodotto

product:{id}

Hash

product:12345{nome, prezzo, descrizione, imageURL}

Conteggio dell'inventario

inventory:{sku}

Stringa (numero intero)

inventory:SKU-A100→ 42

Sessione utente

session:{sessionId}

Hash

session:abc123{ID utente, carrello, lastAccess}

Risultati della ricerca

search:{queryHash}

Stringa (JSON)

search:sha256(q=shoes&page=1)→ [ID prodotto]

Elenco delle categorie

category:{slug}:page:{n}

List

category:electronics:page:1→ [ID di prodotto]

Principali best practice di progettazione:

  • Usa i due punti come separatori per la leggibilità e il supporto degli strumenti.

  • Mantieni i tasti corti: i tasti lunghi consumano memoria e larghezza di banda di rete.

  • Includi il prefisso del tipo di dati per evitare collisioni tra prodotti, sessioni e altre entità che potrebbero condividere ID numerici.

  • Usa gli hash per oggetti multicampo (prodotti, sessioni) per consentire letture e aggiornamenti parziali senza recuperare l'intero valore.

Strategia TTL per tipo di dati

Imposta i valori TTL (time-to-live) in base alla frequenza con cui i dati vengono modificati e a quanto possono essere obsoleti senza influire sull'esperienza del cliente.

TTL consigliati per i dati di e-commerce
Tipo di dati TTL Trigger di invalidazione Rationale

Dettagli del prodotto

5 minuti

Il venditore modifica il prodotto

Le descrizioni e le immagini dei prodotti cambiano raramente. Abbastanza breve da consentire di rilevare le modifiche in modo ragionevolmente rapido senza invalidare esplicitamente ogni modifica.

Conteggio dell'inventario

30 secondi

Acquisto o rifornimento

L'inventario obsoleto può causare vendite eccessive. Un TTL molto breve garantisce che i conteggi si aggiornino frequentemente. Invalidazione esplicita all'acquisto per una precisione immediata.

Risultati della ricerca

60 secondi

Nessuna (solo) TTL-based

Gli indici di ricerca si aggiornano periodicamente. La memorizzazione nella cache riduce il carico sui motori di ricerca. I nuovi prodotti vengono visualizzati entro 60 secondi senza invalidazione esplicita.

Sessione utente

24 ore

Disconnessione o scadenza della sessione

Le sessioni persistono durante la navigazione. Aggiorna il TTL a ogni accesso per mantenere attive le sessioni attive. Elimina esplicitamente al momento del logout.

Elenco delle categorie

2 minuti

Prodotto added/removed appartenente alla categoria

Le pagine delle categorie sono ad alto traffico. La memorizzazione breve nella cache riduce notevolmente le interrogazioni al database durante la navigazione.

Cache-aside modello

Il modello cache-aside (chiamato anche lazy loading) è la strategia di caching più comune per le applicazioni di e-commerce. L'applicazione controlla innanzitutto la cache e interroga il database solo in caso di errore di cache.

Percorso di lettura (pseudocodice)

FUNCTION getProduct(productId): cacheKey = "product:" + productId // Step 1: Check the cache cachedValue = cache.GET(cacheKey) IF cachedValue exists: RETURN deserialize(cachedValue) // Cache hit — sub-millisecond // Step 2: Cache miss — query database product = database.query("SELECT * FROM products WHERE id = ?", productId) IF product not found: RETURN null // Step 3: Write to cache with TTL cache.SET(cacheKey, serialize(product), EXPIRE = 300) // 5 minutes RETURN product
Percorso di scrittura (pseudocodice)

FUNCTION updateProduct(productId, updatedFields): // Step 1: Update the database (source of truth) database.update("UPDATE products SET ... WHERE id = ?", updatedFields, productId) // Step 2: Invalidate the cache (don't update it) cache.DELETE("product:" + productId) // Next read will trigger a cache miss and repopulate from database
Importante

Invalida sempre (elimina) anziché aggiornare la cache durante le scritture. In questo modo si riduce la finestra in cui una lettura obsoleta sovrascrive un valore più recente. La lettura successiva ripopola la cache del database, che è la fonte della verità. Nota che esiste ancora una condizione di gara ristretta: se una lettura simultanea recupera i dati dal database prima che avvenga la scrittura, può ripopolare la cache con dati non aggiornati dopo che la chiave della cache è già stata eliminata. Per la maggior parte dei carichi di lavoro di e-commerce, il TTL breve lo rende accettabile. Se hai bisogno di una coerenza rigorosa, utilizza un blocco distribuito o scritture con versione.

Gestione degli errori della cache

FUNCTION getProductWithFallback(productId): TRY: RETURN getProduct(productId) // Normal cache-aside path CATCH cacheConnectionError: // Cache is unavailable — fall back to database directly RETURN database.query("SELECT * FROM products WHERE id = ?", productId) // Log the error, trigger an alarm, but don't fail the request

Progetta l'applicazione in modo che un errore nella cache riduca le prestazioni (risposte più lente) ma non comprometta la funzionalità. Il database funge da riserva.

Strategie di invalidazione della cache

L'invalidazione garantisce che gli utenti vedano i dati correnti dopo gli aggiornamenti. Scegli una strategia in base alla rapidità con cui le modifiche devono essere visibili.

Approcci di invalidazione
Approccio Come funziona Quando utilizzarlo

Elimina in fase di scrittura

L'applicazione elimina la chiave della cache immediatamente dopo l'aggiornamento del database.

La maggior parte delle scritture (modifiche ai prodotti, modifiche all'inventario). Semplice, affidabile, evita dati obsoleti.

Solo scadenza TTL

Non invalidare: lascia che il TTL scada naturalmente.

Dati per i quali è accettabile una breve obsolescenza (risultati di ricerca, elenchi di categorie, analisi).

Event-driven invalidazione

Un processo in background ascolta gli eventi di modifica del database e invalida le chiavi interessate.

Sistemi in cui il percorso di scrittura e la cache si trovano in servizi diversi o quando una singola modifica del database influisce su molte chiavi della cache.

Per le applicazioni del marketplace che utilizzano Amazon anche CloudFront come livello CDN, coordina l'invalidazione su entrambi i livelli: elimina la ElastiCache chiave e invia un messaggio di invalidazione della cache (o invalidazione del tag CloudFront della cache) in modo che gli utenti possano vedere i contenuti aggiornati sia a livello di applicazione che a livello perimetrale.

Gestione delle connessioni

  • Usa il pool di connessioni: la creazione di una nuova connessione TLS per ogni operazione di cache aggiunge latenza. Mantieni un pool di connessioni permanenti e riutilizzale tra le richieste.

  • Imposta i timeout di connessione: utilizza un timeout di connessione breve (1—2 secondi) e un timeout di comando più breve (100—500 ms). Se la cache non risponde rapidamente, ricorri al database anziché bloccare la richiesta.

  • Gestisci il failover con garbo: quando si verifica il Multi-AZ failover, le connessioni al vecchio sistema primario si interrompono. Il pool di connessioni dovrebbe rilevare le connessioni interrotte e riconnettersi automaticamente. La maggior parte delle librerie client gestisce questo problema, ma verifica il comportamento in fase di test.

  • Utilizza l'endpoint di configurazione del cluster: per la modalità cluster abilitata, connettiti all'endpoint di configurazione anziché agli endpoint dei singoli nodi. L'endpoint di configurazione indirizza automaticamente le richieste allo shard corretto.

Metriche chiave da monitorare

CloudWatch Allarmi Amazon consigliati per la cache dell'e-commerce
Metrica Threshold Periodo Azione

CacheHitRate

< 80%

5 minuti

Indagate: un tasso di successo basso significa che i TTL potrebbero essere troppo corti, i tasti sono progettati male o il set funzionante supera la memoria.

EngineCPUUtilization

> 70%

5 minuti

Scala verso l'alto (nodi più grandi) o verso l'alto (più frammenti). Una CPU elevata indica che la cache sta elaborando più comandi di quanti ne possa gestire in modo efficiente.

DatabaseMemoryUsagePercentage

> 80%

5 minuti

Rischio di sfratti. Aumenta la memoria (scalabilità) o riduci i dati archiviati (TTL più brevi, meno tipi di dati memorizzati nella cache).

Espulsioni

> 0 sostenuto

1 minuto

La cache è piena e rimuove i dati per fare spazio. Aumenta gli errori nella cache. Aumenta la memoria o riduci i TTL sui dati meno critici.

CurrConnections

> 80% della dimensione del tuo pool di clienti

5 minuti

Il pool di connessioni è prossimo all'esaurimento. Aumenta le dimensioni del pool, riduci i tempi di attesa della connessione o analizza le perdite di connessione nel codice dell'applicazione. Basate la soglia sulla dimensione del pool configurato dell'applicazione, non sul numero massimo del server (65.000).

Domande frequenti

Quando devo usare Serverless e Node-Based?

Usa Serverless quando il traffico è imprevedibile (nuovo marketplace, picchi stagionali), quando vuoi evitare la pianificazione della capacità o quando il tuo team non ha esperienza nelle operazioni di caching. Passa alla modalità node-based quando i tuoi modelli di traffico sono stabili, hai bisogno di un controllo preciso sullo sharding o se la velocità effettiva sostenuta rende il sistema basato sui nodi più conveniente.

Devo usare Valkey o Redis OSS?

Usa Valkey per nuove implementazioni. Valkey è il motore predefinito per i nuovi ElastiCache cluster, è completamente compatibile con i comandi e le strutture dati Redis OSS e riceve uno sviluppo continuo. I cluster Redis OSS esistenti continuano a funzionare: esegui la migrazione a Valkey quando preferisci utilizzando l'aggiornamento del motore sul posto.

Cosa succede quando la cache non è disponibile?

L'applicazione deve considerare la cache come un'ottimizzazione, non come una dipendenza. Se la cache non è disponibile, tornate a interrogare direttamente il database. I tempi di risposta saranno più elevati, ma l'applicazione rimarrà funzionante. Multi-AZ Se abilitato, l'indisponibilità completa della cache è rara: il failover su una replica in genere viene completato in meno di 30 secondi.

Come posso stimare la memoria di cui ho bisogno?

Calcola: (numero di elementi univoci da memorizzare nella cache) × (dimensione media per elemento) × (fattore di sovraccarico di 1,2 per le strutture dati Valkey). Il sovraccarico varia in base alla dimensione dell'oggetto e al tipo di dati: gli oggetti più piccoli hanno un sovraccarico proporzionalmente più elevato. Ad esempio, 100.000 prodotti da 2 KB ciascuno con un overhead di 1,2 volte superiore = circa 240 MB. Aggiungi i dati della sessione, i risultati della ricerca e il conteggio dell'inventario. Inizia con l'headroom (utilizza il 60% della memoria disponibile come obiettivo) e monitora la DatabaseMemoryUsagePercentage metrica per correggerla.