Бессерверные вычисления
Бессерверные вычисления (англ. serverless computing) — это модель облачных вычислений, в которой провайдер облачных услуг динамически управляет выделением и распределением вычислительных ресурсов, а пользователь платит только за фактически использованные ресурсы при выполнении кода, не управляя серверной инфраструктурой. В отличие от традиционных облачных моделей (IaaS, PaaS), при бессерверном подходе разработчик не создаёт, не настраивает и не масштабирует серверы, а сосредотачивается исключительно на написании кода приложения. Ключевой особенностью является автоматическое масштабирование от нуля до пиковой нагрузки и оплата по факту выполнения (по модели pay-as-you-go), что отличает бессерверные вычисления от других облачных сервисов, где ресурсы резервируются заранее.
История
Концепция бессерверных вычислений возникла как развитие идей платформы как услуги (PaaS) и контейнеризации. Первые коммерческие реализации появились в середине 2010-х годов. В 2014 году компания Amazon Web Services (AWS) запустила сервис AWS Lambda, который считается первой широко доступной платформой для бессерверных вычислений. AWS Lambda позволяла запускать код в ответ на события (например, загрузку файла в S3, HTTP-запрос через API Gateway) без необходимости управлять серверами.
В 2016 году Google представила Google Cloud Functions, а Microsoft — Azure Functions. В 2017 году IBM запустила IBM Cloud Functions на базе проекта Apache OpenWhisk. В последующие годы количество провайдеров и поддерживаемых языков программирования (Python, Node.js, Java, Go, .NET, Ruby и др.) значительно расширилось. К 2020-м годам бессерверные вычисления стали одним из основных трендов в облачных технологиях, активно используемым для создания микросервисных архитектур, обработки событий и задач с переменной нагрузкой.
Архитектура и принцип работы
Бессерверные вычисления базируются на концепции функции как услуги (FaaS, Function as a Service). Разработчик пишет код в виде отдельных функций, которые загружаются в облачную платформу. Каждая функция обычно решает одну конкретную задачу (например, обработка изображения, отправка уведомления, запрос к базе данных). Платформа автоматически создаёт изолированное окружение (контейнер) для выполнения каждой функции, запускает его при поступлении события (триггера) и останавливает после завершения работы.
Ключевые компоненты
- Функция (Function): единица кода, написанная на поддерживаемом языке. Функция имеет входные параметры (например, данные события) и возвращает результат.
- Триггер (Trigger): событие, которое запускает выполнение функции. Типичные триггеры: HTTP-запрос (через API-шлюз), изменение в базе данных, загрузка файла в облачное хранилище, сообщение из очереди, запланированное время (cron).
- Платформа выполнения (Execution Environment): изолированный контейнер (часто на основе Docker), который создаётся по запросу. Платформа управляет жизненным циклом контейнера: создание, выполнение, остановка, утилизация.
- Среда выполнения (Runtime): предустановленное программное обеспечение (например, Node.js 18, Python 3.10, OpenJDK 17), в котором работает функция.
- Сервис управления (Orchestration): компонент, который принимает события, распределяет их по функциям, масштабирует количество экземпляров функций и собирает метрики.
Процесс выполнения
- Пользователь загружает код функции в облачную платформу.
- Платформа регистрирует функцию и связывает её с триггерами.
- При наступлении события (например, HTTP-запрос к API) платформа создаёт новый экземпляр контейнера с функцией (если нет уже работающего экземпляра).
- Функция выполняется, обрабатывая входные данные.
- После завершения выполнения контейнер может быть остановлен (если нет новых запросов) или оставаться «тёплым» на короткое время для быстрого ответа на следующий запрос.
- Пользователь получает логи и метрики (время выполнения, количество вызовов, ошибки).
Классификация
Бессерверные вычисления можно классифицировать по типу предоставляемых услуг и сценариям использования.
По типу услуги
- Функции как услуга (FaaS): основной тип, где выполняются отдельные функции. Примеры: AWS Lambda, Azure Functions, Google Cloud Functions, Yandex Cloud Functions (сервис российского облачного провайдера Yandex Cloud).
- Бессерверные базы данных (Serverless Databases): базы данных, которые автоматически масштабируются и оплачиваются по объёму хранимых данных и количеству запросов. Примеры: Amazon Aurora Serverless, Azure Cosmos DB, Google Firestore, Yandex Managed Service for PostgreSQL (с бессерверным режимом).
- Бессерверные хранилища (Serverless Storage): объектные хранилища, которые не требуют управления серверами и масштабируются автоматически. Примеры: Amazon S3, Google Cloud Storage, Yandex Object Storage.
- Бессерверные API-шлюзы (Serverless API Gateways): сервисы для создания и управления API, которые автоматически масштабируются. Примеры: Amazon API Gateway, Azure API Management, Yandex API Gateway.
По сценарию использования
- Обработка событий (Event-driven): функции запускаются в ответ на события из других сервисов (например, изменение в базе данных, загрузка файла). Это наиболее распространённый сценарий.
- HTTP-API и веб-приложения: функции обрабатывают HTTP-запросы через API-шлюз, реализуя бэкенд для веб- и мобильных приложений.
- Пакетная обработка (Batch processing): выполнение задач по расписанию или при накоплении данных (например, генерация отчётов, обработка изображений).
- Потоковая обработка (Stream processing): функции обрабатывают непрерывные потоки данных (например, из IoT-устройств, логов).
- Микросервисы: бессерверные функции используются как отдельные микросервисы, каждый из которых выполняет свою узкую задачу.
Преимущества
- Отсутствие управления инфраструктурой: разработчик не занимается установкой, настройкой, обновлением и мониторингом серверов. Провайдер берёт на себя все задачи по обеспечению работы инфраструктуры.
- Автоматическое масштабирование: платформа автоматически создаёт необходимое количество экземпляров функций для обработки нагрузки — от нуля до тысяч одновременных запросов. Разработчику не нужно настраивать правила масштабирования.
- Оплата по факту использования: пользователь платит только за время выполнения кода (обычно с точностью до миллисекунды) и количество вызовов. Нет платы за простаивающие ресурсы. Это делает модель экономически выгодной для приложений с нерегулярной или низкой нагрузкой.
- Быстрая разработка и развёртывание: функция — это небольшой фрагмент кода, который можно быстро написать, протестировать и развернуть. Цикл разработки сокращается.
- Высокая доступность и отказоустойчивость: провайдеры облачных услуг обеспечивают репликацию функций по нескольким зонам доступности, что гарантирует отказоустойчивость без участия разработчика.
Недостатки и ограничения
- Холодный старт (Cold start): при первом вызове функции или после длительного простоя платформа создаёт новый контейнер, что может занимать от нескольких сотен миллисекунд до нескольких секунд. Это увеличивает время отклика для первого запроса. Проблема особенно актуальна для приложений, требующих низкой задержки.
- Ограничения по времени выполнения: большинство платформ устанавливают максимальное время выполнения одной функции (обычно от 5 до 15 минут). Долго выполняющиеся задачи (например, обработка больших файлов) могут требовать специальных подходов.
- Ограничения по памяти и ресурсам: функция может использовать ограниченный объём памяти (обычно до 3 ГБ) и процессорного времени. Для ресурсоёмких задач это может быть недостатком.
- Сложность отладки и мониторинга: из-за распределённой и эфемерной природы функций традиционные методы отладки (например, локальный запуск с точками остановки) затруднены. Требуется использование специализированных инструментов логирования и трассировки.
- Привязка к провайдеру (Vendor lock-in): код функции обычно зависит от API и сервисов конкретного облачного провайдера (например, AWS Lambda использует собственные триггеры и SDK). Перенос приложения на другую платформу может потребовать значительной переработки.
- Сложность для сложных приложений: архитектура из множества мелких функций может усложнить управление, тестирование и обеспечение согласованности данных. Для больших монолитных приложений бессерверный подход может быть неэффективным.
Применение
Бессерверные вычисления нашли широкое применение в различных областях:
- Веб-приложения и API: создание бэкенда для одностраничных приложений (SPA) и мобильных приложений. Функции обрабатывают HTTP-запросы, аутентификацию, работу с базой данных.
- Обработка данных: преобразование, фильтрация, агрегация данных в реальном времени или по расписанию. Например, обработка логов, генерация миниатюр изображений, конвертация видео.
- IoT (Интернет вещей): приём и обработка данных с датчиков и устройств, отправка уведомлений, управление устройствами.
- Чат-боты и голосовые ассистенты: функции обрабатывают сообщения от пользователей, интегрируются с NLP-сервисами.
- Автоматизация DevOps: выполнение задач по расписанию (резервное копирование, очистка данных), реагирование на события в облачной инфраструктуре (например, автоматическое масштабирование).
- Потоковая аналитика: обработка непрерывных потоков данных из очередей сообщений (Kafka, RabbitMQ) для построения дашбордов и систем оповещения.
Примеры платформ
- Amazon Web Services (AWS) Lambda: пионер в области FaaS, поддерживает множество языков, интеграцию с большинством сервисов AWS. Организация Meta (организация признана экстремистской, деятельность запрещена в РФ) признана экстремистской и запрещена в РФ, но AWS не является запрещённой организацией.
- Microsoft Azure Functions: интеграция с экосистемой Azure, поддержка .NET, Python, Java, Node.js.
- Google Cloud Functions: интеграция с Google Cloud Platform, поддержка Node.js, Python, Go, Java, .NET.
- Yandex Cloud Functions: российский сервис, предоставляемый Yandex Cloud. Поддерживает Python, Node.js, Go, Java, .NET. Интегрирован с другими сервисами Yandex Cloud (Yandex Object Storage, Yandex Managed Service for PostgreSQL, Yandex API Gateway). Не имеет ограничений, связанных с международными санкциями.
- IBM Cloud Functions: на базе Apache OpenWhisk, поддерживает множество языков и интеграцию с сервисами IBM.
- OpenFaaS: открытая платформа для бессерверных вычислений, которую можно развернуть на собственной инфраструктуре (on-premise) или в любом облаке.
Критика
Основная критика бессерверных вычислений связана с проблемой привязки к провайдеру (vendor lock-in) и сложностью переноса приложений между облачными платформами. Также отмечается, что модель не является полностью «бессерверной»: серверы всё ещё существуют, но управляются провайдером, что снижает контроль пользователя над инфраструктурой. Холодный старт остаётся серьёзным ограничением для приложений, чувствительных к задержкам. Кроме того, для сложных, долго выполняющихся задач бессерверный подход может быть менее эффективным, чем традиционные виртуальные машины или контейнеры.
Источники
- AWS Lambda Developer Guide, Amazon Web Services.
- Azure Functions documentation, Microsoft.
- Google Cloud Functions documentation, Google Cloud.
- Yandex Cloud Functions documentation, Yandex Cloud.
- Jonas, E., et al. (2017). Serverless Computing: One Step Forward, Two Steps Back. Proceedings of the 2017 ACM Symposium on Cloud Computing.
- Baldini, I., et al. (2017). Serverless Computing: Current Trends and Open Problems. In: Research Advances in Cloud Computing.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →