Что такое Serverless, часть 2



В прошлом посте рассмотрели, как инфраструктура понемногу переходила на аутсорс. Serverless — следующий этап такого перехода.



AWS Lambda — самая первая и популярная платформа для Serverless, поэтому дальше буду говорить про неё.



Важно! Есть ещё термин Lambda Architecture — это вообще про другое.



Итак, в чём суть.



Любое приложение — это набор функций. Допустим, в интернет-магазине три функции:

▫️ Добавить товары

▫️ Сделать заказ

▫️ Вывести список текущих заказов



Можно запихать всё в один артефакт — получится монолит. Можно каждую функцию обернуть в отдельный сервис — получатся микросервисы.



Serverless абстрагируется от этой проблемы. Мы не распределяем функциональность по артефактам и работаем просто с функциями. Проектируем не сборник фич, а отдельные маленькие компоненты.



Поэтому Serverless считается архитектурой. Или отдельной моделью проектирования, если термин "архитектура" кажется вам неподходящим.



Платформы, на которых запускаются Serverless приложения, называют FaaS — Functions as a Service.



В Петербурге Serverless используют около 10 компаний, что не очень много. Но тренд растёт, даже Сбер уже сделал свою FaaS платформу.



Как это работает?



Каждая функция состоит из:

▫️ Исполняемого кода

▫️ Списка зависимостей

▫️ Списка событий-триггеров

▫️ Конфигурации — количество памяти, необходимые права, время жизни функции и тд



Когда происходит событие из списка тригеров, FaaS платформа создаёт инстанс функции и обрабатывает его. Событием может быть HTTP запрос, сообщение из очереди, действие по расписанию. После обработки функция завершается или ждёт следующее событие в течение заданного времени.



Станет ли код проще?



Точно нет. Проектировать систему с изолированными функциями гораздо сложнее, чем слепить всё в монолит или десяток сервисов🙂



У Serverless свой деплой, тестирование и кодовая база. Даже если перенести только некоторые части приложения, общая схема заметно усложнится.



Зачем переходить на Serverless?



Если микросервисы в PaaS или докере нормально справляются, то должна быть веская причина что-то менять. Таких причин может быть две:



1️⃣ Функции развёртываются по необходимости. Облака это удобно, но иногда очень дорого. FaaS модель неплохо снижает стоимость при переменной нагрузке.



2️⃣ Масштабирование по умолчанию. В AWS Lambda автоматически масштабируются и сервисы, и остальные компоненты, например, БД. В докере и PaaS для этого нужно прилагать немало усилий.



Сколько стоит?



Допустим бэкенд мобильного приложения принимает за месяц 3 миллиона запросов, среднее время — 120мс. Выделим для одной функции 1536 МБ и процессор х86.

Плата за месяц в таком случае будет 2,7 доллара.



Это только AWS Lambda, остальные компоненты оплачиваются отдельно.



Что ещё



Никаких Ansible, Docker, bash скриптов

Базовый мониторинг и аналитика из коробки

Spring Cloud и плагин IDEA AWS Toolkit сильно облегчают разработку



😐 Нужны отличные навыки проектирования

😐 Своеобразное тестирование



Сложно адаптировать уже существующие приложения

Больше задержек, response time может увеличиться



В целом Serverless — очевидный тренд, который набирает обороты. Жду в ближайшие два года тонну докладов на конференциях на эту тему, как когда-то было про микросервисы и реактивное программирование🙂