API Memcache per servizi legacy in bundle

Questa pagina fornisce una panoramica del servizio memcache di App Engine. Le applicazioni web scalabili ad alte prestazioni spesso utilizzano una cache di dati distribuita in memoria davanti o al posto di una solida archiviazione permanente per alcune attività. App Engine include a questo scopo un servizio di cache di memoria. Per informazioni su come configurare, monitorare e utilizzare il servizio memcache, consulta Utilizzo di Memcache.

Quando utilizzare una cache in memoria

Un utilizzo di una cache di memoria è quello di velocizzare le query più comuni sul datastore. Se molte richieste eseguono la stessa query con gli stessi parametri e le modifiche ai risultati non devono essere visualizzate subito sul sito web, l'applicazione può memorizzare i risultati nella cache. Le richieste successive possono controllare la memcache ed eseguire la query sul datastore solo se i risultati sono assenti o scaduti. I dati di sessione, le preferenze utente e altri dati restituiti dalle query per le pagine web sono ottimi candidati per la memorizzazione nella cache.

Memcache può essere utile per altri valori temporanei. Tuttavia, se stai valutando se archiviare un valore esclusivamente in memcache e non è supportato da un'altra archiviazione permanente, assicurati che l'applicazione si comporti in modo accettabile quando il valore non è improvvisamente disponibile. I valori possono scadere dalla memcache in qualsiasi momento e possono essere scaduti prima della scadenza impostata per il valore. Ad esempio, se l'improvvisa assenza dei dati di sessione di un utente causa un malfunzionamento della sessione, probabilmente questi dati dovrebbero essere archiviati nel datastore oltre che nella memcache.

Livelli di servizio

App Engine supporta due livelli del servizio memcache:

  • Memcache condivisa è l'impostazione predefinita gratuita per le applicazioni App Engine. Fornisce capacità di cache secondo il criterio del "best effort" ed è soggetta alla domanda complessiva di tutte le applicazioni App Engine che utilizzano il servizio memcache condiviso.

  • Memcache dedicata fornisce una capacità della cache fissa assegnata esclusivamente alla tua applicazione. Viene fatturato in base alle dimensioni della cache in GB/ora e richiede l'abilitazione della fatturazione. Avere il controllo sulle dimensioni della cache significa che l'app può essere più prevedibile e con meno letture da archiviazione durevole più costosa.

Entrambi i livelli di servizio memcache utilizzano la stessa API. Per configurare il servizio memcache per la tua applicazione, vedi Utilizzo di Memcache.

La tabella seguente riassume le differenze tra le due classi del servizio memcache:

Selezione delle Memcache dedicata Memcache condivisa
Prezzo 0,06 $ per GB all'ora Gratis
Capacità
us-central
Da 1 a 100 GB
asia-northeast1, europe-west, europe-west3 e us-east1:
Da 1 a 20 GB
altre regioni:
Da 1 a 2 GB
Capacità non garantita
Prestazioni Fino a 10.000 letture o 5.000 scritture (esclusive) al secondo per GB (elementi < 1 kB). Per ulteriori dettagli, consulta Statistiche della cache. Non garantito
Negozio durevole No No
SLA Nessuna Nessuna

La fatturazione con memcache dedicata viene addebitata per incrementi di 15 minuti. Se la valuta utilizzata per il pagamento è diversa da USD, si applicano i prezzi elencati nella tua valuta negli SKU di Cloud Platform.

Se l'app richiede maggiore capacità di Memcache, contatta il nostro team di vendita.

Limiti

All'utilizzo del servizio memcache si applicano i seguenti limiti:

  • La dimensione massima di un valore di dati memorizzati nella cache è 1 MiB (2^20 byte) meno la dimensione della chiave meno un overhead dipendente dall'implementazione, che è di circa 73 byte.
  • Una chiave non può superare i 250 byte.
  • Le operazioni batch "multi" possono avere un numero di elementi illimitato. La dimensione totale della chiamata e quella dei dati recuperati non devono superare i 32 MB.
  • Una chiave memcache non può contenere un byte nullo.

Consigli e best practice

Quando utilizzi Memcache, ti consigliamo di progettare le tue applicazioni per:

  • Gestisci il caso in cui un valore memorizzato nella cache non sia sempre disponibile.

    • Memcache non è uno spazio di archiviazione durevole. Secondo i criteri di rimozione, le chiavi vengono rimosse quando la cache si riempie. Eventuali modifiche alla configurazione della cache o agli eventi di manutenzione del data center possono svuotare tutta o parte della cache.
    • Memcache potrebbe essere temporaneamente indisponibilità. Le operazioni memcache possono non riuscire per vari motivi, tra cui modifiche alla configurazione della cache o eventi di manutenzione del data center. Le applicazioni devono essere progettate in modo da rilevare le operazioni non riuscite senza esporre tali errori agli utenti finali. Queste linee guida si applicano in particolare alle operazioni di impostazione.
  • Se possibile, utilizza la funzionalità di raggruppamento in batch dell'API.

    • In questo modo migliori le prestazioni e l'efficienza della tua app, soprattutto per gli articoli di piccole dimensioni.
  • Distribuisci il carico sullo spazio delle chiavi memcache.

    • Avere un solo o piccolo insieme di elementi memcache rappresenta una quantità di traffico sproporzionata ostacola la scalabilità della tua app. Queste linee guida si applicano sia alle operazioni al secondo sia alla larghezza di banda. Spesso puoi risolvere questo problema eseguendo lo sharding dei dati.

      Ad esempio, puoi suddividere un contatore aggiornato di frequente tra più chiavi, rileggendole e sommando solo quando hai bisogno di un totale. Allo stesso modo, puoi suddividere una quantità di dati di 500.000 che deve essere letta per ogni richiesta HTTP su più chiavi e rileggere queste informazioni utilizzando una singola chiamata API batch. Ancora meglio sarebbe memorizzare nella cache il valore in memoria dell'istanza. Per memcache dedicata, la frequenza di accesso di picco su una singola chiave deve essere di 1-2 ordini di grandezza inferiore alla valutazione per GB.

  • Conserva le tue chiavi per recuperare valori dalla cache.

    • Memcache non fornisce un metodo per elencare le chiavi. A causa della natura della cache, non è possibile elencare le chiavi senza interrompere la cache. Inoltre, alcuni linguaggi, come Python, chiavi con hash lunghe e le chiavi originali, sono noti solo all'applicazione.

