Вопрос производительности - API на основе лямбды - размещен непосредственно на AWS по сравнению с Netlify Functions - PullRequest
0 голосов
/ 29 марта 2020

Привет, ребята, так что я разрабатываю API-интерфейс Corona для хакатона, и в настоящее время у нас есть установка «classi c», работающая на виртуальной машине EC2 с данными просто в. json файлах на диске.

Для маршрута по умолчанию, /daily, это занимает приблизительно 400-600 мс.

Теперь я возился с переоборудованием его с помощью функций без сервера, которые определенно работают, как бы я ни был связан с производительностью Я сильно не в восторге.

Я сделал это один раз в AWS напрямую, с их функциями API Gateway и Lambda с данными в DynamoDB и кэшем redis (облако redis).

Поэтому, когда приходит запрос, он сначала проверяет redis, а если ключ не может быть найден, он запрашивает динамо и возвращает результат.

Это прекрасно работает, с временем отклика (после первого, когда лямбда имеет холодный старт / запись redis может не существовать), немного ниже, около 200-400 мс.

Тем не менее, настройка этих отдельных функций Lambda со всей конфигурацией IAM, необходимой для AWS, была трудной задачей.

Так как я большой поклонник Netlify, Я решил попробовать это через их функции (я знаю, что они в основном просто лямбды). Во всяком случае, у меня есть тот же кэш Redis и вместо динамо (потому что я не мог определить IAM, чтобы позволить netlify читать нашу DynamodB), я использовал faunadb в качестве базы данных, которая работает достаточно хорошо. Проблема в том, что даже когда запись redis существует, запросы через функции netlify принимают по крайней мере 1 с, часто около 1,3 с-1,5 с

Есть идеи, почему такое большое расхождение?

Лямбда-версия AWS размещена в eu-central-1, как и экземпляр Redis Cloud. Я не уверен, где Netlify настроить наши функции. Это единственный способ объяснить разницу, когда оба просто нажимают на кеш redis и возвращают результат. Возможно, функция netlify находится в us-east-1 или где-то еще дальше, где проверка на redis / get от redis занимает намного больше времени.

РЕДАКТИРОВАТЬ 1 : снимок экрана из программного обеспечения для мониторинга: screenshot

РЕДАКТИРОВАТЬ 2 : поэтому я протестировал маршрут функции netlify, где он просто возвращается объект некоторого случайного контента, без каких-либо других запросов, и это было так же быстро, как AWS. Так что, похоже, моя гипотеза о запросе из области aws netlify, куда бы они ни поместили мою функцию, требует гораздо больше времени для запроса redis, чем лямбда-версия, где я мог бы конкретно указать, из какого региона выполнять из ..

Есть еще идеи / советы?

...