Google app engine 何时选择应用程序引擎而不是云功能?

Google app engine 何时选择应用程序引擎而不是云功能?,google-app-engine,google-cloud-platform,google-cloud-functions,serverless,Google App Engine,Google Cloud Platform,Google Cloud Functions,Serverless,对不起,如果这是一个幼稚的问题,但我已经看了谷歌员工的一系列谈话,仍然不明白为什么我会使用AE而不是CF 如果我理解正确的话,这两种服务的整体概念都是构建“微服务架构” CF和AE都是无状态的 两者都假设在有限的时间内执行 两者都可以与dbs和其他gcp API交互 不过,AE必须打包到自己的服务器中。基本上,它在与CF相同的功能上利用了许多复杂性。因此,我应该在什么时候使用它来代替CF?App Engine更适合于应用程序,这些应用程序有许多功能以各种相互关联(甚至不相关)的方式运行,而云

对不起,如果这是一个幼稚的问题,但我已经看了谷歌员工的一系列谈话,仍然不明白为什么我会使用AE而不是CF

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

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

不过,AE必须打包到自己的服务器中。基本上,它在与CF相同的功能上利用了许多复杂性。因此,我应该在什么时候使用它来代替CF?

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

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

您可以轻松地在App Engine上复制云功能,但使用一组离散的函数复制大型App Engine应用程序将非常复杂。例如,Spotify的后端是基于应用程序引擎的

另一种说法是,对于一个非常大的应用程序,从一个更复杂的系统(如AppEngine)开始,可以得到一个不太复杂的代码库,或者至少更易于管理或理解

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

云功能(CFs)和谷歌应用引擎(GAE)是用于不同工作的不同工具。在工作中使用正确的工具通常是一个好主意

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

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

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

由于云功能和应用程序引擎都是无服务器服务,这就是我的感受

对于微服务-我们可以使用CF或应用程序引擎。不过我更喜欢CF的


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

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

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


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

Spotify示例具有误导性:它是在引入CF之前开发的。我仍然认为它是一个比云功能更适合应用程序引擎的复杂应用程序的好例子,因为它需要会话管理之类的东西,并且由许多单独的组件组成,作为一个内聚应用程序呈现。我不能创建“相互关联”的CF吗?我很确定这没有问题。如果我理解正确的话,你剩下的答案是AE比CF更复杂-我理解,但我看不出这有什么好处