Контекст выполнения
Контекст выполнения — это временная среда выполнения, которая инициализирует любые внешние зависимости кода функции, такие как подключения к базе данных или эндпоинты HTTP.
При вызове каждой функции Cloud Functions запускает контекст выполнения на основе параметров конфигурации, заданных пользователем при создании этой функции. Ресурсы, необходимые для вызова функции, и управление ими обеспечивает сервис.
При первом вызове функции или после ее обновления может наблюдаться некоторая задержка, так как происходит инициализация — настройка контекста выполнения и необходимая начальная загрузка. При последующих вызовах функции сервис пытается повторно использовать контекст выполнения. Это обеспечивает более высокую производительность последующих вызовов, поскольку нет необходимости проходить заново весь процесс запуска или повторной установки зависимостей.
Инициализация происходит только при создании нового экземпляра функции. Cloud Functions создает новый экземпляр функции при ее вызове, если экземпляров функции нет или их недостаточно для обработки вызовов. Если несколько вызовов функции обрабатываются одним экземпляром, инициализация происходит только при первом из них.
Повторное использование контекста выполнения
После выполнения функции контекст некоторое время поддерживается в ожидании повторного вызова функции. Это значит, что:
-
Любые объявления в коде функции (вне кода обработчика) остаются инициализированными, обеспечивая дополнительную оптимизацию при повторном вызове функции.
Например, если функция устанавливает соединение с базой данных, вместо восстановления соединения в последующих вызовах используется исходное соединение. Вы можете добавить в код логику, которая проверяет существование соединения перед его созданием.
-
Каждый контекст выполнения предоставляет 512 МБ дополнительного дискового пространства в каталоге
/tmp
. Содержимое каталога остается в контексте выполнения, предоставляя временный кэш, который можно использовать для нескольких вызовов. Вы можете добавить дополнительный код, чтобы проверить, есть ли в кэше данные, которые вы сохранили.Примечание
Для файловой системы, смонтированной в каталоге
/tmp
, установлен флагNOEXEC
, который не позволяет выполнение двоичных файлов, записанных в этот каталог. -
Фоновые процессы или обратные вызовы, инициированные вашей функцией, которые не завершились до завершения функции, возобновляются, если контекст выполнения будет использован повторно.
Могут возникнуть ситуации, когда сервису необходимо создать новый контекст выполнения, что может привести к неожиданным результатам, например, к сбоям подключения к базе данных. Убедитесь, что любые фоновые процессы или обратные вызовы в вашем коде завершились до того, как завершится выполнение функции.