当前位置: 首页 > 知识库问答 >
问题:

何时使用Google App Engine Flex vs Google Cloud Run

长孙鸿波
2023-03-14

我想使用谷歌的无服务器选项之一部署容器化代码。据我所知,谷歌有两种选择:

  1. Google App Engine灵活环境
  2. Google Cloud Run(测试版)

我已经看了2019年谷歌下一场演讲,我应该在哪里运行代码?从5个计算选项中选择。我读了Jerry101对“谷歌应用程序引擎和谷歌云运行之间有什么区别?”这一一般性问题的回答。

在我看来,云运行基本上是对使用Google App Engine灵活环境的局限性的回答。

我之所以选择App Engine Flexible Environment而不是Cloud Run,原因如下:

  • 遗留-如果您的代码当前依赖于App Engine Flex,您可能不想处理移动它的问题

但这些都是操作类型的考虑因素。这两件事对我来说都不重要。选择App Engine Flex而不是Cloud Run有技术优势吗?

谢谢

注意:自2019年4月发布此问题以来,App Engine的beta无服务器VPC访问仅适用于标准环境,而不适用于Flex,因此这不是App Engine Flex与Cloud Run的问题中的考虑因素

共有3个答案

祁俊拔
2023-03-14

短篇故事:Appengine是真实的、相对稳定的东西。Cloud Run几乎只是一个草稿/想法,非常不稳定。

说来话长:谷歌云运行的alpha/beta版本可能会发生很多变化。如果你已经足够大了,你可能还记得Appengine定价发生了多么巨大的变化。它promise了基于CPU/RAM的定价,然后它决定这是不“可能的”,或者至少不是非常有利可图,并转向基于VM的定价,然后他们发布了一个像样的appengine版本(appengine Flex或当时的任何名称),但也通过添加最小实例模型再次提高了价格。更不用说数不清的API/突破性变化或限制性变化了。

Cloud Run基于gVisor,它有一些局限性,因此取决于您使用的语言/库以及您所做的事情,它可能会在某个时候崩溃(或者仅仅是谷歌的实现可能会崩溃),而您无能为力(即修补系统),它将破坏您的生产力,并可能破坏您的业务。你可以看看它目前的问题。

免费建议:即使你选择Appengine或Cloud Run,也要避免使用谷歌数据存储等专有API/服务。他们可能会毁了你的生意。定价、API和限制将发生变化。没有真正的开源或付费替代方案,因此您的代码不可移植。你的代码在谷歌云之外毫无价值。

免责声明:我已经被appengine更改和数据存储锁定烧死了,所以我的观点可能有偏见。

淳于星宇
2023-03-14

我真的建议你认真考虑云运行的应用程序引擎。

随着时间的推移,我看到了一些关于“新”应用程序引擎的评论,看起来云运行就是答案。它处于测试阶段,这可能是一个问题。我看到一些公司在生产中使用测试版服务,而其他公司则在等待。然而,如果我今天要开始一个新的应用程序,那肯定是应用程序引擎Flex上的云运行。

作为一项商业功能,谷歌对Kubernetes非常深入。由于Cloud Run位于GKE上,这意味着它通过其他团队(通用GKE基础设施)间接接受开发。

相反,App Engine采用的是一些较旧的技术。虽然它还不错,但它是“昨天的”技术。在我看来,谷歌似乎是一家对行业内的新事物和高度采用的东西感到非常兴奋的公司。

所有这些都说——当你把你的服务包装在容器中时,你应该能够在任何地方运行它们?嗯,任何地方都有容器平台。你可以用云endpoint这样的东西来存放你的服务,你可以在应用引擎和云运行上部署——来回交换。然后,在这一点上,限制可能是提供的服务。例如,云运行目前不支持某些项目,比如云负载平衡或云内存商店。这可能是今天的一个障碍。

苏法
2023-03-14

定价/自动缩放:GAE Flexible Environment和Cloud Run之间的定价模型有点不同。

  • 在GAE Flexible中,任何时候都至少运行一个实例。因此,即使你的应用程序没有收到任何请求,你也要为此实例付费。计费粒度为1分钟

底层基础设施:由于GAE Flexible是在虚拟机上运行的,所以部署新版本的应用程序并进行扩展要比Cloud Run慢一些。云计算部署速度更快。

可移植性:Cloud Run使用开源的Knative API及其容器契约。这给了你更大的灵活性和自由度。如果您想在自己管理的infra(如GKE)上运行相同的工作负载,可以使用“Cloud run on GKE”。

 类似资料:
  • 问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一

  • 我和我的团队一直在使用Spring boot开发一系列微服务。由于服务经历了JUnit和Spring Boot升级(我们现在使用的是Spring Boot 2和JUnit 5),不同开发人员实现的不同JUnit现在使用不同的模式: @扩展为 今天,它们之间的区别是什么?我们真的需要它们来进行单元测试还是嵌入到一些新的Spring Boot注释中?

  • 问题内容: 我得到了asyncio在Python 3.5 中使用的流程,但是我还没有看到关于我应该使用什么东西,我不应该使用的await东西或者它在哪里容易出现的描述。我是否仅需要根据“这是IO操作并应进行await编辑” 来做出最好的判断? 问题答案: 默认情况下,所有代码都是同步的。你可以使用使其异步定义函数,async def并使用来“调用”这些函数await。一个更正确的问题是“什么时候应

  • 问题内容: 我感觉好像总是被教导要使用s,并且我经常看到它们与s 混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始: 那就是我正在从事的工作: 我看到很多像: 似乎LEFT也可能是INNER,有没有抓住的机会? 问题答案: 有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。 这是显示差异的示例。我们将从基本数据开始: 在这里,我们将看到内部联接和左

  • 问题内容: 定制JPA映射器类具有以下方法: 如果我正确理解clear(),它将从上下文中删除所有持久性实体。-资源 但是,我也在这里阅读, 关于何时调用clear()的明确准则是什么? 问题答案: 文章对此进行了解释。清除实体管理器将清空其关联的缓存,从而迫使新的数据库查询在事务中稍后执行。使用事务绑定的实体管理器时,几乎几乎不需要清除实体管理器。我看到有两个原因需要清除: 在进行批处理时,为了

  • 我编写jUnit测试用例有3个目的: 确保我的代码满足所有(或大部分)输入组合/值下所需的所有功能。 以确保我可以更改实现,并依靠JUnit测试用例来告诉我,我的所有功能仍然得到满足。 作为我的代码处理的所有用例的文档,并作为重构的规范--如果需要重写代码的话。(重构代码,如果我的jUnit测试失败--您可能错过了一些用例)。 我不明白为什么或者什么时候应该使用。当我看到被调用时,它告诉我,我的j

  • 自定义JPA映射器类有一个方法: 如果我正确理解clear(),它将从上下文中删除所有持久实体-来源 然而,我也在这里读到, 关于何时调用 clear() 的明确准则是什么?

  • 我正在阅读OracleDocGenericmethod中的泛型方法。当它说什么时候使用通配符和什么时候使用泛型方法时,我对比较感到很困惑。引用文档。 我们本可以在这里使用通用方法: [...]这告诉我们类型参数正被用于多态;它的唯一作用是允许在不同的调用站点使用各种实际的参数类型。如果是这样的话,应该使用通配符。通配符旨在支持灵活的子类型,这就是我们在这里试图表达的。 我们不觉得像《代码》(Col