【发布时间】:2018-07-17 13:00:17
【问题描述】:
给定 AWS Lambda on NodeJS 第 6 版,它与 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 操作。
【问题讨论】:
-
您是否能够使用任何其他方法来提高性能?我陷入了类似的境地。
标签: performance amazon-web-services aws-lambda amazon-dynamodb aws-sdk