node.js - 为什么 bcryptjs 在 AWS Lambda 上比在本地 docker 上慢?

标签 node.js amazon-web-services bcrypt

我有用 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 反射(reflect) 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 的时间内完成任务。在很多情况下,这可能是非常有值(value)的。

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

关于node.js - 为什么 bcryptjs 在 AWS Lambda 上比在本地 docker 上慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723906/

相关文章:

javascript - 当我的 Mongoose DB 模式之一的实例被放置在第二个模式中时,为什么它可能是 "cast to undefined"?

database - AWS RDS 类型中允许的最大连接数困惑

node.js - 尝试使用 npm i bcrypt 时未安装 bcrypt

node.js - 尝试在工作线程中加载bcrypt时出现“模块未自注册”错误

javascript - 无权承担所提供的角色

node.js - AWS Cognito 可以在 EB 上的 Node/Express/React 应用程序中使用吗?

python - 如何将文件 key 传递给在 S3 Put 上触发的 AWS-ECS 容器?

authentication - 在.NET Core 2.0中实现bcrypt

javascript - Node.js:通过迭代的 JSON POST 数据创建多个 MongoDB 文档

linux - 运行脚本未在 EC2 上显示