Leo*_*rak 6 bcrypt amazon-web-services node.js
我用 NodeJS 编写了 Lambda。我注意到需要几秒钟才能完成。我添加了日志,发现bcrypt相当慢。
套餐:
"dependencies": {
"bcryptjs": "^2.4.3",
Run Code Online (Sandbox Code Playgroud)
源代码:
const bcrypt = require('bcryptjs');
console.log("User was found"); // following part takes more than 1 second!
if (bcrypt.compareSync(password, user.password)) {
console.log("Password verified"); //
Run Code Online (Sandbox Code Playgroud)
这是来自 AWS LogWatch 的日志:
2020-01-13T20:25:30.951 User was found
2020-01-13T20:25:32.670 Password verified
Run Code Online (Sandbox Code Playgroud)
和
2020-01-13T20:31:20.192 User was found
2020-01-13T20:31:21.550 Password verified
Run Code Online (Sandbox Code Playgroud)
所以需要1.7秒。我在我的机器上的 docker 中运行了相同的代码
2020-01-13T20:09:48.109 User was found
2020-01-13T20:09:48.211 Password verified
Run Code Online (Sandbox Code Playgroud)
本地仅需 120 毫秒。AWS使用NodeJS 10.x,本地docker镜像可能是8.x。我不知道如何告诉 docker 反映packaged.yaml.
这是 NodeJS 的回归吗?或者AWS配置有问题?
加密性能通常受 CPU 限制。AWS Lambda CPU 与 RAM 成正比,因此您应该选择最大的(3008 MB)并重新测试。
当我在 us-east-1 中 3008 MB RAM Lambda 上的 Lambda 函数处理程序中运行此命令时,compareSync 调用始终需要 90-100 毫秒。对于 128 MB 的 Lambda,需要 1 秒多一点的时间。
与此相关的是,了解选择最低 (128 MB) RAM 选项(仅仅因为它每 GB 更便宜)并不总是最好的做法是有帮助的。虽然最高 RAM 选项(具有相应更高的 CPU 和网络)每 GB 肯定更昂贵,但它也可以更快地完成 Lambda 函数。因此,举例来说,您可能能够在 1/10 的时间内完成任务,而成本仅为 1.75 倍。在很多情况下,这可能非常有价值。
有一个项目可以帮助您调整 Lambda 的性价比:alexcasalboni/aws-lambda-power-tuning
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |