何时选择 App Engine 而不是 Cloud Functions?

When to choose App Engine over Cloud Functions?

抱歉,如果这是一个幼稚的问题,但我看过 google 员工的一堆谈话,但仍然不明白为什么我会使用 AE 而不是 CF?

如果我没理解错的话,这两种服务的整体概念就是构建 "microservice architecture"。

不过,AE必须打包进自己的服务器。基本上,它在与 CF 相同的功能之上利用了很多复杂性。那么,什么时候应该使用它而不是 CF?

App Engine 更适合应用程序,这些应用程序具有以各种相互关联(甚至不相关)的方式运行的大量功能,而云功能更具体地说是响应某些事件并执行某些功能的单一用途功能具体操作。

App Engine 提供多种语言选择和更多管理选项,而云功能在这些方面受到限制。

您可以轻松地在 App Engine 上复制 Cloud Functions,但使用一堆离散的 Could Functions 复制大型 App Engine 应用程序会很复杂。例如,Spotify 的后端是基于 App Engine 的。

另一种表达方式是,对于非常大的应用程序,从像 App Engine 这样的更复杂的系统开始可以导致代码库不那么复杂,或者至少更易于管理或理解。

最终,这两个 运行 在 Google 的类似底层基础设施上,由您决定哪一个适用于手头的任务。此外,没有什么能阻止您在一个项目中混合使用两者的元素。

Cloud Functions (CF) 和 Google App Engine (GAE) 是针对不同工作的不同工具。为工作使用正确的工具通常是个好主意。

用钳子钉钉子可能,但不如用锤子方便。类似地,使用 CF 构建复杂的应用程序 可能 是可能的,但使用 GAE 构建它肯定会更方便。

与 GAE 相比,CF 有几个缺点(当然是在构建更复杂的应用程序的上下文中):

  • 它们仅限于 Node.js、Python、Go、Java、.NET Core 和 Ruby。 GAE 支持其他几种流行的编程语言
  • 它们确实是为轻量级的 独立 功能而设计的,尝试使用此类组件构建复杂的应用程序很快就会变得“笨拙”。是的,每个单独请求的相互关系上下文也必须在 GAE 上恢复,只有 GAE 受益于更方便的方法,而这在 CF 上是不可用的。例如用户会话管理,如其他评论中所述
  • GAE 应用程序有一个跨单个请求存在的应用程序上下文,CF 没有。对于 GAE 应用程序,这样的上下文使得对某些 Google 服务的访问更多 efficient/performant(甚至可能),但对于 CF 则不然。例如 memcached.
  • GAE 应用程序上下文的可用性可以支持更多 efficient/performant 无法在 CF 上运行的其他服务的客户端库。例如,使用 ndb 客户端库(仅适用于标准环境 GAE python 应用程序)访问数据存储比使用通用数据存储客户端库更 efficient/performant。
  • 与 CF 的“零售”定价(每次调用单独收费)相比,GAE 更具成本效益,因为它是“批发”定价(基于实例小时数,无论特定实例服务多少请求)
  • GAE 应用程序的响应时间可能通常比 CF 短,因为处理请求的应用程序实例通常已经 运行,因此:
    • GAE 应用上下文不需要 loaded/restored,它已经可用,CF 需要 load/restore
    • (大部分时间)处理代码已经加载; CF 的代码仍然需要加载。不太确定这个;我想这取决于底层实现。

Cloud Functions和App Engine都是无服务器服务,我的感受是这样的。

对于微服务 - 我们可以使用 CF 或 App Engine。不过我更喜欢CF。

对于单体应用程序 - App 引擎非常适合。

正如@Cameron 指出的那样,主要区别在于云功能能够可靠地响应事件。例如。如果您想对云存储桶中的更改执行脚本,则有一个专门用于云功能的触发器。在 GAE 中复制这个逻辑会麻烦得多。 Firestore 集合更改也是如此。

此外,GAE 的 B 机(用于基本或手动缩放的后端机器)有更长的 运行 时间,最长可达 24 小时。云功能目前只有 运行 9 分钟 top。此外,GAE 允许您将 cron 作业封装为应用程序代码旁边的 yaml。这使得开发无服务器事件驱动服务更加干净。

当然,其他答案比我的更能涵盖这些方面。但我想指出 Cloud Functions 的主要优势是触发选项。如果你想让功能或服务相互通信,GAE 可能是更好的选择。

Google Cloud Functions 是简单的单一用途函数,在观看事件时触发。

这些功能将消除构建您自己的应用程序服务器来处理轻量级 API 的需要。

主要用例:

  1. 数据处理/ETL : 监听并响应云存储事件,例如文件已创建、更改或删除)
  2. Webhooks :通过一个简单的 HTTP 触发器,响应来自第三方系统的事件,例如 GitHub)
  3. 轻量级 API:从轻量级、松散耦合的逻辑位组成应用程序
  4. 移动后端:侦听和响应来自 Firebase Analytics、实时数据库、身份验证和存储的事件
  5. IoT:数以千计的设备流式传输事件,进而调用 google 云函数来转换和存储数据

App Engine 用于在完全托管的无服务器平台上构建高度可扩展的应用程序。它将帮助您更专注于代码。 AE

将提供基础设施和安全保障

它将支持许多流行的编程语言。您可以通过提供 docker 容器将任何框架引入 App Engine。

用例:

  1. 现代 Web 应用程序 以零配置部署和零服务器管理快速接触客户。

  1. 可扩展的移动后端:与 Firebase 的无缝集成提供了易于使用的前端移动平台以及可扩展且可靠的后端结束。

参考Cloud functions and App Engine

的官方文档页面