繁体   English   中英

为什么 bcryptjs 在 AWS Lambda 上比在本地 docker 上慢?

[英]Why is bcryptjs slower on AWS Lambda than in local docker?

我有用 NodeJS 编写的 Lambda。 我注意到需要几秒钟才能完成。 我添加了日志,发现 bcrypt 很慢。

套餐:

"dependencies": {
  "bcryptjs": "^2.4.3",

源代码:

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"); //

这是来自 AWS LogWatch 的日志:

2020-01-13T20:25:30.951 User was found
2020-01-13T20:25:32.670 Password verified

2020-01-13T20:31:20.192 User was found
2020-01-13T20:31:21.550 Password verified

所以需要1.7秒。 我在机器上的 docker 中运行了相同的代码

2020-01-13T20:09:48.109 User was found
2020-01-13T20:09:48.211 Password verified

在本地只需要 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-s 更便宜)并不总是最好的做法是有帮助的。 虽然最高 RAM 选项(具有成比例更高的 CPU 和网络)每 GB-s 肯定更昂贵,但它也可以更快地完成 Lambda 功能。 因此,例如,您可能只需 1.75 倍的成本即可在 1/10 的时间内完成任务。 在很多情况下,这可能是非常有价值的。

有一个项目可以帮助您调整 Lambda 的价格/性能: alexcasalboni/aws-lambda-power-tuning

我有同样的问题,这是因为您正在使用bcryptjs库尝试使用bcrypt快得多。 Bcryptjs使用普通的 javascipt 这就是为什么另一方面bcrypt使用 C++ 扩展太慢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM