Як перевірити працездатність AWS Lambda?


14

Вартість AWS Lambda залежить від часу запуску функції та певною мірою від сліду пам'яті. Функції, які закінчуються швидше та займають менше пам’яті, можуть заощадити досить багато грошей. Особливо, коли така функція виконується часто.

Як можна налаштувати функцію Node.js Lambda для швидкості та невеликого сліду пам’яті для економії витрат?

Чи є інші аспекти для лямбда, які вигідні для вдосконалення?

Відповіді:


6

Відповідь Dawny33 хороша, але я б почав раніше в процесі розробки.

Слідкувати за своїм хмарним оточенням, щоб переконатися, що ваші функції поводяться так, як ви очікували (включаючи ваші "виробничі" функції, які можуть працювати на іншому наборі даних) є вирішальним, оскільки це може виявити речі, які неможливо відтворити локально чи за допомогою тестовий набір даних.

Тим не менш, я б сказав, що це тестування продуктивності, яке ви робите з метою оптимізації, повинно починатися прямо з машини розробника. Або, принаймні, з якогось місцевого оточення, перш ніж натиснути на хмару.

Причиною тому я є те, що хоча AWS Lambdas вражає багато пунктів, той факт, що у вас немає повного контролю на сервері, обмежить ваші інструментальні можливості. Я не кажу, що інструментарій неможливий, коли без сервера, але спробуйте з’ясувати, скільки у вас переривань процесора (а скільки викликано вашим кодом) просто для задоволення;)

Тож, що я раджу, а це насправді не обмежується безсерверним, - це розпочати профілювання рано. Профілювання NodeJS може бути виконано за допомогою багатьох різних інструментів, NewRelic, dynatrace та AppDynamic - одні з великих гравців. Існує також менший плеєр, деякі з них є лише пакетом NPM для встановлення (наприклад, Nodefly). Можна також зробити деякі NodeJS без будь-якого додаткового інструменту, оскільки в двигун V8 є вбудований профілер. Ця документація від NodeJS допоможе вам розпочати роботу.

Який би інструмент ви не вибрали, ви хочете встановити його локально і збирати дані профілювання. Це може включати запуск агента або включення пакета у ваш package.json. Вказівки вашого інструмента підкажуть, як його встановити. Хороший профілер дасть вам знати, скільки пам'яті та процесора ви використовуєте. Кращі інструменти дадуть вам зрозуміти, скільки віддалених дзвінків було здійснено, скільки часу вони зайняли.

Використовуйте дані профілювання, які інструмент дає вам для виявлення вузьких місць та їх усунення. Немає обмежень у тому, скільки профілювання можна зробити. Деякі люди (божевільні?) Роздивляться системні виклики своєї найважливішої функції. Можливо, вам доведеться робити таку річ, якщо ви хочете поголити наносекунди своєї функції (але тоді, можливо, AWS Lambda - не найкращий вибір для початку).

Тут також варто зазначити, що я не згадав нічого специфічного для AWS Lambda. Це тому, що ваші оптимізації, швидше за все, не будуть специфічними для AWS Lambda (зрештою, без сервера ви не повинні турбуватися про сервер / середовище).

Переконайтеся, що не тільки ваш код працює, але і він працює так, як ви очікуєте. Не надмірно оптимізуйте, але пильно стежте за використанням процесора та пам'яті. Чи повинен масив 2 Мб дійсно зростати до 10 МБ, коли ви сортуєте його? Напевно, ні.

Тоді ви зможете скористатися інструментами, згаданими Dawny33, або деякими іншими інструментами, щоб підтвердити, що ваші функції виконують аналогічно під час розгортання в Lambda. Однак у вас вже буде дуже високий рівень впевненості у своїх функціях, і вам потрібно буде лише підтвердити, що вони поводяться належним чином, а не повністю розглядати їх.


Так, це важливо, але як це можна зробити? Чи є якісь інструменти, практики, що саме може зробити розробник? Я не бачу нічого згаданого у цій відповіді: /
Євгеній

Я сказав так, через профілювання та інструментарій. NewRelic APM - приклад, але це лише один із доступних профілів. Встановіть профілер, запустіть свою функцію, оптимізуйте. Чи буде вона працювати на AWS Lambda не має значення, якщо у вас немає проблеми, характерної для AWS. Я оновлю свою відповідь на основі вашого коментаря.
Олександр

Деякі приклади та посилання на статті, блоги, відомих профілів, які можуть виконати цю роботу. Саме таку річ, яка робить імхо ціннісною, а не просто надсиланням людей кудись задавати питання "як мені рахувати переривання процесора, у мене немає поняття".
Євгеній

Гарна думка. Я знову покращив свою відповідь.
Олександр

5

Я не можу повністю відповісти на це, але ось мої погляди з мого обмеженого досвіду роботи з лямбда:

  1. Швидкість-Ефективність: Тривалість одного запуску лямбда-функції буде присутня на інформаційній панелі monitoringвкладки Лямбда , яка виглядає приблизно так:

введіть тут опис зображення

Так само робити дроселі / помилки / кількість викликів.

  1. Можна також встановити фільтри CloudWatch для використання в пам'яті функції лямбда, дані яких можна використовувати для подальшої оптимізації вашого обробника. Це гідний пост про те, як його налаштувати.
  2. Крім того, налаштуйте правильний журнал , щоб згодом ви могли пройти журнали у CloudWatch. Це не хакінг оптимізації, а більше, ніж найкраща практика
  3. Тестування : Ретельно перевіряйте свої лямбда-функції, щоб не пропустити крайові корпуси. Це важливо, оскільки лямбда переглядає невдалі функції перед відмовою. Таким чином, ви можете заощадити заздалегідь, якщо ви правильно перевірили функцію. Посібник з тестування функцій лямбда

5

Ознайомтеся з профілем IOpipe, щоб отримати повний відвал v8-профілерів із викликів Lambda. Ви можете завантажити їх у Chrome Devtools, щоб точно побачити, де витрачається час процесора та як використовується пам'ять для ваших функцій.

введіть тут опис зображення

Відмова: Я працюю в IOpipe


0

Використовуйте агент StackImpact для отримання профілів процесора та пам'яті. Більш детально в публікації в блозі: AWS Lambda CPU і Memory Profiling (Node.js) . Оскільки процес Lambda Node.js заморожується між запитами, більшість інших інструментів, ймовірно, не вийдуть з коробки.

введіть тут опис зображення

Відмова: Я працюю в StackImpact


Хоча це звучить пов’язано і, можливо, є правильним рішенням, трохи розширивши те, як це може допомогти у вирішенні питання, уникне відчуття відповіді лише на посилання, де, якщо посилання загниє, не так багато, щоб отримати перше уявлення про те, як це може допомогти.
Тенсібай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.