Что такое Serverless, часть 2 В прошлом посте рассмотрели, ка | Java: fill the gaps
Что такое Serverless, часть 2
В прошлом посте рассмотрели, как инфраструктура понемногу переходила на аутсорс. Serverless — следующий этап такого перехода.
AWS Lambda — самая первая и популярная платформа для Serverless, поэтому дальше буду говорить про неё.
Важно! Есть ещё термин Lambda Architecture — это вообще про другое.
Итак, в чём суть.
Любое приложение — это набор функций. Допустим, в интернет-магазине три функции:
Добавить товары
Сделать заказ
Вывести список текущих заказов
Можно запихать всё в один артефакт — получится монолит. Можно каждую функцию обернуть в отдельный сервис — получатся микросервисы.
Serverless абстрагируется от этой проблемы. Мы не распределяем функциональность по артефактам и работаем просто с функциями. Проектируем не сборник фич, а отдельные маленькие компоненты.
Поэтому Serverless считается архитектурой. Или отдельной моделью проектирования, если термин "архитектура" кажется вам неподходящим.
Платформы, на которых запускаются Serverless приложения, называют FaaS — Functions as a Service.
В Петербурге Serverless используют около 10 компаний, что не очень много. Но тренд растёт, даже Сбер уже сделал свою FaaS платформу.
Как это работает?
Каждая функция состоит из:
Исполняемого кода
Списка зависимостей
Списка событий-триггеров
Конфигурации — количество памяти, необходимые права, время жизни функции и тд
Когда происходит событие из списка тригеров, FaaS платформа создаёт инстанс функции и обрабатывает его. Событием может быть HTTP запрос, сообщение из очереди, действие по расписанию. После обработки функция завершается или ждёт следующее событие в течение заданного времени.
Станет ли код проще?
Точно нет. Проектировать систему с изолированными функциями гораздо сложнее, чем слепить всё в монолит или десяток сервисов
У Serverless свой деплой, тестирование и кодовая база. Даже если перенести только некоторые части приложения, общая схема заметно усложнится.
Зачем переходить на Serverless?
Если микросервисы в PaaS или докере нормально справляются, то должна быть веская причина что-то менять. Таких причин может быть две:
Функции развёртываются по необходимости. Облака это удобно, но иногда очень дорого. FaaS модель неплохо снижает стоимость при переменной нагрузке.
Масштабирование по умолчанию. В AWS Lambda автоматически масштабируются и сервисы, и остальные компоненты, например, БД. В докере и PaaS для этого нужно прилагать немало усилий.
Сколько стоит?
Допустим бэкенд мобильного приложения принимает за месяц 3 миллиона запросов, среднее время — 120мс. Выделим для одной функции 1536 МБ и процессор х86.
Плата за месяц в таком случае будет 2,7 доллара.
Это только AWS Lambda, остальные компоненты оплачиваются отдельно.
Что ещё
Никаких Ansible, Docker, bash скриптов
Базовый мониторинг и аналитика из коробки
Spring Cloud и плагин IDEA AWS Toolkit сильно облегчают разработку
Нужны отличные навыки проектирования
Своеобразное тестирование
Сложно адаптировать уже существующие приложения
Больше задержек, response time может увеличиться
В целом Serverless — очевидный тренд, который набирает обороты. Жду в ближайшие два года тонну докладов на конференциях на эту тему, как когда-то было про микросервисы и реактивное программирование