2015-08-28 172 views
18

我在同一區域(us-east-1)中有lambda函數和dynamo db表。在lambda函數正進行非常簡單的查詢:從lambda函數對dynamodb的請求非常緩慢

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

只有在DynamoDB表幾排,對電子郵件和讀/寫throughtputs散列鍵設置爲5/5。

Lambda函數在〜4秒內執行......這非常慢。難道我做錯了什麼?


我測試過我與lambda函數不同的內存設置功能(它被設置爲先前128MB):

  • 256MB =>〜2000毫秒
  • 512MB =>〜1000毫秒
  • 1024MB =>〜500ms的
  • 1536MB =>〜300ms的

因此,似乎響應時間取決於內存的1-1(事實上,隨着AWS隨着內存的擴大而增加計算容量)。仍然這是瘋狂的,因爲要製作非常簡單的REST API,我必須設置1536mb內存,使其「響應」,而我的程序使用17mb!


嗯上我已經計算過它會花費另一方面:

  • $ 8.32每1個暢想4000ms請求使用
  • 10.004 $每1個暢想300ms的請求,128MB內存採用1536MB內存

所以它不是那麼糟糕我猜...

+0

你確定你沒有在你的Lambda函數中做其他任何事嗎?簡單的JS調用應該不需要那麼多的內存,並且不應該花費那麼多時間。 – Guy

+0

只是爲了比較,如果你打SimpleDB,你會得到什麼樣的表現? –

回答

2

好了,問題可能在也可能與不停止運行Lambda函數的容器有關。您也可能希望優化初始化對象的方式,以便每次調用該函數時都不會重新初始化。

查看文章Container reuse in Lambda

+0

有趣。但是我所做的只是需要'aws-sdk'模塊並向數據庫發送請求。我也試着一個接一個地提出許多請求,以確保容器被重用... – user606521

+0

你描述的延遲非常大。它也可能是'us-east-1'高度利用地區。 – kixorz

+0

我會嘗試在其他地區部署功能。 – user606521