Контекст выполнения

Контекст выполнения — это временная среда выполнения, которая инициализирует любые внешние зависимости кода функции, такие как подключения к базе данных или эндпойнты HTTP.

При вызове каждой функции Cloud Functions запускает контекст выполнения на основе параметров конфигурации, заданных пользователем при создании этой функции. Ресурсы, необходимые для вызова функции, и управление ими обеспечивает сервис.

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

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

После выполнения функции контекст некоторое время поддерживается в ожидании повторного вызова функции. Это значит, что:

  • Любые объявления в коде функции (вне кода обработчика) остаются инициализированными, обеспечивая дополнительную оптимизацию при повторном вызове функции.

    Например, если функция устанавливает соединение с базой данных, вместо восстановления соединения в последующих вызовах используется исходное соединение. Вы можете добавить в код логику, которая проверяет существование соединения перед его созданием.

  • Каждый контекст выполнения предоставляет 512 МБ дополнительного дискового пространства в каталоге /tmp. Содержимое каталога остается в контексте выполнения, предоставляя временный кеш, который можно использовать для нескольких вызовов. Вы можете добавить дополнительный код, чтобы проверить, есть ли в кеше данные, которые вы сохранили.

    Примечание

    Для файловой системы, смонтированной в каталоге /tmp, установлен флаг NOEXEC, который не позволяет выполнение двоичных файлов, записанных в этот каталог.

  • Фоновые процессы или обратные вызовы, инициированные вашей функцией, которые не завершились до завершения функции, возобновляются, если контекст выполнения будет использован повторно.

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