Ответ 1
Облачные функции (CF) и Google App Engine (GAE) - это разные инструменты для разных задач. Использование правильного инструмента для работы, как правило, хорошая идея.
Вождение гвоздя с помощью плоскогубцев может быть возможным, но это будет не так удобно, как использование молотка. Точно так же возможно создание сложного приложения с использованием CF, но его создание с использованием GAE определенно будет более удобным.
CF имеют ряд недостатков по сравнению с GAE (конечно, в контексте создания более сложных приложений):
- они ограничены
Node.JS
, Python и Go. GAE поддерживает несколько других популярных языков программирования - они действительно разработаны для облегченных, автономных частей функциональности, и попытка создания сложных приложений с использованием таких компонентов быстро становится "неловкой". Да, контекст взаимоотношений для каждого отдельного запроса также должен быть восстановлен в GAE, только GAE выигрывает от более удобных способов сделать то, чего нет в CF. Например, управление сеансом пользователя, как обсуждалось в других комментариях
- Приложения GAE имеют контекст приложения, который сохраняется в отдельных запросах, у CF этого нет. Такой контекст делает доступ к определенным службам Google более эффективным/производительным (или даже простым) для приложений GAE, но не для CF. Например, memcached.
- доступность контекста приложения для приложений GAE может поддерживать более эффективные/производительные клиентские библиотеки для других служб, которые не могут работать на CF. Например, доступ к хранилищу данных с помощью клиентской библиотеки
ndb
(доступной только для стандартных приложений python env GAE) может быть более эффективным/производительным, чем при использовании универсальной клиентской библиотеки хранилища данных. - GAE может быть более рентабельным, так как его "оптовая" цена (в зависимости от количества часов работы экземпляра, независимо от того, сколько запросов обслуживает конкретный экземпляр) по сравнению с "розничной" ценой CF (где каждый вызов оплачивается отдельно)
- Время отклика обычно может быть меньше для приложений GAE, чем для CF, поскольку обычно экземпляр приложения, обрабатывающий запрос, уже запущен, таким образом:
- контекст приложения GAE не нужно загружать/восстанавливать, он уже доступен, CF должны загружать/восстанавливать его
- код обработки (в большинстве случаев) уже загружен, код CF все еще должен быть загружен. Не уверен насчет этого, хотя, я думаю, это зависит от базовой реализации.