何时使用Google App Engine Flex而不是Google Cloud Run

82
我想使用谷歌的无服务器选项部署容器化代码。据我所知,谷歌有两个选择:谷歌应用引擎灵活环境谷歌云运行(测试版)。我观看了2019年Google Next演讲“我应该在哪里运行我的代码?从5种计算选项中选择”,并阅读了Jerry101对一般问题“Google应用引擎和Google Cloud Run之间的区别是什么?”的回答。对我来说,这基本上听起来像Cloud Run是解决使用Google应用引擎灵活环境限制的答案。我认为选择应用引擎灵活环境而不是云运行的原因可能包括:1. 传统 - 如果您的代码目前依赖于应用引擎Flex,则可能不想处理其迁移;2. 记录 - 应用引擎Flex已经在一般可用性方面存在一段时间,并且在这个意义上具有记录,而云运行只是测试版。

但这两个都是操作类型的考虑因素,对我来说都不是问题。选择App Engine Flex而不是Cloud Run有技术优势吗?

谢谢

注意:截至2019年4月发布此问题,beta版Serverless VPC Access仅适用于标准环境,不适用于Flex,因此这不是在比较App Engine Flex和Cloud Run时需要考虑的问题。

8个回答

74

定价/自动扩展: GAE Flexible环境和Cloud Run之间的定价模型有一些不同。

  • 在GAE Flexible中,您始终至少运行1个实例。因此,即使您的应用程序没有收到任何请求,您也要为该实例付费。计费粒度为1分钟。
  • 在Cloud Run中,只有在处理请求时才需要支付费用,计费粒度为0.1秒。请参见此处,了解Cloud Run计费模型的说明。

基础架构:由于GAE Flexible运行在虚拟机上,因此部署新版本应用程序并进行扩展比Cloud Run慢一些。 Cloud Run的部署速度更快。

可移植性:Cloud Run使用开源Knative API及其容器契约。这使您具有更大的灵活性和自由度。如果您想在您管理的基础设施(例如GKE)上运行相同的工作负载,则可以使用“Cloud Run on GKE”实现。


感谢您提供这个有用的技术答案。我想知道您是否能够补充一些关于App Engine在服务版本之间进行流量分割的能力,以及与Cloud Run相比如何?我看到后者有一些文档,但我不确定是否存在任何值得注意的技术差异-https://cloud.google.com/run/docs/rollouts-rollbacks-traffic-migration - Peter W

23

我实际上建议你认真考虑 Cloud Run 而不是 App Engine。

随着时间的推移,我看到了一些有关正在开发一个“新”的 App Engine 的评论,但实际上 Cloud Run 才是答案。它目前处于测试阶段,这可能是个问题。我见过一些公司在生产中使用 beta 服务,其他公司则等待。然而,如果我今天要开始一个新的应用程序,我肯定会选择 Cloud Run 而不是 App Engine Flex。

Google 在 Kubernetes 方面非常深入,并将其作为业务功能。由于 Cloud Run 坐落在 GKE 上,这意味着它通过其他团队(普通 GKE 基础设施)间接地接受开发。

相反,App Engine 使用的是一些较旧的技术。虽然不错,但它是“昨天的”技术。对我而言,Google 似乎是一个对行业中新技术和广受采用的技术感到非常兴奋的公司。

所有这些都说明 - 当您将服务封装在容器中时,您应该能够在任何地方运行它们?嗯,在任何容器平台上都可以。你可以使用 Cloud Endpoints 来提供你的服务,并在 App Engine 和 Cloud Run 上部署 - 来回交换。然后,在那时,限制可能是提供的服务。例如,Cloud Run 目前不支持一些项目,如 Cloud Load Balancing 或 Cloud Memorystore。这可能会成为今天的阻碍因素。


你知道Cloud Run现在是否支持Cloud Load Balancing吗? - Eric
@Eric 很抱歉这里回复得比较慢。 如果你说的是全局负载均衡器,那么在跨区域使用Cloud Run实例时需要一些步骤。 如果你只想使用单个区域,则Cloud Run有自己的负载均衡器(当然)。 - Brian McBride
Cloud Memorystore / VPC 现在似乎也得到了支持 https://cloud.google.com/memorystore/docs/redis/connect-redis-instance-cloud-run - Thijs Koerselman

6
短故事:Appengine是真实的,相对稳定。Cloud Run基本上只是一个草案/想法,非常不稳定。
长故事:Google Cloud Run处于alpha/beta阶段,可能会遭受许多变化。如果你足够老,你可能还记得Appengine定价如何发生了巨大变化。它承诺基于CPU/RAM的定价,然后决定这不是“可能”的或者至少不太赚钱,并转向基于VM的定价,然后他们发布了一个体面的appengine版本(Appengine Flex或其他名称),但也通过添加最小实例模型再次提高了价格。更不用提无数的API/重大变革或限制变化。
Cloud Run基于gVisor,具有一些限制,因此,根据您使用的语言/库以及您的操作,它可能会崩溃(或者只是Google的实现可能会崩溃)并且没有什么可以做(即修补系统),这将破坏您的生产力和潜在业务。您可以查看其当前问题
免费建议:即使您选择Appengine或Cloud Run,也要避免使用专有的API /服务,例如Google Datastore。它们可能会破坏您的业务。 定价、API和限制将发生变化。没有真正的开源或付费替代方案,因此您的代码无法移植。在Google云之外,您的代码几乎毫无价值。
免责声明:我已经受到appengine变化和数据存储锁定的影响,因此我的观点可能存在偏见。

