API Memcache per servizi legacy in bundle

Questa pagina fornisce una panoramica del servizio memcache di App Engine. Elevata le applicazioni web scalabili per le prestazioni spesso utilizzano un insieme di dati in memoria distribuiti Cache di fronte o al posto di una solida archiviazione permanente per alcune attività. Per app Engine include un servizio di cache di memoria per questo scopo. Per scoprire come per configurare, monitorare e utilizzare il servizio memcache. Vedi 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 molti effettuano la stessa query con gli stessi parametri e apportano modifiche non devono apparire subito sul sito web, l'applicazione può memorizzare nella cache i risultati in memcache. Le richieste successive possono controllare memcache, ed eseguire la query sul datastore solo se i risultati sono assenti o scaduti. Dati di sessione, preferenze utente e altri dati restituiti dalle query per le pagine web sono buoni candidati per la memorizzazione nella cache.

Memcache può essere utile per altri valori temporanei. Tuttavia, se consideriamo se memorizzare un valore esclusivamente in memcache e non è supportato da altri di archiviazione permanente, devi assicurarti che l'applicazione si comporti in modo accettabile quando è improvvisamente disponibile. I valori possono scadere dalla cache in qualsiasi momento e può essere scaduta prima della scadenza impostata per il valore. Per Ad esempio, se l'assenza improvvisa di dati della sessione di un utente causa la potrebbero non funzionare correttamente, è probabile che i dati vengano archiviati nel datastore in aggiunta nella memoria cache.

Livelli di servizio

App Engine supporta due livelli del servizio memcache:

  • Memcache condivisa è l'impostazione predefinita gratuita per le applicazioni App Engine. it fornisce capacità di cache secondo il criterio del "best effort" ed è soggetta alle modifiche generali la domanda di tutte le applicazioni App Engine che usano il servizio memcache condiviso.

  • Memcache dedicata fornisce una capacità della cache fissa assegnata in modo esclusivo alla tua applicazione. È fatturato in base alle dimensioni della cache in GB/ora e richiede l'attivazione della fatturazione. Avere il controllo sulle dimensioni della cache consente all'app di funziona in modo più prevedibile e con meno letture da più costosi durevoli archiviazione.

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

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

Funzionalità 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 Nessuno Nessuno

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 MB (10^6) byte).
  • Una chiave non può superare i 250 byte. Nel runtime Python, le chiavi sono stringhe superiori a 250 byte. (Altri runtime si comportano differently.)
  • Il "multi" le operazioni batch possono avere un numero qualsiasi di elementi. La dimensione totale della chiamata e la dimensione totale dei dati recuperati non deve superare i 32 megabyte.
  • 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. In base alle criterio di rimozione, le chiavi vengono rimosse quando si riempie di cache. Modifiche nella configurazione della cache o nel data center eventi di manutenzione possono anche svuotare parzialmente o interamente la cache.
    • Memcache potrebbe essere temporaneamente indisponibilità. Operazioni memcache potrebbero non riuscire per vari motivi, tra cui modifiche alla configurazione della cache degli eventi di manutenzione dei data center. Le applicazioni devono essere progettate per rilevare le operazioni non riuscite senza esporre questi errori agli utenti finali. Questo queste indicazioni si applicano in particolare alle operazioni di impostazione.
  • Se possibile, utilizza la funzionalità di raggruppamento in batch dell'API.

    • In questo modo puoi migliorare le prestazioni e l'efficienza della tua app, soprattutto per i piccoli oggetti.
  • Distribuisci il carico sullo spazio delle chiavi memcache.

    • Avere un singolo o un piccolo insieme di elementi memcache rappresenta un Una quantità sproporzionata di traffico ostacolerà la scalabilità della tua app. Queste linee guida si applicano sia alle operazioni al secondo sia alla larghezza di banda. Puoi spesso possono mitigare questo problema eseguendo lo sharding esplicito dei dati.

      Ad esempio, puoi suddividere un contatore aggiornato di frequente tra più i tasti, rileggendoli e poi sommando solo quando serve un totale. Allo stesso modo, puoi suddividere un dato di 500.000 che deve essere letto ogni richiesta HTTP su più chiavi e rileggerele utilizzando un'unica chiamata API batch. Ancora meglio sarebbe memorizzare nella cache il valore dell'istanza memory.) Per memcache dedicata, la frequenza di accesso di picco su una singola chiave Deve essere di 1-2 ordini di grandezza inferiori alla classificazione per GB.

  • Conserva le tue chiavi per recuperare i valori dalla cache.

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

Modalità di scadenza dei dati memorizzati nella cache

Memcache contiene coppie chiave/valore. Le coppie in memoria cambiano in qualsiasi momento vengono scritti e recuperati dalla cache.

