Почему bcrypt js медленнее на AWS Lambda, чем на локальном docker? - PullRequest
3 голосов
/ 13 января 2020

У меня есть лямбда, написанная в NodeJS. Я заметил, что это занимает несколько секунд. Я добавил журналы и обнаружил, что 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 конфигурации?

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Производительность шифрования обычно зависит от процессора. AWS Процессор Lambda пропорционален оперативной памяти, поэтому вы должны выбрать самый большой (3008 МБ) и провести повторное тестирование.

Когда я запускаю это в обработчике функций Lambda в оперативной памяти Lambda на 3008 МБ в восточном направлении США -1, вызов compareSyn c постоянно занимает 90-100 мс. При использовании лямбды 128 МБ это занимает чуть более 1 с.

В заметке по теме полезно понимать, что выбор минимального (128 МБ) варианта ОЗУ, просто потому что он дешевле на ГБ-с, не всегда лучшее, что нужно сделать. Хотя максимальный объем ОЗУ (с пропорционально более высокими ЦП и сетью), безусловно, дороже на ГБ-с, он также намного быстрее выполняет функции Lambda. Так, например, вы можете выполнить свою задачу в 1/10 от времени всего в 1,75 раза дороже. Во многих ситуациях это может быть очень ценно.

Существует проект, который может помочь вам настроить соотношение цена / производительность для ваших Lambdas: alexcasalboni / aws -lambda-power-tuning

0 голосов
/ 14 января 2020

У меня та же проблема, потому что вы используете библиотеку bcryptjs, попробуйте использовать bcrypt намного быстрее. Bcryptjs используйте обычный javascipt, поэтому с другой стороны он слишком медленный bcrypt используйте расширения c ++

...