88

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

如果我理解正确的话,这两个服务的整个概念都是构建“微服务架构”。

  • CF 和 AE 都是无状态的
  • 两者都假设在有限的时间内执行
  • 两者都可以与 dbs 和其他 gcp api 交互。

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

4

5 回答 5

100

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 服务的访问更加高效/高性能(甚至可能),但对于 CF 则不然。例如内存缓存。
  • GAE 应用程序的应用程序上下文的可用性可以为无法在 CF 上运行的其他服务支持更高效/高性能的客户端库。例如,使用ndb客户端库(仅适用于标准 env GAE python 应用程序)访问数据存储可能比使用通用数据存储客户端库更高效/高性能。
  • 与 CF 的“零售”定价(每次调用单独收费)相比,GAE 的“批发”定价(基于实例小时,无论特定实例服务多少请求)可能更具成本效益
  • GAE 应用程序的响应时间通常比 CF 短,因为处理请求的应用程序实例通常已经在运行,因此
    • GAE 应用程序上下文不需要加载/恢复,它已经可用,CF 需要加载/恢复它
    • 处理代码(大部分时间)已经加载,CFs 的代码仍然需要加载。不确定这一点,我想这取决于底层实现。
于 2017-11-01T17:59:48.477 回答
28

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

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

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

另一种说法是,对于一个非常大的应用程序,从一个更复杂的系统(如 App Engine)开始可以导致代码库不那么复杂,或者至少更容易管理或理解。

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

于 2017-11-01T15:42:07.607 回答
4

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

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

主要用例:

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

App Engine旨在在完全托管的无服务器平台上构建高度可扩展的应用程序。它将帮助您更多地关注代码。基础设施和安全将由 AE 提供

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

用例:

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

AE

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

在此处输入图像描述

参考Cloud FunctionsApp Engine的官方文档页面

于 2021-09-24T07:03:36.680 回答
0

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

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

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

于 2021-02-02T00:59:44.933 回答
0

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

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

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

于 2021-06-02T21:59:07.730 回答