Per impostazione predefinita, i valori archiviati in memcache vengono conservati il più a lungo possibile. Valori può essere rimosso dalla cache quando un nuovo valore viene aggiunto alla cache di memoria cache insufficiente. Quando i valori vengono rimossi a causa della pressione di memoria, i valori utilizzati meno di recente vengono eliminati per primi.

L'app può fornire una scadenza quando un valore viene archiviato, come numero di secondi in relazione a quando viene aggiunto il valore o come valore Unix assoluto dell'epoca nel futuro (numero di secondi a partire dalla mezzanotte del 1° gennaio, 1970). Il valore viene rimosso non più tardi di questo momento, anche se può essere rimosso in precedenza per altri motivi. Aumentare il valore archiviato per un valore esistente non aggiorna la data di scadenza.

In rari casi, i valori possono scomparire dalla cache anche prima del per motivi diversi dalla pressione della memoria. Sebbene memcache sia resiliente a errori del server, i valori memcache non vengono salvati su disco, pertanto un errore del servizio i valori potrebbero non essere più disponibili.

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

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

Statistiche cache

Operazioni al secondo per dimensione articolo

Una memcache dedicata è valutata in operazioni al secondo per GB, Per operazione si intende l'accesso a un singolo elemento della cache, ad esempio get, set o delete. La frequenza operativa varia in base alle dimensioni dell'articolo in base alla tabella seguente. Superato le classificazioni dell'API potrebbero causare un aumento della latenza o degli errori dell'API.

Le tabelle seguenti forniscono il numero massimo di eventi esclusivi supportati get-hit o set operazioni per GB di cache. Tieni presente che un'operazione get-hit è una chiamata get che rileva un valore archiviato con la chiave specificata, e restituisce quel valore.

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

Teoricamente, un'app configurata per più GB di cache può ottenere un'aggregazione operativa calcolata moltiplicando il numero di GB per la tariffa per GB. Ad esempio, un'app configurata per 5 GB di cache potrebbe raggiungere 50.000 memcache operazioni/sec su elementi da 1 kB. Per raggiungere questo livello è necessaria una buona distribuzione di carico attraverso lo spazio delle chiavi memcache.

Per ogni pattern IO, i limiti elencati sopra si riferiscono alle letture o scrive. Per letture e scritture simultanee, i limiti si trovano su un foglio su larga scala. Maggiore è il numero di letture eseguite, minore è il numero di scritture eseguito e viceversa. Ciascuno dei seguenti è un esempio di IOP limiti per letture e scritture simultanee di valori di 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 si accede e l'operazione che vuoi eseguire sull'elemento. Puoi associare approssimativamente un valore sui costi delle operazioni e stimare la capacità di traffico che puoi aspettarti una memcache dedicata utilizzando un'unità denominata Memcache Compute Unit (MCU). MCU è definita tale che puoi aspettarti 10.000 MCU al secondo per GB di memcache. La console Google Cloud mostra la quantità di MCU attualmente utilizzata dalla tua app.

Tieni presente che l'MCU è una stima statistica approssimativa e non è lineare. unità. Ogni operazione di cache che legge o scrive un valore ha una MCU corrispondente a un costo che dipende dalla dimensione del valore. L'MCU di un set dipende 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 con la chiave specificata.

Confronta e imposta

Confronta e imposta è una funzione che consente di ricevere più richieste e gestiti contemporaneamente per aggiornare atomicamente il valore della stessa chiave memcache, evitando le gare.

Componenti logici chiave di confronto e impostazione

Se stai aggiornando il valore di una chiave memcache che potrebbe ricevere altri richieste di scrittura simultanee, devi utilizzare l'oggetto Client memcache, che memorizza alcune informazioni sullo stato utilizzate dai metodi che supportano il confronto e l'impostazione. Non puoi usare le funzioni memcache get() o set(), perché sono stateless. Il corso Client in sé non è thread-safe, quindi non è consigliabile utilizzare lo stesso oggetto Client in più di una .

Quando recuperi le chiavi, devi utilizzare i metodi Client memcache che supportano confronta e imposta: gets() o get_multi() con il parametro for_cas impostato su True.

Quando aggiorni una chiave, devi usare i metodi Client memcache che supportano confronta e imposta: cas() o cas_multi().

L'altro componente logico chiave è il servizio memcache di App Engine e la sua per confrontare e impostare. Il servizio memcache di App Engine a livello atomico. Vale a dire, quando due richieste in parallelo (per lo stesso ID app) usano memcache, vanno alla stessa istanza di servizio memcache il servizio memcache ha un blocco interno sufficiente per consentire alle richieste in parallelo le stesse chiavi siano serializzate correttamente. In particolare, ciò significa che due cas() per la stessa chiave non vengono effettivamente eseguite in parallelo: il servizio la prima richiesta pervenuta fino al completamento (ovvero l'aggiornamento del valore timestamp) prima di iniziare a gestire la seconda richiesta.

Per scoprire come utilizzare compare e impostare in Python, leggi Gestione delle scritture simultanee.

Passaggi successivi