抱歉,如果这是一个幼稚的问题,但我看过 google 员工的一堆谈话,但仍然不明白为什么我会使用 AE 而不是 CF?
如果我没理解错的话,这两种服务的整体概念就是构建“微服务架构”。
- CF和AE都是无状态的
- 都假设在有限的时间内执行
- 两者都可以与 dbs 和其他 gcp api 交互。
但是,AE 必须封装到自己的服务器中。基本上,它在与 CF 相同的功能之上利用了很多复杂性。那么,什么时候应该使用它而不是 CF?
最佳答案
Cloud Functions (CF) 和 Google App Engine (GAE) 是用于不同工作的不同工具。为工作使用正确的工具通常是个好主意。
用钳子钉钉子可能是可能的,但不如用锤子方便。类似地,使用 CF 构建复杂的应用程序可能是可能的,但使用 GAE 构建它肯定会更方便。
与 GAE 相比,CF 有几个缺点(当然是在构建更复杂的应用程序的上下文中):
- 它们仅限于 Node.js、Python、Go、Java、.NET Core 和 Ruby。 GAE 支持其他几种流行的编程语言
- 它们确实是为轻量级的、独立功能部分而设计的,尝试使用此类组件构建复杂的应用程序很快就会变得“笨拙”。是的,每个单独请求的相互关系上下文也必须在 GAE 上恢复,只有 GAE 受益于更方便的方法,而这在 CF 上是不可用的。例如用户 session 管理,如其他评论中所述
- GAE 应用程序具有跨单个请求存在的应用程序上下文,而 CF 则没有。这样的上下文使 GAE 应用程序对某些 Google 服务的访问更加高效/性能(甚至可能),但对于 CF 则不然。例如
memcached
。 - GAE 应用程序上下文的可用性可以为无法在 CF 上运行的其他服务支持更高效/性能更好的客户端库。例如,使用
ndb
客户端库(仅适用于标准 env GAE python 应用程序)访问数据存储可能比使用通用数据存储客户端库更高效/性能更高。 - 与 CF 的“零售”定价(每次调用单独收费)相比,GAE 更具成本效益,因为它是“批发”定价(基于实例小时数,无论特定实例服务多少请求)<
- GAE 应用的响应时间可能通常比 CF 短,因为处理请求的应用实例通常已经在运行,因此:
- GAE 应用程序上下文不需要加载/恢复,它已经可用,CF 需要加载/恢复它
- (大部分时间)处理代码已经加载; CF 的代码仍然需要加载。不太确定这个;我想这取决于底层实现。
关于google-app-engine - 何时选择 App Engine 而不是 Cloud Functions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057770/