Serverless: как работает бессерверная архитектура и зачем она нужна
Serverless подойдет, если в приложении есть много изолированных и быстро протекающих процессов, или микрозадач. За выполнение каждой такой микрозадачи отвечает отдельный блок кода — функция. Serverless позволяет запускать нужную функцию по триггеру, например, когда человек регистрируется на сайте, отправляет сообщение или загружает файл. Код работает не постоянно, а в момент события, и не тратит лишние IT-ресурсы.
В статье рассмотрим, когда применяют Serverless, из чего состоит этот подход к созданию приложений и как он работает.

Что такое и как работает Serverless
Serverless, или бессерверная архитектура, — это способ развертывания приложений в облаке, при котором не нужен выделенный сервер. Поставщик облачных услуг полностью контролирует выполнение кода: настраивает операционную систему, обслуживает оборудование, обеспечивает безопасность IT-инфраструктуры, управляет резервным копированием. Разработчики же фокусируются на коде и связях между сервисами.
Один из главных компонентов бессерверной архитектуры — функция. Она предоставляется по модели FaaS, function-as-a-service, или функция как услуга. Это модель облачных вычислений, которая позволяет запускать код в ответ на события (триггеры) без управления инфраструктурой. К примеру, функция запустится, только когда надо загрузить файл или отправить сообщение, а не будет работать постоянно.
Отличия Serverless от традиционных серверных решений:
Serverless | Серверная архитектура | |
Зоны ответственности | Разработчик не настраивает и не обслуживает серверы. Всю работу с инфраструктурой ведет облачный провайдер | Настройка и обслуживание серверов на стороне команды разработки |
Время работы | Функция запускается только при срабатывании триггера | Ресурсы работают постоянно |
Масштабируемость | Система сама добавляет ресурсы по мере роста проекта | Нужно добавлять мощности самостоятельно |
Оплата | Оплата считается только за время работы кода | Плата за аренду сервера 24/7 |

Из чего состоит Serverless-архитектура
Бессерверная архитектура — event-driven, то есть событийно-ориентированная архитектура. Из каких компонентов она состоит:
Функции, которые работают по модели FaaS.
Бессерверные базы данных (БД). Serverless-архитектура, как и обычная, работает с базами данных. Они могут быть бессерверные или традиционные, вроде PostgreSQL и MySQL. Бессерверными базами данных управляет облачный провайдер: настраивает, масштабирует, делает резервные копии и следит за безопасностью. А традиционными — частично клиент, частично провайдер.
API Gateway — инструмент, который обеспечивает взаимодействие между функциями и клиентами посредством протоколов HTTP/HTTPS. API Gateway управляет вызовами API, маршрутизацией запросов, аутентификацией и контролем доступа.
Преимущества и недостатки Serverless
Преимущества:
Автоматическое масштабирование. Каждый вызов функции обрабатывается независимо. Если во время распродажи 1 000 пользователей одновременно нажмут Купить, запустится 1 000 параллельных копий функции. Сайт не упадет, а с ростом нагрузки вам не придется ничего настраивать.
Оптимизация затрат. Вы платите только за время работы кода. Это выгодно, если сервисом пользуются неактивно: функция включилась, код сработал несколько секунд и отключился. Не нужно тратиться на постоянную аренду облачного сервера.
Ускорение разработки. Не надо тратить ресурсы на настройку оборудования и решение проблем с инфраструктурой. Разработчики занимаются именно логикой приложения.
Автоматическое управление инфраструктурой. Облачный провайдер берет на себя резервное копирование, обновление и безопасность системы. Например, если сервер выйдет из строя, провайдер заменит его без вашего участия.
Безопасность. Поставщики облачных услуг обеспечивают высокий уровень отказоустойчивости и безопасности инфраструктуры, включая автоматические обновления ПО и защиту от DDoS атак.
Недостатки:
Ограничение ресурсов и времени выполнения задач. Облачный провайдер может ставить временное ограничение на выполнение кода. Если код работает больше доступного тайминга, процесс автоматически прерывается. Также может быть ограничена мощность процессора и объем памяти.
Ограничения скорости при холодном старте функций. При первом вызове или после долгой паузы она может запускаться с задержками от 100 мс до нескольких секунд. Скорость прогрева зависит, например, от используемого языка программирования или облачного провайдера.
Зависимость от поставщика. Если облачный сервер выйдет из строя, ваше приложение тоже перестает работать. Поэтому важно подбирать провайдера с проверенной репутацией. Например, доступность ЦОД Cloud.ru составляет от 99,982%, что позволяет разворачивать на облачных мощностях почти любую IT-инфраструктуру.
Рост стоимости при высоких нагрузках. С Serverless вы платите за фактическое потребление. Это будет выгодно, например, для обслуживания Telegram-бота. А на популярном сайте каждый посетитель может инициировать тысячи триггеров — тогда придется параллельно запускать миллионы функций, что может оказаться дороже обычного сервера.
Как работает Serverless
Рассмотрим пошагово, как работает Serverless.
Запуск события, или триггера. Пользователь инициирует какое-то действие, которое становится триггером. Это может быть добавление товара в корзину, отправка анкеты, изменение состояния базы данных, поступление файла в хранилище или получение HTTP-запроса. Например, посетитель сайта регистрируется по номеру телефона и нажимает Создать аккаунт.
Запуск функции, которая обрабатывает триггер. После запуска триггера активируется Serverless-функция, которая отвечает за то, что в ответ на триггер происходит какое-то действие. Обычно оно короткое, до нескольких секунд или минут, по прошествии которых функция прекращает работу до следующего вызова по триггеру. Например, человек регистрируется по номеру, нажимает Создать аккаунт, в ответ на что функция проверяет, нет ли в базе пользователей с таким же номером.
Возврат результата пользователю. Результат работы функции или отображается пользователю («Регистрация прошла успешно»), или сохраняется в базе данных для дальнейшего использования.

