何时选择App Engine over Cloud Functions?

stk*_*flw 42 google-app-engine google-cloud-platform google-cloud-functions serverless

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

如果我理解正确的话,这两种服务的整体概念就是构建"微服务架构".

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

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

Dan*_*scu 55

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

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

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

  • 它们仅限于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的代码.不确定这个,所以,我想这取决于底层实现.

  • 请注意,没有什么能阻止我们混合这两个概念。AppEngine 应用程序可以通过云功能启动作业。 (2认同)
  • CFs不仅限于Node.js,因为它现在也支持Python. (2认同)
  • 并且也支持 Go (2认同)

Cam*_*rts 13

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

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

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

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

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

  • Spotify示例具有误导性:它是在引入CF之前开发的. (2认同)
  • 我仍然认为它是比 Cloud Functions 更适合 App Engine 的复杂应用程序的一个很好的例子,因为它需要诸如会话管理之类的东西,并且由许多作为内聚应用程序呈现的单独组件组成。 (2认同)