23
他们可能会破坏你的业务,但也有可能帮助你大幅降低成本和缩短开发时间,同时帮助你构建一个更具可扩展性的平台。但是效果因人而异。老实说,声称应该避免所有专有API/服务过于简单化了。 - Mathyn
1
@Mathyn 谷歌知道如何很好地推销其优点,因此没有必要进一步强化他们的论点。然而,从我的经验来看,在appengine上运行超过60个微服务(在我最高的部署时)实际成本更高(在谷歌最终决定价格后),风险也很高。您无法避免所有专有API,但可以避免与您的服务核心相关的API(即数据库)。缺乏可移植性非常令人沮丧。我有很多可怕的故事要分享...把锁定视为疾病。您无法避免所有疾病,但可以避免最糟糕的疾病。 - Mihai
还有谁对使用Google Datastore感到警惕吗? - SuperUberDuper
3
如果您担心无法在GCP之外使用您的软件,可以使用Google Anthos。它可以使应用程序在本地或云环境中可移植。 - forresthopkinsa

4
我有一个带有REST API接口的机器学习模型,作为微服务。当我尝试在Cloud Run上运行时,它部署了但却无法工作。我不得不切换回App Engine Flexible环境。
目前(2020年7月),Cloud Run(完全托管)的RAM限制为2GB。为了获得更好的硬件,我应该选择具有GKE基础设施的Anthose。但这至少需要4个实例才能正常工作。 由于我的应用程序很小,我选择了App Engine Flexible环境。虽然自动缩放设置需要至少2个实例,但在早期阶段可以通过手动缩放和1个实例为限制来管理。
编辑: 截至2020年8月22日,完全托管的GCP Cloud Run的RAM限制为4GB,核心数量为2。

3

主要区别在于后台任务。

在Cloud Run中,所有内容都由请求启动,一旦该请求完成,实例将不再保持运行状态。

App Engine还提供了一些内置的免费功能,如内存缓存,但我认为这在App Engine Flex中不适用。

对于简单的HTTP API,差异可以忽略不计,并且您可以使用其他GCP产品(例如Cloud Scheduler、Cloud Task)获得App Engine提供的某些功能。

您可以观看以下视频,了解有关Cloud Run的比较和演示: https://www.youtube.com/watch?v=rVWopvGE74c


2

App Engine Flexible 专注于“先写代码”,面向开发人员,App Engine 应用程序由多个服务组成,您在部署应用程序时不必进行任何命名。

GAE 灵活环境的特点:

  • 无法缩减到零
  • 编写在任何支持的编程语言版本中的源代码:Python、Java、Node.js、Go、Ruby、PHP 或 .NET
  • 在包括自定义运行时或其他编程语言编写的源代码的 Docker 容器中运行。
  • 使用或依赖包含本地代码的框架。
  • 访问您的 Google Cloud 项目资源或服务,这些资源或服务位于 Compute Engine 网络中。
  • 最大请求超时时间:60 分钟。

Cloud Run 是一种托管计算平台,使您能够运行通过请求或事件调用的容器,一切都是服务,无论是实际服务还是具有 Web 接口的应用程序,因此请将其用作服务部署而不是应用程序。

Cloud Run 的特点:

  • 它是无服务器的:它抽象了所有基础设施管理
  • 它依赖于您的应用程序应该是无状态的事实。
  • GCP 将启动您的应用程序的多个实例以动态缩放它
  • 可以缩减到零

0

您可以使用以下网址了解Cloud RunApp Engine之间的区别。 托管选项

有时候选择App Engine而不是Cloud Run的原因是,Cloud Run没有后台进程。它的响应时间也仅为15分钟。


1
Cloud Run 可以设置最长 60 分钟的超时时间。如果您需要运行超过一个小时的进程,建议使用 GKE。App Engine 也可以,但现在我推荐使用 GKE。 您可以在 Cloud Run 上运行后台进程,但是您需要使用另一个工具,如 Cloud Scheduler、Cloud Task 等来启动它们。 - Brian McBride

0
Google云应用引擎灵活版是一种无服务器计算服务,允许您在云中运行容器而无需担心基础架构。
要在应用引擎中部署和运行应用程序,您需要创建Docker镜像并将其推送到Google Artifact Registry。
Google云只允许每个Google云项目有一个应用引擎应用程序。
了解更多关于Google云应用引擎的信息,请点击这里https://googlecloudtutorials.com/run-containerize-app-in-google-cloud-app-engine/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接