Где и когда применяют Serverless
Serverless-решения подходят для проектов, которые:
Состоят из небольших, кратковременных и изолированных функций. Функция выполняет одну четкую задачу, например валидирует ввод, записывает данные в БД, отправляет email, преобразует текстовый документ в pdf-файл. Время выполнения функции ограничено, обычно это несколько секунд или минут. Вызов каждой функции независим: экземпляр функции, обрабатывающий один запрос, не зависит от экземпляра, обрабатывающего другой. Архитектура FaaS заточена именно под такие микрозадачи.
Нечасто запускаются. Serverless выгоден из-за модели оплаты pay-as-you-go, что позволяет платить только за моменты, когда код работает. При этом если какая-то функция запускается каждую секунду и долго работает, выгоднее может оказаться не Serverless, а традиционное серверное решение.
Работают при наличии триггеров. Запуск функции инициируется каким-то конкретным событием. Например, пользователь добавил товар в корзину, загрузил файл в облачное хранилище. Если ничего не происходит, функция «спит» и не нагружает ресурсы, платить за ее работу не нужно.
Имеют изменчивые или неизвестные требования к масштабированию. Бывает, что нагрузка на приложение непредсказуема: может быть нулевой, а затем резко подскочить в десятки, сотни или тысячи раз за секунды. Такое может случиться, например, когда завирусился пост в соцсети и через него на сайт пришло много людей, стартовала распродажа, с радаров на дорогах поступило много данных об авто в час-пик.
Провайдер берет на себя мгновенное и автоматическое масштабирование, а вам не нужно заранее резервировать серверы или настраивать сложные правила автоскейлинга.
Соединяют другие сервисы вместе. Функция редко делает что-то очень сложное сама по себе. Она быстро реагирует на события из одного сервиса и вызывает действия в другом, выполняет необходимые промежуточные действия, например, трансформацию данных, валидацию, маршрутизацию.
Примерное время выполнения Serverless-функций в разных сценариях. Многие провайдеры устанавливают лимиты на максимальное время выполнения функции, обычно это 5–15 минут:
Время выполнения функции | Задачи |
10–100 миллисекунд | Проверка, правильно ли введены данные в форму Вставка записи в базу данных, например, комментария пользователя |
до 1–2 секунд | Чтение и изменение небольшого файла Отправка сообщений, пуш-уведомлений |
до минуты | Распознавание лиц на фотографиях Формирование ежемесячного отчета по продажам |
Бессерверная архитектура найдет применение во многих областях: коммерции, финтехе, обработке данных и аналитике. Рассмотрим примеры, где может успешно работать продукт на Serverless:
Веб-сервисы, реагирующие на триггеры. Пользователь заполнил форму обратной связи и нажал Отправить. В этот момент срабатывает триггер — отправка формы. Serverless-функция мгновенно просыпается: валидирует введенный email, проверяет, не спам ли это, форматирует данные, укладывает их в очередь на отправку или сразу передает в CRM-систему. Пользователь видит «Спасибо!», а функция прекращает работу, не потребляя ресурсы впустую. Тот же принцип работает при бронировании столика, подписке на рассылку или загрузке аватара.
Микросервисы. Когда пользователь добавляет товар в корзину, срабатывает один микросервис — он отвечает только за обновление корзины. Когда нажимает Купить, в дело вступает другой — он вытаскивает данные о товарах в корзине, связывается с платежным шлюзом, обрабатывает транзакцию. Третий получает подтверждение оплаты, запускает сборку заказа на складе. Каждый микросервис — независимая функция, которую можно обновлять, масштабировать или даже переписать отдельно, не затрагивая работу всего магазина.
Обработка данных в реальном времени. Сотни датчиков и камер на дорогах постоянно генерируют поток данных: скорость машин, загруженность полос, аварии. Одна Serverless-функция фильтрует сырые данные, выделяет важное. Другая агрегирует информацию по участкам дорог, вычисляет уровень затора. Третья мгновенно обновляет карту в мобильном приложении или на электронном табло.
Автоматизация рутины. Представьте уставшего администратора, который каждый понедельник генерирует отчеты вручную. Можно настроить Serverless-функцию, которая будет срабатывать в определенное время, обращаться к базе данных, собирать нужные цифры, форматировать их в аккуратный документ и отправлять по заданным адресам.

