2015-09-22 34 views
6

Recentemente ho lanciato la mia app per iPhone/Android con il backend AppEngine. Questa è la mia prima esperienza con l'uso di AppEngine in produzione.Google App-Engine memcached estremamente lento

Mentre ricevo più traffico, sto iniziando a riscontrare gravi problemi di latenza. Attualmente l'istanza di inattività minima è 1, max_pending_latency è 1 s.

Sì, ci sono camere per ottimizzazioni dalla mia parte, ma non capisco

  1. Perché la latenza non è correlato alla richiesta/sec, il traffico, MemoryUsage, memcacheUsage, qualsiasi cosa. Non capisco perché non ci sia stata latenza significativa il 21 settembre.

  2. Perché la chiamata alla memcached deve essere lenta come 500ms. (Di solito è 10 volte più veloce). Sto usando NDB e 1 GB memcached dedicato. L'aumento a 5 GB non ha avuto alcun effetto.

Questo è semplicemente il funzionamento di AppEngine? Mi piacerebbe avere la tua visione.

Grazie

LatencyRequests per secondExample RPC

+1

Si consiglia di chiedere questo nel canale #appengine su freenode o sulla mailing list. Il tuo grafico rpc mostra un insieme sincrono di transazioni ndb ma la parte memcache non dovrebbe impiegare così tanto tempo. –

+1

Per quanto ne so, è possibile vedere tempi come quelli in Memcache. I tempi di esecuzione non sono garantiti a meno che non si utilizzi Memcache dedicato (a pagamento). [fonte] (https://cloud.google.com/appengine/docs/python/memcache/#Python_Limits) – Nick

+0

@JoshTriiJohnston Grazie per aver suggerito un buon punto di contatto. Come hai sottolineato, le chiamate sincrone devono essere parallele o inviate alla coda delle attività. –

risposta

0

abbiamo sperimentato un tempo molto lungo in deserializzazione quando abbiamo memorizzato un sacco di entità sotto la stessa chiave memcache. Può richiedere molto tempo se si memorizza un grande array di alcune entità con molte proprietà strutturate.

Non è possibile memorizzare la dimensione dell'oggetto più di 1Mo nella stessa chiave di cache. È possibile utilizzare Titan for App Engine per dividere la chiave di cache in diverse altre chiavi di cache utilizzando sharded memcache. È trasparente

Spero che ti possa aiutare.