AWS DynamoDB持久连接

时间:2018-02-07 09:39:45

标签: performance amazon-web-services aws-lambda amazon-dynamodb aws-sdk

鉴于NodeJS第6版上的AWS Lambda,它与DynamoDB表执行非常简单的测试目的CRUD交互。测量的性能非常慢,独立于选定的Lambda RAM存储器或用于Dynamodb的RCU / WCU单元。

进行了基准测试,结果不满意。微容器中的事件MySQL数据库具有性能,与DynamoDB相比有一段时间更好。

Update operations        1000            10000             20000            100000

RCU=1000/WCU=1000      104708 ms       176109 ms         276689 ms         N/A >5min
                        942 MB          707 MB            896 MB         

RCU=2000/WCU=2000      45953 ms        167686 ms         245937 ms         N/A >5min
                        646 MB          829 MB            896 MB       

RCU=3000/WCU=3000      74205 ms        151072 ms         253800 ms         N/A >5min
                        657 MB          840 MB            854 MB      

RCU=4000/WCU=4000      76636 ms        175258 ms         257238 ms         N/A >5min
                        896 MB          896 MB            896 MB      

发现此类行为的快速研究原因后:DynamoDB对每个CRUD操作执行新的HTTP(S)请求! (https://github.com/aws/aws-sdk-js/blob/master/lib/http/node.js#L25)这是一个非常慢的TLS连接事件,它具有相对较长的建立时间,包括密钥交换。此外,它对HTTP标头来说是非常大的开销,有时比CRUD有效载荷大一些。

所以问题:是否有可用的方法在NodeJS Labmda的持久连接中与DynamoDB进行通信?批处理操作不是合适的解决方案,因为它们不支持UPDATE操作。

2 个答案:

答案 0 :(得分:0)

根据设计,DynamoDB是一种Web服务。您不能像RDBMS或任何其他数据库那样持久连接数据库。

  

DynamoDB是一种Web服务,与它的交互是无状态的。   应用程序不需要维护持久的网络连接。   相反,使用HTTP(S)请求和DynamoDB进行交互   响应。

Dynamodb connection

解决方法解决方案: -

如果更新不相关,您可以异步更新项目以提高性能。但是,在这种情况下,您可能需要考虑如何处理错误。

以下代码在update上没有回调。因此,它调用更新操作并且不等待其响应。

requestObj = docClient.update(params);
requestObj.send();

答案 1 :(得分:0)

默认情况下,AWS Node SDK似乎支持Keep-alive。 我们需要将AWS_NODEJS_CONNECTION_REUSE_ENABLED环境变量设置为1。

请参考:-https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html