Практики для разработки на Serverless
Может показаться, что в работе приложения с Serverless разработчику нужно только написать код. При этом есть несколько важных принципов, которые стоит соблюдать, чтобы Serverless-приложение работало эффективно и было надежным. Рассмотрим best practice в бессерверной разработке.
Оптимизация кода и времени выполнения
Код должен работать как можно быстрее, для этого его нужно оптимизировать. Как это сделать:
Минимизировать зависимости: убрать библиотеки, которые не работают с кодом, чтобы ускорить загрузку.
Написать компактные функции и поделить сложные задачи на более мелкие. Это упростит отладку и ускорит выполнение функций.
Настроить память: чем ее больше, тем быстрее будет отрабатываться задача. При этом стоит учитывать, что при увеличении объемов памяти плата за сервис будет больше.
Использовать язык программирования, который лучше всего работает с задачей. К примеру, Python и Node.js запускаются быстрее Java.
Наладить асинхронность: разбить задачи, которые могут отрабатываться параллельно, чтобы сократить время работы кода.
Управление логированием и мониторингом
Логи и мониторинг помогают понять, как работает система, и показывают ошибки.
Как настроить управление логами и мониторингом:
Настроить подробное логирование, чтобы быстро находить причины ошибок и анализировать работу приложения.
Включить в логи только значимые данные, так как зачастую логи — платная опция. Если они объемные и их часто вызывают, это сильно увеличит расходы.
Настроить включение и выключение разных уровней детализации лога, например, DEBUG для отладки, а ERROR для работы.
Настроить оповещения, чтобы система сообщала, если функция выполняется слишком долго или ошибок стало больше обычного.
Использовать трассировку — отслеживание этапов выполнения задач. Трассировка покажет, где функция замедляется или как взаимодействуют разные сервисы.
Подключить инструменты мониторинга. Например, сервис Клиентского логирования от Cloud.ru отслеживает производительность функций и находит ошибки. А облегчить работу в облаке сможет AI-помощник Клаудия: она интегрирована с документацией, отвечает на вопросы о сервисах и подбирает инструменты под ваши задачи.
Обеспечение безопасности проекта
В работе с Serverless на провайдере лежит обеспечение безопасности инфраструктуры, но безопасность самого проекта — на разработчиках.
Что рекомендуется сделать:
Настроить IAM-роли — это доступы функций только к тем ресурсам, с которыми они работают.
Важные данные хранить в специальных менеджерах безопасности. Например, API-ключи и пароли содержать в Secret Manager от Cloud.ru.
Обновлять код и библиотеки, чтобы защищать приложение от атак.
Шифровать данные при их передаче и хранении.
Инструменты для работы с Serverless
Чтобы использовать бессерверную архитектуру, нужны специальные платформы. Они запускают FaaS, обрабатывает данные и управляют приложениями. Расскажем про основные.
AWS Lambda
AWS Lambda — инструмент от Amazon Web Services. Плата взимается только за время выполнения кода и количество запросов, при этом AWS автоматически масштабирует ресурсы под нагрузку. Поддерживаются языки Node.js, Python, Java, Go, Ruby, Swift и C#, через .NET можно работать и с другими. В месяц бесплатно доступен миллион запросов, также можно использовать AWS Lambda бесплатно в течение шести месяцев.
Cloud Run functions
Cloud Run functions — инструмент от Google для работы с функциями. Его удобно применять, если вы разрабатываете продукт с другими сервисами Google, например Google Analytics или Firebase. Новые пользователи получают 300 $ в виде бесплатных кредитов, чтобы протестировать возможности сервиса.
Azure
Azure — это платный инструмент от Microsoft. Он успешно интегрируется с Office 365 и Dynamics — корпоративными сервисами Microsoft. Например, в Azure FaaS обрабатывают данные из Excel и автоматически создают отчеты в Power BI. Если разработчик не знаком с сервисами Microsoft, то могут быть сложности с настройкой и интеграцией. Также есть ограничение по времени работы функции — пять минут, но можно увеличить до десяти через специальные настройки.
Важно отметить: Amazon, Google и Microsoft ограничили доступ к сервисам в России. Но есть отечественные аналоги этих инструментов, например, Advanced FunctionGraph от Cloud.ru.

