2010-04-15 17 views
8

Memcache in generale e su AppEngine in particolare non è affidabile, nel senso che i miei dati possono essere cancellati dalla cache per qualsiasi motivo in qualsiasi momento. Tuttavia, in alcuni casi potrebbero verificarsi casi in cui un piccolo rischio potrebbe valere la prestazione aggiuntiva che potrebbe essere fornita da memcache, ad esempio l'aggiornamento di alcuni dati in memcache che vengono salvati periodicamente in un'altra memoria più affidabile. Ci sono numeri da Google che potrebbero darmi un'indicazione sulla probabilità effettiva che una voce di memcache venga persa dalla cache prima della sua scadenza, dato che mantengo le mie quote?Con quale frequenza Memcache su Google AppEngine perde i dati?

Ci sono motivi diversi dall'errore hardware e operazioni amministrative come le macchine nei data center da aggiornare/spostati/sostituiti che causerebbero la rimozione prematura delle voci da memcache?

risposta

5

Memcache, come qualsiasi cache, dovrebbe essere usato come ... a cache. Se non è possibile trovare qualcosa nella cache, ci deve essere una strategia per trovarlo nella memoria permanente.

Oltre ai motivi che hai menzionato, Memcache e altri approcci di memorizzazione nella cache hanno dei limiti alla quantità di elementi che terranno (scartando di solito quelli meno utilizzati di recente quando la cache è piena) e spesso anche altre politiche di invalidazione della cache (ad es. sciacquare tutto inutilizzato per un'ora).

Se non si configura e si gestisce la cache da soli, non si ha alcuna garanzia di quando e come gli elementi potrebbero essere rimossi dalla cache intenzionalmente/per progettazione.

+4

Mi rendo conto che si sta cercando di aiutarmi a evitare me stesso la zappa sui piedi da (ab) utilizzando Memcache come qualcosa di diverso da una cache. Tuttavia, quello che mi piacerebbe davvero vedere sono alcune statistiche su quanto spesso perderei i dati nella pratica, per prendere una decisione informata sull'opportunità o meno di tenere il rischio di mantenere alcuni dati nella cache solo per qualche periodo di tempo. tempo. – SoftMemes

+0

@Freed: le statistiche che potresti raccogliere oggi potrebbero non essere valide domani. Inoltre, sii cauto con le statistiche che raccogli perché la dimensione del tuo campione sarà piccola e di qualità sconosciuta. –

+2

... che è esattamente il motivo per cui sono alla ricerca di dati più affidabili rispetto alle semplici misurazioni. Quello che mi piacerebbe vedere è qualcosa sulla linea delle statistiche che Google già fornisce per la latenza e il throughput. – SoftMemes

2

Qualsiasi risposta concreta a questa domanda è soggetta a modifiche al 100%.

Detto questo, ho usato memcache sotto carichi leggeri per accumulare dati per 15 minuti circa prima di scriverlo sul Datastore. Questo era per i dati analitici totalmente non critici. Non fare affidamento su di esso.

2

Non è che i dati possano essere persi, ma che se vengono persi, possono essere recuperati facilmente.

Ad esempio, utilizzarlo per memorizzare i dati dal datastore è l'ideale, in quanto se un dato non è nella cache, può essere facilmente recuperato.
Se si memorizzano dati come un contatore di visite nella cache, non possono essere ripristinati se la cache viene cancellata, quindi si perderanno i dati.

Se si è preoccupati del carico per un lavoro comune, come impostare un lavoro per aggiornare il contatore in un secondo momento, utilizzando la coda dei task?

0

Ho implementato un contatore condiviso -memcache che raccoglie ora al DB e può identificare la perdita di cache (registrarlo). Finora vedo costantemente < perdite di cache del 10% totali ogni giorno dopo al massimo 1 ora (in media 30 minuti) di cache con circa 60 contatori attivi. Le contro perdite sembrano essere singoli segnalini casuali. Sospetto, che i contatori che vengono incrementati una sola volta (si verifica abbastanza spesso nel mio caso) potrebbero avere una maggiore probabilità di essere eliminati.

La mia app utilizza < 1 MB di memcache totale nel sistema di memcache condiviso. Sfortunatamente l'utilizzo di memcache dedicati con un minimo di 1 GB e costi sostanziali all'anno è fuori questione. Stats counter used.

Ho creato un contatore dello stackdriver che registra le perdite di memcache per un contatore che viene salvato ogni ora. Il grafico mostra i salvataggi riusciti in rosso e memcache ha esito negativo in blu. Il contatore salva ogni ora intera e conta alcuni conteggi nell'ora.

Memcache loss (blue) vs. success (red)

Problemi correlati