2015-08-28 12 views
18

Aynı bölgede (us-east-1) lambda fonksiyonu ve dinamo db tablosu var.Lambda fonksiyonundan dinamodlara çok yavaş talepler

DynamoDB tabloda yalnızca birkaç satır var
params = 
    TableName: 'users' 
    Item: 
    email: 
     S: event.body.email 
    ConditionExpression: 'attribute_not_exists (email)' 
dynamodb.putItem(params, context.done) 

, 5/5 ayarlanır e-posta ve Okuma/Yazma throughtputs üzerinde Hash Anahtar vardır: lambda görevde ben çok basit bir sorgu gerçekleştirmek.

Lambda işlevi ~ 4 saniye içinde söner ... Bu çok yavaştır. Yanlış bir şey mi yapıyorum? Ben lambda fonksiyonu için farklı bellek ayarları ile benim fonksiyonunu test ettik


(daha önce 128MB ayarlandı):

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

Öyleyse yanıt süresi, belleğe 1-1 (aslında AWS'nin bellekle birlikte ölçeklendirdiği gibi hesaplama kapasitesine göre) bağlıdır. Hala bu çılgın çünkü çok basit bir REST API yapmak için programımı 17mb kullanırken "responsive" yapmak için 1536mb bellek ayarlamak zorundayım! Ben mal olacağı hesaplanmıştır ettik diğer taraftan


Hmm:

  • 8,32 $ 1 milion 4000ms başına 1536mb belleği kullanarak 128mb bellek
  • 10,004 $ 1 milion 300 ms istekleri başına kullanarak istekleri

yüzden sanırım kadar kötü değil ...

+0

Lambda işlevinizde başka bir şey yapmadığınızdan emin misiniz? Basit JS çağrısı o kadar fazla belleğe ihtiyaç duymaz ve o kadar zaman almamalıdır. – Guy

+0

Sadece karşılaştırma amacıyla SimpleDB'ye basarsanız ne tür bir performans elde edersiniz? –

cevap

2

Aslında sorun olabilir bir Kapsayıcıyı Lambda işlevinin çalışmasını duraklatmakla ilgili olabilir. Ayrıca, nesnelerinizi nasıl başlattığınızı optimize etmek isteyebilirsiniz, böylece her çağrıldığında yeniden başlatılmazlar.

Container reuse in Lambda numaralı makaleye bakın.

+0

İlginç. Ancak, yaptığım şey sadece 'aws-sdk' modülünü kullanmak ve veritabanına istek göndermek. Konteynerün tekrar kullanılmasını sağlamak için birbiri ardına birçok istekte bulunmayı denedim ... – user606521

+0

Tanımladığınız gecikmeler çok büyük. Aynı zamanda "us-east-1" yoğun olarak kullanılan bölge olabilir. – kixorz

+0

Diğer bölgelerde konuşlandırma işlevini deneyeceğim. – user606521