何时选择App Engine over Cloud Functions?

时间:2017-11-01 15:00:20

标签: google-app-engine google-cloud-platform google-cloud-functions serverless

对不起,如果这是一个天真的问题,但是我看了谷歌的工作人员的一堆谈话,但仍然不明白为什么我会使用AE而不是CF?

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

  • CF和AE都是无国籍的
  • 假设在有限的时间段内执行
  • 两者都可以与dbs和其他gcp apis进行交互。

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

4 个答案:

答案 0 :(得分:42)

云功能(CF)和Google App Engine(GAE)是针对不同工作的不同工具。使用正确的工具来完成工作通常是一个好主意。

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

与GAE相比,CFs有几个缺点(当然,在构建更复杂的应用程序的情况下):

  • 他们仅限于Node.JS(以及最近的Python),GAE支持其他几种流行的编程语言
  • 它们真的是为轻量级,独立功能而设计的,尝试使用这些组件构建复杂的应用程序很快变得“尴尬”。是的,每个单独请求的相互关系上下文也必须在GAE上恢复,只有GAE可以从更方便的方法中获益,这些方法在CF上是不可用的。例如用户会话管理,如其他评论中所讨论的
  • GAE应用程序具有可在各个请求中存活的应用程序上下文,CF没有。这样的上下文使得访问GAE应用程序的某些Google服务更有效/更高效(甚至更简单),但不适用于CF.例如memcached。
  • GAE应用程序的应用程序上下文的可用性可以支持更高效/高性能的客户端库,以用于无法在CF上运行的其他服务。例如,使用ndb客户端库(仅适用于标准env GAE python应用程序)访问数据存储区比使用通用数据存储区客户端库更高效/更高效。
  • GAE可以更具成本效益,因为它的“批发”价格(基于实例小时,无论特定实例提供多少请求)与CF的“零售”定价(每次调用单独收费)
  • GAE应用程序的响应时间可能通常比CF更短,因为处理请求的应用程序实例通常已在运行,因此:
    • GAE应用程序上下文不需要加载/恢复,它已经可用,CF需要加载/恢复它
    • 处理代码(大部分时间)已经加载,仍然需要加载CF的代码。不确定这个,所以,我想这取决于底层实现。

答案 1 :(得分:10)

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

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

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-1)

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

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

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