Modalità di scadenza dei dati memorizzati nella cache

Memcache contiene coppie chiave/valore. Le coppie in memoria cambiano in qualsiasi momento man mano che gli elementi vengono scritti e recuperati dalla cache.

Per impostazione predefinita, i valori archiviati in memcache vengono conservati il più a lungo possibile. I valori possono essere eliminati dalla cache quando un nuovo valore viene aggiunto alla cache e la cache è in esaurimento della memoria. Quando i valori vengono rimossi a causa della pressione della memoria, i valori utilizzati meno di recente vengono rimossi per primi.

Quando viene archiviato un valore, l'app può fornire una scadenza come numero di secondi rispetto a quando viene aggiunto o come ora assoluta di un'epoca Unix nel futuro (un numero di secondi a partire dalla mezzanotte del 1° gennaio 1970). Il valore viene rimosso non oltre questa data, ma può essere rimosso prima per altri motivi. L'aumento del valore archiviato per una chiave esistente non aggiorna la relativa data di scadenza.

In rari casi, i valori possono anche scomparire dalla cache prima della scadenza per motivi diversi dalla pressione della memoria. Sebbene memcache sia resiliente agli errori del server, i valori memcache non vengono salvati su disco, per cui un errore del servizio può rendere non disponibili i valori.

In generale, un'applicazione non deve aspettarsi che un valore memorizzato nella cache sia sempre disponibile.

Puoi cancellare l'intera cache di un'applicazione tramite l'API o nella sezione memcache della console Google Cloud.

Statistiche cache

Operazioni al secondo per dimensione articolo

Una memcache dedicata è valutata in operazioni al secondo per GB, dove un'operazione è definita come accesso a un singolo elemento della cache, ad esempio get, set o delete. La frequenza operativa varia approssimativamente in base alla dimensione dell'articolo in base alla tabella seguente. Il superamento di queste classificazioni potrebbe causare un aumento della latenza dell'API o degli errori.

Le tabelle seguenti forniscono il numero massimo di operazioni get-hit o set sostenute ed esclusive per ogni GB di cache. Tieni presente che un'operazione get-hit è una chiamata get che trova un valore archiviato con la chiave specificata e restituisce questo valore.

Dimensioni articolo (kB) Massimo get-hit operazioni/s Massimo set operazioni/s
≤1 10.000 5000
100 2000 1000
512 500 250

Un'app configurata per più GB di cache può teoricamente ottenere una tariffa operativa aggregata calcolata come il numero di GB moltiplicato per la tariffa per GB. Ad esempio, un'app configurata per 5 GB di cache potrebbe raggiungere 50.000 operazioni memcache al secondo su elementi da 1 kB. Il raggiungimento di questo livello richiede una buona distribuzione del carico nello spazio delle chiavi memcache.

Per ogni pattern IO, i limiti elencati sopra si riferiscono alle letture o scritture. Per letture e scritture simultanee, i limiti sono su una scala variabile. Maggiore è il numero di letture eseguite, minore è il numero di scritture e viceversa. Ciascuno dei seguenti è un esempio di limiti di IOP per letture e scritture simultanee di valori da 1 kB per 1 GB di cache:

Lettura IOP Scrittura IOP
10000 0
8000 1000
5000 2500
1000 4500
0 5000

Unità di calcolo memcache (MCU)

La velocità effettiva di Memcache può variare a seconda delle dimensioni dell'elemento a cui accedi e dell'operazione che vuoi eseguire sull'elemento. Puoi associare approssimativamente un costo alle operazioni e stimare la capacità di traffico che puoi aspettarti da una memcache dedicata utilizzando un'unità denominata Memcache Compute Unit (MCU). La MCU è definita in modo da prevedere 10.000 MCU al secondo per GB di cache memoria dedicata. La console Google Cloud mostra la quantità di MCU attualmente utilizzata dalla tua app.

Tieni presente che MCU è una stima statistica approssimativa e non è un'unità lineare. Ogni operazione di cache che legge o scrive un valore ha un costo MCU corrispondente che dipende dalle dimensioni del valore. L'MCU di un set dipende dalla dimensione del valore: è il doppio del costo di un'operazione get-hit riuscita.

Dimensione elemento valore (kB) Costo di MCU per get-hit Costo di MCU per set
≤1 1.0 2.0
2 1.3 2,6
10 1,7 3.4
100 5,0 10,0
512 20,0 40,0
1024 50,0 100,0

Le operazioni che non leggono o scrivono un valore hanno un costo di MCU fisso:

Operazione MCU
get-miss 1.0
delete 2.0
increment 2.0
flush 100,0
stats 100,0

Tieni presente che un'operazione get-miss è un get che rileva che non è presente alcun valore archiviato con la chiave specificata.

Passaggi successivi