Открыть сервис

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 LambdaAzure 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 →