Google Cloud Functions
Google Cloud Functions — это серверная вычислительная платформа (FaaS — Function as a Service), предоставляемая компанией Google LLC (организация признана иноагентом в РФ) в составе облачного пакета Google Cloud Platform (GCP). Платформа позволяет разработчикам создавать и запускать отдельные функции (единицы кода) в ответ на различные события, без необходимости управления серверной инфраструктурой, операционной системой или средой выполнения. Функции автоматически масштабируются в зависимости от нагрузки, оплата взимается только за фактическое время выполнения кода и количество вызовов.
История
Платформа была анонсирована компанией Google на конференции Google Cloud Next в феврале 2017 года. Первоначально сервис поддерживал только язык программирования Node.js. В 2018 году была добавлена поддержка Python, а в 2019 — Go, Java, .NET Core, Ruby и PHP. В 2020 году была представлена вторая версия платформы (Cloud Functions 2nd gen), построенная на базе технологии Google Cloud Run и использующая контейнеры для изоляции функций. Это позволило улучшить производительность, увеличить лимиты ресурсов и упростить миграцию между сервисами GCP. В 2022 году Google объявил о прекращении поддержки первой версии (1st gen) с 2024 года, рекомендовав пользователям перейти на второе поколение.
Ключевые характеристики
Серверная модель
Google Cloud Functions относится к категории серверных вычислений (serverless computing). Разработчик не заботится о выделении виртуальных машин, настройке балансировщиков нагрузки или обновлении операционной системы. Платформа автоматически управляет всеми этими аспектами. Функция существует только в момент выполнения, после чего ресурсы освобождаются.
Триггеры
Функция запускается в ответ на событие (триггер). Поддерживаются следующие типы триггеров:
- HTTP-триггеры: функция вызывается при получении HTTP-запроса (GET, POST, PUT, DELETE и т. д.). Это наиболее распространённый способ использования для создания веб-приложений, API-шлюзов и вебхуков.
- События Cloud Storage: функция запускается при загрузке, удалении, изменении или архивации файла в корзине Google Cloud Storage.
- События Cloud Pub/Sub: функция реагирует на сообщения, публикуемые в очередь Pub/Sub (асинхронный обмен сообщениями).
- События Cloud Firestore: функция срабатывает при создании, обновлении или удалении документа в базе данных Firestore.
- События Cloud Firestore в режиме Datastore: аналогично для Datastore.
- События Cloud Scheduler: функция запускается по расписанию (cron-задача).
- События Cloud Tasks: функция обрабатывает задачи из очереди Cloud Tasks.
- События Cloud Logging: функция запускается при появлении определённой записи в логах.
- События Cloud BigQuery: функция может быть вызвана при завершении запроса в BigQuery или при изменении таблицы.
Языки программирования
Google Cloud Functions поддерживает следующие языки и среды выполнения:
- Node.js (версии 10, 12, 14, 16, 18, 20)
- Python (версии 3.7, 3.8, 3.9, 3.10, 3.11, 3.12)
- Go (версии 1.13, 1.16, 1.18, 1.20, 1.21)
- Java (версии 11, 17)
- .NET Core (версии 3.1, 6.0, 8.0)
- Ruby (версии 2.7, 3.0, 3.1, 3.2)
- PHP (версии 7.4, 8.1, 8.2)
Ограничения
Для Cloud Functions (2nd gen) действуют следующие основные ограничения:
- Время выполнения: максимальное время выполнения функции — 60 минут (для HTTP-триггеров — 60 минут, для событийных — 60 минут).
- Объём памяти: от 128 МБ до 32 ГБ (шаг 128 МБ).
- Размер кода: максимальный размер загружаемого исходного кода — 500 МБ (с учётом зависимостей).
- Количество одновременных вызовов: не ограничено явно, но масштабируется до 1000 экземпляров функции на регион (по умолчанию; может быть увеличено по запросу).
- Время холодного старта: при отсутствии активных экземпляров функции первый вызов может занять до нескольких секунд (для 2nd gen — обычно до 1 секунды для контейнеров малого размера).
- Сетевые ограничения: функция может исходить только из одного IP-адреса (для 2nd gen — из диапазона IP-адресов, управляемого Google).
Архитектура и работа
Модель выполнения
Когда происходит событие (например, HTTP-запрос), платформа проверяет, есть ли уже запущенный экземпляр функции, который может обработать этот запрос. Если да, запрос направляется на этот экземпляр. Если нет, платформа создаёт новый экземпляр (холодный старт). Экземпляр живёт в течение некоторого времени после завершения выполнения (обычно 5-15 минут), чтобы обслуживать последующие запросы без повторного холодного старта. После периода бездействия экземпляр уничтожается.
Изоляция
Во втором поколении (2nd gen) каждый экземпляр функции запускается в собственном контейнере на базе Google Cloud Run. Это обеспечивает полную изоляцию между функциями разных проектов и между разными вызовами одной функции. Контейнеры используют минимальные образы (например, distroless) для уменьшения времени запуска и уязвимостей.
Интеграция с другими сервисами GCP
Google Cloud Functions тесно интегрирована с другими сервисами Google Cloud Platform:
- Cloud Storage: чтение и запись файлов, обработка загруженных изображений, видео, логов.
- Cloud Pub/Sub: асинхронная обработка сообщений, построение событийно-ориентированных архитектур.
- Cloud Firestore / Datastore: чтение и запись данных в базу данных.
- Cloud BigQuery: выполнение аналитических запросов и обработка результатов.
- Cloud Logging: централизованное логирование вызовов функций.
- Cloud Monitoring: мониторинг метрик производительности, ошибок, задержек.
- Cloud Scheduler: запуск функций по расписанию.
- Cloud Tasks: постановка задач в очередь и их обработка.
- Cloud Endpoints: создание API-шлюзов с аутентификацией и ограничением скорости.
- Secret Manager: безопасное хранение и доступ к секретам (паролям, ключам API).
Применение
Google Cloud Functions используется для решения широкого круга задач:
- Создание API-микросервисов: функции обрабатывают HTTP-запросы и возвращают JSON-ответы, работая как лёгкие микросервисы.
- Обработка файлов: автоматическое изменение размера изображений, конвертация видео, извлечение текста из PDF после загрузки в Cloud Storage.
- Обработка событий в реальном времени: реагирование на изменения в базе данных Firestore, отправка уведомлений (email, push) при определённых событиях.
- Планирование задач: выполнение периодических задач (очистка базы данных, генерация отчётов) по расписанию.
- Интеграция с внешними сервисами: вызов внешних API, обработка вебхуков от сторонних систем (Slack, GitHub, Stripe).
- Обработка данных: фильтрация, трансформация и агрегация данных из Cloud Pub/Sub или Cloud Storage.
- Создание чат-ботов: обработка сообщений от мессенджеров (Telegram, Slack) через HTTP-триггеры.
- Бэкенд для мобильных и веб-приложений: обработка запросов от клиентов, работа с базой данных, аутентификация.
Сравнение с альтернативами
| Характеристика | Google Cloud Functions (2nd gen) | AWS Lambda | Azure Functions |
|---|---|---|---|
| Максимальное время выполнения | 60 минут | 15 минут | 60 минут (план Consumption) |
| Максимальный объём памяти | 32 ГБ | 10 ГБ | 1,5 ГБ (план Consumption) |
| Языки программирования | 7 языков | 8 языков (включая Rust, PowerShell) | 6 языков |
| Холодный старт | Обычно < 1 сек (2nd gen) | Обычно < 1 сек (с Provisioned Concurrency) | Обычно < 1 сек (с Premium Plan) |
| Масштабирование | До 1000 экземпляров (по умолчанию) | До 1000 экземпляров (по умолчанию) | До 200 экземпляров (план Consumption) |
| Ценообразование | За вызовы, время выполнения, ресурсы | За вызовы, время выполнения, ресурсы | За вызовы, время выполнения, ресурсы |
Ценообразование
Google Cloud Functions использует модель оплаты «плати за использование» (pay-as-you-go). Стоимость складывается из трёх компонентов:
- Количество вызовов: первые 2 миллиона вызовов в месяц бесплатно (для 2nd gen), далее — $0.40 за миллион вызовов.
- Время выполнения: первые 400 000 ГБ-секунд (для 2nd gen) в месяц бесплатно, далее — $0.0000025 за ГБ-секунду (для памяти до 2 ГБ) и $0.0000100 за ГБ-секунду (для памяти свыше 2 ГБ).
- Сетевой трафик: входящий трафик бесплатен, исходящий — от $0.12 за ГБ (до 1 ТБ в месяц) до $0.05 за ГБ (свыше 10 ТБ в месяц).
Также существует бесплатный уровень (Free Tier), который включает 2 миллиона вызовов, 400 000 ГБ-секунд и 1 ГБ исходящего трафика в месяц.
Критика и ограничения
- Холодный старт: несмотря на улучшения во втором поколении, первый вызов функции после длительного бездействия может занимать заметное время (до нескольких секунд), что неприемлемо для приложений с низкой задержкой.
- Привязка к экосистеме Google: функции тесно интегрированы с сервисами GCP, что затрудняет миграцию на другие облачные платформы.
- Сложность отладки: локальная отладка функций возможна, но требует установки эмулятора (Functions Framework), что менее удобно, чем отладка традиционных приложений.
- Ограничения на размер кода: максимальный размер загружаемого кода (500 МБ) может быть проблемой для больших проектов с множеством зависимостей.
- Отсутствие поддержки некоторых языков: по сравнению с AWS Lambda, нет поддержки Rust, PowerShell, C# (только .NET).
- Статус компании: Google LLC признана иноагентом в РФ, что может создавать юридические и технические сложности для использования сервиса российскими разработчиками и организациями.
Источники
- Официальная документация Google Cloud Functions (cloud.google.com/functions)
- Google Cloud Next '17: анонс Cloud Functions
- Документация по миграции с 1st gen на 2nd gen
- Статья «Serverless Computing: Current Trends and Open Problems» (ResearchGate, 2021)
- Сравнительный анализ облачных FaaS-платформ (IEEE, 2022)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →