Что такое бессерверная архитектура?
Serverless Architecture (бессерверная архитектура) — метод запуска приложений в облаке, не требующий выделенного сервера. Эта модель абстрагирует пользователей от физической или виртуальной инфраструктуры серверов. Взаимодействие идет не напрямую с серверами или их функциями, а с интерфейсом API. Юзеры не управляют серверами, не масштабируют их, не занимаются миграцией данных — физически или виртуально.
Пользователь облачных услуг арендует инструменты и интерфейсы для запуска приложений у облачного провайдера, не оплачивая аренду самой серверной инфраструктуры. Поэтому Serverless-архитектура экономически выгодна. Эта архитектура широко применяется в областях анализа big data искусственного интеллекта (ИИ), интернета вещей (IoT). Расскажем о достоинствах и недостатках модели, приведем конкретные примеры.
Плюсы Serverless-архитектуры
- Эластичность, возможность быстрого масштабирования.
- Независимость от ОС и другого программного обеспечения, необходимого для выполнения приложения. Не важно, на какой операционной системе (Linux, Windows, macOS, собственной ОС) запускаются приложения. Главное — возможность использовать программный код на Python/Java/Ruby вместе со связанными библиотеками для этих языков.
- При грамотном проектировании функций в Serverless проще создавать слабосвязанные архитектуры, где сбой функции не влияет на работоспособность всей системы.
- Низкий порог входа для понимания «наносервисов» до 500 строк (стандартный размер функций в Serverless) намного проще для новых разработчиков, чем работа с устаревшим проектом на миллионы строк кода и сложными зависимостями.
Минусы Serverless-архитектуры
Основные минусы бессерверной архитектуры происходят из несовершенства любой распределенной системы.
- Обратная совместимость: ее необходимо постоянно учитывать, так как другая функция или сервис могут зависеть от вашей логики или интерфейса приложения.
- Измененная схема взаимодействия: и в монолитных приложениях, и в распределенных системах существенно различаются схемы взаимодействия. Необходимо учитывать асинхронное взаимодействие, возможные задержки, мониторинг различных компонентов приложения.
- Риск cascade failure из-за ошибок в архитектуре: сбой в одной из функций часто приводит к сбою большого числа других.
- Задержка при запуске функции: цена отличной масштабируемости — то, что функция не запускается при отсутствии вызова. При необходимости запуска функции потеря нескольких секунд может оказаться критичной.
- Сложности при отладке: при прохождении запроса через множество функций отлаживать возникающие ошибки оказывается все сложнее.
- Привязка к поставщику услуг (vendor lock): возможности одного провайдера облачных сервисов (например, AWS) могут быть сложны для переноса к другому провайдеру (например, Google Cloud) из-за различий в инфраструктуре. Однако с некоторыми усилиями эту зависимость от конкретного провайдера можно уменьшить.
Примеры использования бессерверных архитектур
Бессерверную архитектуру рекомендуется использовать для выполнения краткосрочных задач и управления непредсказуемым трафиком. Основные сценарии применения бессерверных технологий — это:
- задачи на базе триггеров: любая пользовательская активность, вызывающая событие, подходит для бессерверной архитектуры, так как она позволяет использовать цепочку функций для выполнения задач.
- создание RESTful APIс бессерверными функциями.
- асинхронная обработка для выполнения скрытых задач, таких как обработка информации о продукте или обработка видео без задержек для пользователя.
- проверка безопасности: функции могут использоваться для сканирования экземпляров на наличие уязвимостей и неправильных конфигураций, что делает их надежным средством проверки безопасности.
- непрерывная интеграция (CI) и непрерывная доставка (CD): бессерверные архитектуры автоматизируют конвейеры CI/CD, например, создавая сборки при фиксации кода.
Часто разработчики постепенно переходят к бессерверной системе, поэтапно перенося части приложений на нее. Бессерверные архитектуры легко масштабируются, что позволяет добавлять новые функции по мере необходимости.
Области применения
При определенных условиях модель Serverless применяют в разных сценариях. Однако есть конкретные случаи, с которых рекомендуется начинать использование этой модели в первую очередь:
- дополнительное копирование изображений после загрузки исходника на сайт;
- автоматическое резервное копирование файлов по заданному расписанию;
- асинхронная отправка уведомлений пользователям (push-уведомления, электронные письма, SMS);
- различные операции экспорта и импорта данных.
Для выполнения всех этих задач либо задается расписание, либо они не требуют моментального ответа. Функции в рамках бессерверной модели не работают непрерывно. Они запускаются при необходимости, а затем отключаются при неиспользовании, что может привести к задержкам при их запуске.
Но из этого нельзя сделать вывод о невозможности использования Serverless там, где требуется быстрый ответ. Архитектура широко применяется в таких областях, как:
- чат-боты;
- бэкенды для приложений интернета вещей;
- обработка запросов для идентификации пользователя или получения сведений о геопозиции к основному бэкенду;
- в качестве независимых API endpoint.