2015-08-28 13 views
18

Ho la funzione lambda e la tabella db dinamo nella stessa regione (us-east-1). In funzione lambda eseguo molto semplice query:Richieste molto lente a dynamodb dalla funzione lambda

params = 
    TableName: 'users' 
    Item: 
    email: 
     S: event.body.email 
    ConditionExpression: 'attribute_not_exists (email)' 
dynamodb.putItem(params, context.done) 

Ci sono solo poche righe nella tabella DynamoDB, non c'è tasto cancelletto su e-mail e throughtputs di lettura/scrittura sono impostate per 5/5.

La funzione Lambda è in ~ 4 secondi ... È molto lenta. Sto facendo qualcosa di sbagliato?


ho provato la mia funzione con differenti impostazioni di memoria per la funzione lambda (è stato impostato a 128 MB in precedenza):

  • 256mb => ~ 2000ms
  • 512MB => ~ 1000ms
  • 1024MB => ~ 500ms
  • 1536mb => ~ 300ms

Sembra quindi che il tempo di risposta dipenda da 1-1 sulla memoria (beh, in effetti, sulla capacità di calcolo quando AWS lo scala insieme alla memoria). Eppure è pazzesco perché per rendere molto semplice l'API REST devo impostare la memoria 1536mb per renderla "reattiva" mentre il mio programma usa 17mb!


Hmm d'altra parte ho calcolato che costerà:

  • 8,32 $ per 1 milione 4000ms richieste utilizzando 128MB di memoria
  • 10.004 $ per 1 milione 300ms richieste utilizzando la memoria 1536mb

quindi non è così male immagino ...

+0

Sei sicuro che non stai facendo altro nella tua funzione Lambda? La semplice chiamata JS non dovrebbe richiedere molta memoria e non dovrebbe richiedere molto tempo. – Guy

+0

Solo per comparazione, che tipo di prestazioni ottieni se premi SimpleDB? –

risposta

2

Beh, il problema potrebbe un essere correlato alla disattivazione del contenitore su cui è in esecuzione la funzione Lambda. Si consiglia inoltre di ottimizzare l'inizializzazione degli oggetti in modo che non vengano reinizializzati ogni volta che viene chiamata la funzione.

Vedere l'articolo Container reuse in Lambda.

+0

Interessante. Ma quello che sto facendo richiede solo il modulo 'aws-sdk' e l'invio di richieste al database. Ho anche provato a fare molte richieste una dopo l'altra per garantire che il contenitore venga riutilizzato ... – user606521

+0

I ritardi che stai descrivendo sono molto grandi. Potrebbe anche essere la regione fortemente utilizzata di "noi-est-1". – kixorz

+0

Proverò a distribuire la funzione in altre regioni. – user606521

Problemi correlati