Инструменты с открытым исходным кодом
Если стандартные коммерческие решения не устраивают, вы можете выбрать инструменты с открытым исходным кодом. Вы получите возможность не платить по тарифам коммерческих решений, создавать собственные функции на различных языках программирования, например Python, JavaScript, Go, Ruby.
Один из популярных вариантов — OpenFaaS, открытая платформа для запуска функций как сервисов (FaaS). Она позволяет разворачивать функции на собственных серверах или в публичных облаках, включая контейнеризированные среды.
Коротко о Serverless
Serverless — это подход к построению приложений, при котором разработчик фокусируется на логике сервиса, а обслуживание IT-инфраструктуры берет на себя облачный провайдер.
Основные преимущества: автоматическое масштабирование, оптимизация затрат, упрощенная разработка и высокая надежность. Ключевой компонент — FaaS (Function-as-a-Service), который позволяет запускать код только в ответ на триггеры.
Среди недостатков: ограничения по времени выполнения задач, возможные задержки из-за холодного старта, зависимость от провайдера, рост стоимости при постоянных нагрузках.
Serverless подходит для приложений с множеством коротких независимых задач, проектов с непредсказуемой нагрузкой и редкими пиками активности, event-driven приложений, а также для интеграции разнородных сервисов и автоматизации повторяющихся операций.
Особенности работы Serverless: выполнение функций после активации триггера, автоматический запуск и остановка функций, автомасштабирование ресурсов в зависимости от нагрузки и оплата только за фактическое время выполнения кода.
Serverless менее эффективен в проектах с большими стабильными нагрузками, длительным временем выполнения задач, когда нужен полный контроль над IT-инфраструктурой. Также Serverless может не подойти, если приложение не допускает даже минимальных задержек.