😡
Не успели понять что такое Serverless, а тут хуяк и Edge Functions
Давно хочу написать про отличия self-hosted, serverless containers, serverless functions и тут еще и edge functions подъехали, так что пора:
-
Self-hosted – арендовали сервера, развернули там docker-compose / nomad / kubernetes, веселимся как можем
-
Serverless containers – сделали докер образ, задеплоили его на площадку и он сам там крутиться, масштабируется и подобное.
Yandex Serveless Containers,
Google Cloud Run,
AWS Faragate
Кстати, мой любимый способ, когда нет Dev Ops.
-
Serverless functions – создаете приложение с 1 точкой входа (в 90% это HTTP запрос) и в обработке этого запроса пишите практически все что угодно.
AWS Lambda,
Google Cloud Functions,
Netlify Functions Из особенностей: (1) каждый запрос будет создавать "
мини виртуалку" (для этого нужно время, которое называется "cold start"), где будет подниматься ваш код, а потом, если нет трафика, ложится, (2) вы привязываете их запуск к определенному региону, (3) ограничения по памяти, времени отработки и нативным API железа.
-
Edge functions – тоже самое, что и serverless functions, НО вместо мини виртуалки, ваш код запускается (условно) в рамках уже работающего приложения (это как сделать
eval).
Особенности: (1) не занимает практически нисколько времени для запуска, (2) на данные момент на JS ограничено возможностью только делать HTTP запросы (+ WS), (3) более похоже на CDN, поэтому МОЖЕТ запускаться прям на ближайшем доступном сервере от клиента.
Vercel Edge Functions,
Netlify Edge Functions
Подробнее буду разбирать в следующих постах, но сразу скажу: я написал "МОЖЕТ" с большой буквы, потому что главной проблемой в скорости для большинства приложений является скорость запросов к не распределенной БД, поэтому на данный момент Edge Function дают большое преимущество над Serverless Functions, когда вы указываете их регион запуска рядом с вашей БД, а не рядом с клиентами.
Сам с Edge Functions еще только начал играться, но с остальными видами какой-то опыт есть, так что продолжу дальше делиться инфой + некоторыми интересными рассуждениями.
Тизер: все варианты гавно в том или ином контексте, тут нет и никогда не будет "оптимального", тут все невероятно сильно зависит от контекста. Универсален только совет: "как минимум научитесь делать self-hosted" – а все остальное уже будет сильными оптимизациями поверх этого в зависимости от контекста.
Если у вас есть более точечные вопросы, пишите в комментарии к этому посту
Всем мощной прокачки 💪