Edge-функции и serverless-функции: что и когда использовать
Продвинутое3 минРедакция Innovialabs
Коротко
Edge-функции выполняются рядом с пользователем и подходят для лёгкой логики без тяжёлой работы с базой; serverless-функции работают в выбранном регионе рядом с данными и подходят для бизнес-логики, запросов к БД и долгих операций.
Короткий ответ
Edge-функции запускаются в точках присутствия CDN, ближе всего к пользователю. Они стартуют почти мгновенно, но работают в урезанной среде и с жёсткими лимитами. Serverless-функции запускаются в конкретном регионе облака, имеют полноценный runtime и обычно находятся рядом с базой данных.
Простое правило: на edge — то, что зависит от запроса, а не от данных. Всё, что много раз ходит в базу, — в регион, рядом с базой.
Сравнение
| Критерий | Edge-функции | Serverless-функции |
|---|---|---|
| Где выполняются | Во множестве точек по миру, рядом с пользователем | В одном или нескольких выбранных регионах |
| Runtime | Чаще всего V8-изоляты, Web API, часть Node.js API недоступна | Полноценный Node.js, Python, Go, Java и др. |
| Холодный старт | Очень короткий | Заметнее, зависит от runtime и размера кода |
| Лимиты | Строже по CPU-времени, памяти и размеру кода | Шире: дольше выполнение, больше памяти |
| Нативные модули, файловая система | Обычно нет | Да |
| Доступ к БД | Через HTTP-драйверы или прокси, далеко от базы | Обычные драйверы, рядом с базой |
| Модель оплаты | Обычно за запросы и CPU-время | Обычно за запросы, время выполнения и память |
Конкретные лимиты и цены различаются у провайдеров (Vercel, Cloudflare Workers, Netlify, AWS Lambda@Edge и CloudFront Functions) и меняются, поэтому сверяйтесь с их документацией.
Задержка: где на самом деле теряется время
Edge даёт выигрыш только тогда, когда ответ можно сформировать без похода к удалённым данным. Если edge-функция в Ташкенте делает три последовательных запроса к базе во Франкфурте, каждый из них проходит большое расстояние, и итог будет медленнее, чем у serverless-функции во Франкфурте, которая делает те же три запроса локально.
Поэтому важно считать не задержку до функции, а полное время ответа с учётом всех запросов к данным.
Паттерны доступа к базе данных
- Классическая БД в одном регионе. Держите логику с запросами к ней в serverless-функции того же региона. Многие платформы позволяют закрепить регион функций.
- Edge + распределённое хранилище. KV-хранилища и реплицируемые базы, рассчитанные на edge, дают быстрое чтение по всему миру. Запись обычно идёт в основной регион и распространяется с задержкой.
- Edge + кеш. Edge-функция отдаёт ответ из кеша, а при промахе обращается к serverless-функции или API.
- Пул соединений. Edge-функции и короткоживущие serverless-функции могут быстро исчерпать лимит соединений классической БД, поэтому используйте пулер соединений или HTTP-драйвер.
Что куда выносить
Хорошие задачи для edge:
- редиректы и перезапись URL;
- геолокация и выбор языка;
- A/B-тесты и feature-флаги;
- проверка JWT и базовая защита маршрутов;
- добавление заголовков безопасности;
- персонализация из кеша или KV.
Хорошие задачи для serverless в регионе:
- бизнес-логика с несколькими запросами к БД;
- оплаты, вебхуки, интеграции со сторонними API;
- генерация PDF, обработка изображений;
- операции, требующие нативных библиотек или долгого выполнения.
Для постоянного сервера, а не функций: WebSocket-соединения с долгой жизнью, тяжёлые фоновые задачи, постоянные очереди.
Частые ошибки
- Перенести всю логику на edge «ради скорости», а базу оставить в одном регионе.
- Использовать на edge библиотеку, которая зависит от недоступных Node.js API, и узнать об этом только при деплое.
- Не закрепить регион serverless-функций рядом с базой.
- Сравнивать цены только по числу запросов, не учитывая время выполнения.