Когда выбирать App Engine над облачными функциями?

Извините, если это наивный вопрос, но я смотрел кучу разговоров от сотрудников Google и до сих пор не понимаю, почему на земле я бы использовал AE вместо CF?

Если я правильно понял, вся концепция обеих этих служб заключается в создании "архитектуры микросервиса".

  • оба CF и AE являются апатридами
  • оба предполагается выполнить в течение ограниченного периода времени
  • оба могут взаимодействовать с dbs и другим gcp apis.

Хотя, AE должен быть завернут на собственный сервер. В основном он использует множество сложностей, обладающих такими же возможностями, как CF. Итак, когда я должен использовать его вместо CF?

Ответ 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 все еще должен быть загружен. Не уверен насчет этого, хотя, я думаю, это зависит от базовой реализации.

Ответ 2

App Engine лучше подходит для приложений, которые имеют множество функциональных возможностей, которые ведут себя в различных взаимосвязанных (или даже несвязанных) путях, тогда как облачные функции - это более конкретные функции, которые реагируют на какое-то событие и выполняют определенное действие.

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

Вы можете легко реплицировать функции облаков в App Engine, но репликация крупномасштабного приложения App Engine с использованием набора дискретных функций Could будет сложной. Например, бэкэнд Spotify основан на App Engine.

Еще один способ сказать, что для значительно большого приложения, начиная с более сложной системы, такой как App Engine, можно привести к кодовой базе, которая является менее сложной или, по крайней мере, проще в управлении или понимании.

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