Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Бессерверная архитектура (Serverless): что это такое и ее преимущества

16 сен 2024
Что такое бессерверная архитектура (Serverless). Преимущества и недостатки Serverless-архитектуры и примеры применения на практике.

Что такое бессерверная архитектура?

Serverless Architecture (бессерверная архитектура) — метод запуска приложений в облаке, не требующий выделенного сервера. Эта модель абстрагирует пользователей от физической или виртуальной инфраструктуры серверов. Взаимодействие идет не напрямую с серверами или их функциями, а с интерфейсом API. Юзеры не управляют серверами, не масштабируют их, не занимаются миграцией данных — физически или виртуально. 

Пользователь облачных услуг арендует инструменты и интерфейсы для запуска приложений у облачного провайдера, не оплачивая аренду самой серверной инфраструктуры. Поэтому Serverless-архитектура экономически выгодна. Эта архитектура широко применяется в областях анализа big data искусственного интеллекта (ИИ), интернета вещей (IoT). Расскажем о достоинствах и недостатках модели, приведем конкретные примеры.

Плюсы Serverless-архитектуры

  1. Эластичность, возможность быстрого масштабирования.
  2. Независимость от ОС и другого программного обеспечения, необходимого для выполнения приложения. Не важно, на какой операционной системе (Linux, Windows, macOS, собственной ОС) запускаются приложения. Главное — возможность использовать программный код на Python/Java/Ruby вместе со связанными библиотеками для этих языков.
  3. При грамотном проектировании функций в Serverless проще создавать слабосвязанные архитектуры, где сбой функции не влияет на работоспособность всей системы.
  4. Низкий порог входа для понимания «наносервисов» до 500 строк (стандартный размер функций в Serverless) намного проще для новых разработчиков, чем работа с устаревшим проектом на миллионы строк кода и сложными зависимостями.

Минусы Serverless-архитектуры

Основные минусы бессерверной архитектуры происходят из несовершенства любой распределенной системы.

  1. Обратная совместимость: ее необходимо постоянно учитывать, так как другая функция или сервис могут зависеть от вашей логики или интерфейса приложения.
  2. Измененная схема взаимодействия: и в монолитных приложениях, и в распределенных системах существенно различаются схемы взаимодействия. Необходимо учитывать асинхронное взаимодействие, возможные задержки, мониторинг различных компонентов приложения.
  3. Риск cascade failure из-за ошибок в архитектуре: сбой в одной из функций часто приводит к сбою большого числа других.
  4. Задержка при запуске функции: цена отличной масштабируемости — то, что функция не запускается при отсутствии вызова. При необходимости запуска функции потеря нескольких секунд может оказаться критичной.
  5. Сложности при отладке: при прохождении запроса через множество функций отлаживать возникающие ошибки оказывается все сложнее.
  6. Привязка к поставщику услуг (vendor lock): возможности одного провайдера облачных сервисов (например, AWS) могут быть сложны для переноса к другому провайдеру (например, Google Cloud) из-за различий в инфраструктуре. Однако с некоторыми усилиями эту зависимость от конкретного провайдера можно уменьшить.

Примеры использования бессерверных архитектур

Бессерверную архитектуру рекомендуется использовать для выполнения краткосрочных задач и управления непредсказуемым трафиком. Основные сценарии применения бессерверных технологий — это:

  • задачи на базе триггеров: любая пользовательская активность, вызывающая событие, подходит для бессерверной архитектуры, так как она позволяет использовать цепочку функций для выполнения задач.
  • создание RESTful APIс бессерверными функциями.
  • асинхронная обработка для выполнения скрытых задач, таких как обработка информации о продукте или обработка видео без задержек для пользователя.
  • проверка безопасности: функции могут использоваться для сканирования экземпляров на наличие уязвимостей и неправильных конфигураций, что делает их надежным средством проверки безопасности.
  • непрерывная интеграция (CI) и непрерывная доставка (CD): бессерверные архитектуры автоматизируют конвейеры CI/CD, например, создавая сборки при фиксации кода.

Часто разработчики постепенно переходят к бессерверной системе, поэтапно перенося части приложений на нее. Бессерверные архитектуры легко масштабируются, что позволяет добавлять новые функции по мере необходимости.

Области применения

При определенных условиях модель Serverless применяют в разных сценариях. Однако есть конкретные случаи, с которых рекомендуется начинать использование этой модели в первую очередь:

  • дополнительное копирование изображений после загрузки исходника на сайт;
  • автоматическое резервное копирование файлов по заданному расписанию;
  • асинхронная отправка уведомлений пользователям (push-уведомления, электронные письма, SMS);
  • различные операции экспорта и импорта данных.

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

Но из этого нельзя сделать вывод о невозможности использования Serverless там, где требуется быстрый ответ. Архитектура широко применяется в таких областях, как:

  • чат-боты;
  • бэкенды для приложений интернета вещей;
  • обработка запросов для идентификации пользователя или получения сведений о геопозиции к основному бэкенду;
  • в качестве независимых API endpoint.